From 958f06658e153b686587a6e076d667013b51032d Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Sun, 1 Aug 2021 21:17:09 +0300 Subject: [PATCH 01/55] Update packages to latest --- package.json | 20 +- yarn.lock | 507 +++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 378 insertions(+), 149 deletions(-) diff --git a/package.json b/package.json index d2827e7f..955a7c5f 100644 --- a/package.json +++ b/package.json @@ -45,18 +45,18 @@ "url": "https://github.com/stakewise/contracts/issues" }, "devDependencies": { - "@codechecks/client": "^0.1.10", + "@codechecks/client": "^0.1.11", "@nomiclabs/hardhat-ethers": "^2.0.2", - "@nomiclabs/hardhat-etherscan": "^2.1.2", + "@nomiclabs/hardhat-etherscan": "^2.1.4", "@nomiclabs/hardhat-truffle5": "^2.0.0", "@nomiclabs/hardhat-web3": "^2.0.0", "@openzeppelin/contracts": "3.4.1", "@openzeppelin/contracts-upgradeable": "3.4.1", - "@openzeppelin/hardhat-upgrades": "^1.7.0", - "@openzeppelin/test-helpers": "^0.5.11", + "@openzeppelin/hardhat-upgrades": "^1.9.0", + "@openzeppelin/test-helpers": "^0.5.12", "chai": "^4.3.4", - "chalk": "^4.1.1", - "eslint": "^7.25.0", + "chalk": "^4.1.2", + "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^3.4.0", "eth-sig-util": "^3.0.1", @@ -66,10 +66,10 @@ "hardhat-abi-exporter": "^2.2.1", "hardhat-contract-sizer": "^2.0.3", "hardhat-gas-reporter": "^1.0.4", - "husky": "^6.0.0", - "lint-staged": "10.5.4", - "prettier": "^2.2.1", - "solhint": "^3.3.4", + "husky": "^7.0.1", + "lint-staged": "11.1.1", + "prettier": "^2.3.2", + "solhint": "^3.3.6", "solidity-coverage": "^0.7.16", "web3": "^1.3.5" }, diff --git a/yarn.lock b/yarn.lock index 4d7ccf75..f4b704a1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -30,10 +30,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@codechecks/client@^0.1.10": - version "0.1.10" - resolved "https://registry.yarnpkg.com/@codechecks/client/-/client-0.1.10.tgz#41fe736c424976d9feb8116b131fb9c1f099d105" - integrity sha512-rvX+LknmMohsLTU8mHJqIcNTo8fKfw6A5i7JvT6JJWqwCLi+TujHpRO8BLf48iF96+gU5viVvKfRaUyhc3wloA== +"@codechecks/client@^0.1.11": + version "0.1.11" + resolved "https://registry.yarnpkg.com/@codechecks/client/-/client-0.1.11.tgz#5ca0cb3b0d99fed1c397033c981efeedd8e2ea37" + integrity sha512-dSIzHnGNcXxDZtnVQEXWQHXH2v9KrpnK4mDGDxdwSu3l00rOIVwJcttj0wzx0bC0Q6gs65VsQdZH4gkanLdXOA== dependencies: bluebird "^3.5.3" chalk "^2.4.2" @@ -61,15 +61,15 @@ resolved "https://registry.yarnpkg.com/@cto.af/textdecoder/-/textdecoder-0.0.0.tgz#e1e8d84c936c30a0f4619971f19ca41941af9fdc" integrity sha512-sJpx3F5xcVV/9jNYJQtvimo4Vfld/nD3ph+ZWtQzZ03Zo8rJC7QKQTRcIGS13Rcz80DwFNthCWMrd58vpY4ZAQ== -"@eslint/eslintrc@^0.4.0": - version "0.4.0" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.0.tgz#99cc0a0584d72f1df38b900fb062ba995f395547" - integrity sha512-2ZPCc+uNbjV5ERJr+aKSPRwZgKd2z11x0EgLvb1PURmUrn9QNRXFqje0Ldq454PfAVyaJYyrDvvIKSFP4NnBog== +"@eslint/eslintrc@^0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" + integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== dependencies: ajv "^6.12.4" debug "^4.1.1" espree "^7.3.0" - globals "^12.1.0" + globals "^13.9.0" ignore "^4.0.6" import-fresh "^3.2.1" js-yaml "^3.13.1" @@ -121,7 +121,7 @@ "@ethersproject/properties" "^5.1.0" "@ethersproject/strings" "^5.1.0" -"@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.0.2": +"@ethersproject/abi@^5.0.0-beta.146": version "5.0.13" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.13.tgz#600a559c3730467716595658beaa2894b4352bcc" integrity sha512-2coOH3D7ra1lwamKEH0HVc+Jbcsw5yfeCgmY8ekhCDualEiyyovD2qDcMBBcY3+kjoLHVTmo7ost6MNClxdOrg== @@ -136,6 +136,21 @@ "@ethersproject/properties" "^5.0.7" "@ethersproject/strings" "^5.0.8" +"@ethersproject/abi@^5.1.2": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.4.0.tgz#a6d63bdb3672f738398846d4279fa6b6c9818242" + integrity sha512-9gU2H+/yK1j2eVMdzm6xvHSnMxk8waIHQGYCZg5uvAyH0rsAzxkModzBSpbAkAuhKFEovC2S9hM4nPuLym8IZw== + dependencies: + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/hash" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/abstract-provider@5.1.0", "@ethersproject/abstract-provider@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.1.0.tgz#1f24c56cda5524ef4ed3cfc562a01d6b6f8eeb0b" @@ -162,6 +177,19 @@ "@ethersproject/transactions" "^5.0.9" "@ethersproject/web" "^5.0.12" +"@ethersproject/abstract-provider@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.4.0.tgz#415331031b0f678388971e1987305244edc04e1d" + integrity sha512-vPBR7HKUBY0lpdllIn7tLIzNN7DrVnhCLKSzY0l8WAwxz686m/aL7ASDzrVxV93GJtIub6N2t4dfZ29CkPOxgA== + dependencies: + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/networks" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/web" "^5.4.0" + "@ethersproject/abstract-signer@5.1.0", "@ethersproject/abstract-signer@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.1.0.tgz#744c7a2d0ebe3cc0bc38294d0f53d5ca3f4e49e3" @@ -184,6 +212,17 @@ "@ethersproject/logger" "^5.0.8" "@ethersproject/properties" "^5.0.7" +"@ethersproject/abstract-signer@^5.4.0": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.4.1.tgz#e4e9abcf4dd4f1ba0db7dff9746a5f78f355ea81" + integrity sha512-SkkFL5HVq1k4/25dM+NWP9MILgohJCgGv5xT5AcRruGz4ILpfHeBtO/y6j+Z3UN/PAjDeb4P7E51Yh8wcGNLGA== + dependencies: + "@ethersproject/abstract-provider" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/address@5.1.0", "@ethersproject/address@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.1.0.tgz#3854fd7ebcb6af7597de66f847c3345dae735b58" @@ -206,6 +245,17 @@ "@ethersproject/logger" "^5.0.8" "@ethersproject/rlp" "^5.0.7" +"@ethersproject/address@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.4.0.tgz#ba2d00a0f8c4c0854933b963b9a3a9f6eb4a37a3" + integrity sha512-SD0VgOEkcACEG/C6xavlU1Hy3m5DGSXW3CUHkaaEHbAPPsgi0coP5oNPsxau8eTlZOk/bpa/hKeCNoK5IzVI2Q== + dependencies: + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/rlp" "^5.4.0" + "@ethersproject/base64@5.1.0", "@ethersproject/base64@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.1.0.tgz#27240c174d0a4e13f6eae87416fd876caf7f42b6" @@ -220,6 +270,13 @@ dependencies: "@ethersproject/bytes" "^5.0.9" +"@ethersproject/base64@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.4.0.tgz#7252bf65295954c9048c7ca5f43e5c86441b2a9a" + integrity sha512-CjQw6E17QDSSC5jiM9YpF7N1aSCHmYGMt9bWD8PWv6YPMxjsys2/Q8xLrROKI3IWJ7sFfZ8B3flKDTM5wlWuZQ== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/basex@5.1.0", "@ethersproject/basex@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.1.0.tgz#80da2e86f9da0cb5ccd446b337364d791f6a131c" @@ -246,6 +303,15 @@ "@ethersproject/logger" "^5.0.8" bn.js "^4.4.0" +"@ethersproject/bignumber@^5.4.0": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.4.1.tgz#64399d3b9ae80aa83d483e550ba57ea062c1042d" + integrity sha512-fJhdxqoQNuDOk6epfM7yD6J8Pol4NUCy1vkaGAkuujZm0+lNow//MKu1hLhRiYV4BsOHyBv5/lsTjF+7hWwhJg== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + bn.js "^4.11.9" + "@ethersproject/bytes@5.1.0", "@ethersproject/bytes@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.1.0.tgz#55dfa9c4c21df1b1b538be3accb50fb76d5facfd" @@ -260,6 +326,13 @@ dependencies: "@ethersproject/logger" "^5.0.8" +"@ethersproject/bytes@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.4.0.tgz#56fa32ce3bf67153756dbaefda921d1d4774404e" + integrity sha512-H60ceqgTHbhzOj4uRc/83SCN9d+BSUnOkrr2intevqdtEMO1JFVZ1XL84OEZV+QjV36OaZYxtnt4lGmxcGsPfA== + dependencies: + "@ethersproject/logger" "^5.4.0" + "@ethersproject/constants@5.1.0", "@ethersproject/constants@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.1.0.tgz#4e7da6367ea0e9be87585d8b09f3fccf384b1452" @@ -274,6 +347,13 @@ dependencies: "@ethersproject/bignumber" "^5.0.13" +"@ethersproject/constants@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.4.0.tgz#ee0bdcb30bf1b532d2353c977bf2ef1ee117958a" + integrity sha512-tzjn6S7sj9+DIIeKTJLjK9WGN2Tj0P++Z8ONEIlZjyoTkBuODN+0VfhAyYksKi43l1Sx9tX2VlFfzjfmr5Wl3Q== + dependencies: + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/contracts@5.1.1": version "5.1.1" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.1.1.tgz#c66cb6d618fcbd73e20a6b808e8f768b2b781d0b" @@ -318,6 +398,20 @@ "@ethersproject/properties" "^5.0.7" "@ethersproject/strings" "^5.0.8" +"@ethersproject/hash@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.4.0.tgz#d18a8e927e828e22860a011f39e429d388344ae0" + integrity sha512-xymAM9tmikKgbktOCjW60Z5sdouiIIurkZUr9oW5NOex5uwxrbsYG09kb5bMcNjlVeJD3yPivTNzViIs1GCbqA== + dependencies: + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/hdnode@5.1.0", "@ethersproject/hdnode@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.1.0.tgz#2bf5c4048935136ce83e9242e1bd570afcc0bc83" @@ -371,6 +465,14 @@ "@ethersproject/bytes" "^5.0.9" js-sha3 "0.5.7" +"@ethersproject/keccak256@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.4.0.tgz#7143b8eea4976080241d2bd92e3b1f1bf7025318" + integrity sha512-FBI1plWet+dPUvAzPAeHzRKiPpETQzqSUWR1wXJGHVWi4i8bOSrpC3NwpkPjgeXG7MnugVc1B42VbfnQikyC/A== + dependencies: + "@ethersproject/bytes" "^5.4.0" + js-sha3 "0.5.7" + "@ethersproject/logger@5.1.0", "@ethersproject/logger@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.1.0.tgz#4cdeeefac029373349d5818f39c31b82cc6d9bbf" @@ -381,6 +483,11 @@ resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.10.tgz#fd884688b3143253e0356ef92d5f22d109d2e026" integrity sha512-0y2T2NqykDrbPM3Zw9RSbPkDOxwChAL8detXaom76CfYoGxsOnRP/zTX8OUAV+x9LdwzgbWvWmeXrc0M7SuDZw== +"@ethersproject/logger@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.4.0.tgz#f39adadf62ad610c420bcd156fd41270e91b3ca9" + integrity sha512-xYdWGGQ9P2cxBayt64d8LC8aPFJk6yWCawQi/4eJ4+oJdMMjEBMrIcIMZ9AxhwpPVmnBPrsB10PcXGmGAqgUEQ== + "@ethersproject/networks@5.1.0", "@ethersproject/networks@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.1.0.tgz#f537290cb05aa6dc5e81e910926c04cfd5814bca" @@ -395,6 +502,13 @@ dependencies: "@ethersproject/logger" "^5.0.8" +"@ethersproject/networks@^5.4.0": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.4.1.tgz#2ce83b8e42aa85216e5d277a7952d97b6ce8d852" + integrity sha512-8SvowCKz9Uf4xC5DTKI8+il8lWqOr78kmiqAVLYT9lzB8aSmJHQMD1GSuJI0CW4hMAnzocpGpZLgiMdzsNSPig== + dependencies: + "@ethersproject/logger" "^5.4.0" + "@ethersproject/pbkdf2@5.1.0", "@ethersproject/pbkdf2@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.1.0.tgz#6b740a85dc780e879338af74856ca2c0d3b24d19" @@ -417,6 +531,13 @@ dependencies: "@ethersproject/logger" "^5.0.8" +"@ethersproject/properties@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.4.0.tgz#38ba20539b44dcc5d5f80c45ad902017dcdbefe7" + integrity sha512-7jczalGVRAJ+XSRvNA6D5sAwT4gavLq3OXPuV/74o3Rd2wuzSL035IMpIMgei4CYyBdialJMrTqkOnzccLHn4A== + dependencies: + "@ethersproject/logger" "^5.4.0" + "@ethersproject/providers@5.1.2": version "5.1.2" resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.1.2.tgz#4e4459698903f911402fe91aa7544eb07f3921ed" @@ -466,6 +587,14 @@ "@ethersproject/bytes" "^5.0.9" "@ethersproject/logger" "^5.0.8" +"@ethersproject/rlp@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.4.0.tgz#de61afda5ff979454e76d3b3310a6c32ad060931" + integrity sha512-0I7MZKfi+T5+G8atId9QaQKHRvvasM/kqLyAH4XxBCBchAooH2EX5rL9kYZWwcm3awYV+XC7VF6nLhfeQFKVPg== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/sha2@5.1.0", "@ethersproject/sha2@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.1.0.tgz#6ca42d1a26884b3e32ffa943fe6494af7211506c" @@ -496,6 +625,18 @@ "@ethersproject/properties" "^5.0.7" elliptic "6.5.4" +"@ethersproject/signing-key@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.4.0.tgz#2f05120984e81cf89a3d5f6dec5c68ee0894fbec" + integrity sha512-q8POUeywx6AKg2/jX9qBYZIAmKSB4ubGXdQ88l40hmATj29JnG5pp331nAWwwxPn2Qao4JpWHNZsQN+bPiSW9A== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.7" + "@ethersproject/solidity@5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.1.0.tgz#095a9c75244edccb26c452c155736d363399b954" @@ -525,6 +666,15 @@ "@ethersproject/constants" "^5.0.8" "@ethersproject/logger" "^5.0.8" +"@ethersproject/strings@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.4.0.tgz#fb12270132dd84b02906a8d895ae7e7fa3d07d9a" + integrity sha512-k/9DkH5UGDhv7aReXLluFG5ExurwtIpUfnDNhQA29w896Dw3i4uDTz01Quaptbks1Uj9kI8wo9tmW73wcIEaWA== + dependencies: + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/transactions@5.1.1", "@ethersproject/transactions@^5.1.0": version "5.1.1" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.1.1.tgz#5a6bbb25fb062c3cc75eb0db12faefcdd3870813" @@ -555,6 +705,21 @@ "@ethersproject/rlp" "^5.0.7" "@ethersproject/signing-key" "^5.0.8" +"@ethersproject/transactions@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.4.0.tgz#a159d035179334bd92f340ce0f77e83e9e1522e0" + integrity sha512-s3EjZZt7xa4BkLknJZ98QGoIza94rVjaEed0rzZ/jB9WrIuu/1+tjvYCWzVrystXtDswy7TPBeIepyXwSYa4WQ== + dependencies: + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/rlp" "^5.4.0" + "@ethersproject/signing-key" "^5.4.0" + "@ethersproject/units@5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.1.0.tgz#b6ab3430ebc22adc3cb4839516496f167bee3ad5" @@ -607,6 +772,17 @@ "@ethersproject/properties" "^5.0.7" "@ethersproject/strings" "^5.0.8" +"@ethersproject/web@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.4.0.tgz#49fac173b96992334ed36a175538ba07a7413d1f" + integrity sha512-1bUusGmcoRLYgMn6c1BLk1tOKUIFuTg8j+6N8lYlbMpDesnle+i3pGSagGNvwjaiLo4Y5gBibwctpPRmjrh4Og== + dependencies: + "@ethersproject/base64" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/wordlists@5.1.0", "@ethersproject/wordlists@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.1.0.tgz#54eb9ef3a00babbff90ffe124e19c89e07e6aace" @@ -618,6 +794,20 @@ "@ethersproject/properties" "^5.1.0" "@ethersproject/strings" "^5.1.0" +"@humanwhocodes/config-array@^0.5.0": + version "0.5.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" + integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== + dependencies: + "@humanwhocodes/object-schema" "^1.2.0" + debug "^4.1.1" + minimatch "^3.0.4" + +"@humanwhocodes/object-schema@^1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" + integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== + "@nodelib/fs.scandir@2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" @@ -665,12 +855,12 @@ resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz#c472abcba0c5185aaa4ad4070146e95213c68511" integrity sha512-6quxWe8wwS4X5v3Au8q1jOvXYEPkS1Fh+cME5u6AwNdnI4uERvPlVjlgRWzpnb+Rrt1l/cEqiNRH9GlsBMSDQg== -"@nomiclabs/hardhat-etherscan@^2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.2.tgz#333b70a6116e922d16de2ef833dcb7191319afdd" - integrity sha512-SExzaBuHlnmHw0HKkElHITzdvhUQmlIRc2tlaywzgvPbh7WoI24nYqZ4N0CO+JXSDgRpFycvQNA8zRaCqjuqUg== +"@nomiclabs/hardhat-etherscan@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.4.tgz#510b6a669cc2dad095466b2ba9ae0b411c779081" + integrity sha512-KgFNTQv9gpioiTpQ9UlTysCAFfkcBonmEn9rVPTT22A7DRENFM1VTsVeGWF3AzRhd0mrASBF+o0gvbH30pSe0Q== dependencies: - "@ethersproject/abi" "^5.0.2" + "@ethersproject/abi" "^5.1.2" "@ethersproject/address" "^5.0.2" cbor "^5.0.2" debug "^4.1.1" @@ -729,17 +919,17 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.1.tgz#03c891fec7f93be0ae44ed74e57a122a38732ce7" integrity sha512-cUriqMauq1ylzP2TxePNdPqkwI7Le3Annh4K9rrpvKfSBB/bdW+Iu1ihBaTIABTAAJ85LmKL5SSPPL9ry8d1gQ== -"@openzeppelin/hardhat-upgrades@^1.7.0": - version "1.7.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.7.0.tgz#3086273b477818822b889ced9b4bd6d431c35e33" - integrity sha512-fInSIsIu2jYOqMzw0uQF6cBB0xDDUl7YSKEGU3Jp31UGe4jQg11d/echw0gc4BvLvxWEzhMpmqwDqV1KJPqNyQ== +"@openzeppelin/hardhat-upgrades@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.9.0.tgz#68d9d5b5876809f49ae445973614ea9624474872" + integrity sha512-ND1sqm8dpTY6CZLdaC5IgtUo6zvlVgSeqadrWRbr/N7J2Bs2JsINWA2G+r4IeunzbcOJFB7GHTs/RkFR6hNLmA== dependencies: - "@openzeppelin/upgrades-core" "^1.7.0" + "@openzeppelin/upgrades-core" "^1.8.0" -"@openzeppelin/test-helpers@^0.5.11": - version "0.5.11" - resolved "https://registry.yarnpkg.com/@openzeppelin/test-helpers/-/test-helpers-0.5.11.tgz#67a4d28b1c3b15f98c56ed64680f988c8e882bf0" - integrity sha512-HkFpCjtTD8dk+wdYhsT07YbMGCE+Z4Wp5sBKXvPDF3Lynoc0H2KqZgCWV+qr2YZ0WW1oX/sXkKFrrKJ0caBTjw== +"@openzeppelin/test-helpers@^0.5.12": + version "0.5.12" + resolved "https://registry.yarnpkg.com/@openzeppelin/test-helpers/-/test-helpers-0.5.12.tgz#7933abcc071031f898febfed67f5b83716d0ccb0" + integrity sha512-ZPhLmMb8PLGImYLen7YsPnni22i1bXHzrSiY7XZ7cgwuKvk4MRBunzfZ4xGTn/p+1V2/a1XHsjMRDKn7AMVb3Q== dependencies: "@openzeppelin/contract-loader" "^0.6.2" "@truffle/contract" "^4.0.35" @@ -752,10 +942,10 @@ web3 "^1.2.5" web3-utils "^1.2.5" -"@openzeppelin/upgrades-core@^1.7.0": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.7.1.tgz#a63f06a6a904dcf543eb9fca32a127ec8e92fcad" - integrity sha512-il1BrWOmYGxhtmq0hEG4oXlCvcyCrKQzCgmFiv2lqM+qLhp3C/JaXSysVHLohKXrb3XLPNP0pC39KrMDzPW70Q== +"@openzeppelin/upgrades-core@^1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.8.0.tgz#b2d6f747e3a4c3e37a18d1b13f45b7617dde2260" + integrity sha512-hO/SqUusFzD8mxrtDllShTE0eeWXsBkrR8zjjr8C8j+/gzvWQnd9HkNGTh7bpf8giUGzkERDuOOpFdSI1R3yvQ== dependencies: bn.js "^5.1.2" cbor "^7.0.0" @@ -763,8 +953,6 @@ compare-versions "^3.6.0" debug "^4.1.1" ethereumjs-util "^7.0.3" - fp-ts "^2.7.1" - io-ts "^2.2.9" proper-lockfile "^4.1.1" solidity-ast "^0.4.15" @@ -851,6 +1039,13 @@ resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.12.0.tgz#18a0fb2a9d2484b23176f63b16093c64794fc323" integrity sha512-DT3f/Aa4tQysZwUsuqBwvr8YRJzKkvPUKV/9o2/o5EVw3xqlbzmtx4O60lTUcZdCawL+N8bBLNUyOGpHjGlJVQ== +"@solidity-parser/parser@^0.13.2": + version "0.13.2" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.13.2.tgz#b6c71d8ca0b382d90a7bbed241f9bc110af65cbe" + integrity sha512-RwHnpRnfrnD2MSPveYoPh8nhofEvX7fgjHk1Oq+NNvCcLx4r1js91CO9o+F/F3fBzOCyvm8kKRTriFICX/odWw== + dependencies: + antlr4ts "^0.5.0-alpha.4" + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -1209,10 +1404,10 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.6.1, ajv@^6.9.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^7.0.2: - version "7.2.4" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-7.2.4.tgz#8e239d4d56cf884bccca8cca362f508446dc160f" - integrity sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A== +ajv@^8.0.1: + version "8.6.2" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.2.tgz#2fb45e0e5fcbc0813326c1c3da535d1881bb0571" + integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== dependencies: fast-deep-equal "^3.1.1" json-schema-traverse "^1.0.0" @@ -1301,6 +1496,11 @@ antlr4@4.7.1: resolved "https://registry.yarnpkg.com/antlr4/-/antlr4-4.7.1.tgz#69984014f096e9e775f53dd9744bf994d8959773" integrity sha512-haHyTW7Y9joE5MVs37P2lNYfU2RWBLfcRDD8OWldcdZm5TiCE91B5Xl1oWSwiDUSd4rlExpt2pu1fksYQjRBYQ== +antlr4ts@^0.5.0-alpha.4: + version "0.5.0-alpha.4" + resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" + integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== + anymatch@~3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" @@ -1824,6 +2024,14 @@ chalk@^4.1.1: ansi-styles "^4.1.0" supports-color "^7.1.0" +chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" @@ -2033,6 +2241,11 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== +colorette@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" + integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== + colors@1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" @@ -2070,10 +2283,10 @@ commander@^2.15.0, commander@^2.19.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^6.2.0: - version "6.2.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c" - integrity sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA== +commander@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" + integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== compare-versions@^3.6.0: version "3.6.0" @@ -2217,7 +2430,7 @@ cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.2: +cross-spawn@^7.0.2, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -2303,7 +2516,7 @@ debug@3.2.6: dependencies: ms "^2.1.1" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.2.0, debug@^4.3.1: +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== @@ -2669,6 +2882,11 @@ escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + escodegen@1.8.x: version "1.8.1" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" @@ -2775,28 +2993,31 @@ eslint@^5.6.0: table "^5.2.3" text-table "^0.2.0" -eslint@^7.25.0: - version "7.25.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.25.0.tgz#1309e4404d94e676e3e831b3a3ad2b050031eb67" - integrity sha512-TVpSovpvCNpLURIScDRB6g5CYu/ZFq9GfX2hLNIV4dSBKxIWojeDODvYl3t0k0VtMxYeR8OXPCFE5+oHMlGfhw== +eslint@^7.32.0: + version "7.32.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" + integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== dependencies: "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.0" + "@eslint/eslintrc" "^0.4.3" + "@humanwhocodes/config-array" "^0.5.0" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" debug "^4.0.1" doctrine "^3.0.0" enquirer "^2.3.5" + escape-string-regexp "^4.0.0" eslint-scope "^5.1.1" eslint-utils "^2.1.0" eslint-visitor-keys "^2.0.0" espree "^7.3.1" esquery "^1.4.0" esutils "^2.0.2" + fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^5.0.0" + glob-parent "^5.1.2" globals "^13.6.0" ignore "^4.0.6" import-fresh "^3.0.0" @@ -2805,7 +3026,7 @@ eslint@^7.25.0: js-yaml "^3.13.1" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" - lodash "^4.17.21" + lodash.merge "^4.6.2" minimatch "^3.0.4" natural-compare "^1.4.0" optionator "^0.9.1" @@ -2814,7 +3035,7 @@ eslint@^7.25.0: semver "^7.2.1" strip-ansi "^6.0.0" strip-json-comments "^3.1.0" - table "^6.0.4" + table "^6.0.9" text-table "^0.2.0" v8-compile-cache "^2.0.3" @@ -3251,19 +3472,19 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" is-stream "^2.0.0" merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" strip-final-newline "^2.0.0" express@^4.14.0: @@ -3340,7 +3561,7 @@ fake-merkle-patricia-tree@^1.0.1: dependencies: checkpoint-store "^1.1.0" -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== @@ -3386,13 +3607,6 @@ figures@^2.0.0: dependencies: escape-string-regexp "^1.0.5" -figures@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - file-entry-cache@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" @@ -3548,11 +3762,6 @@ fp-ts@^1.0.0: resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== -fp-ts@^2.7.1: - version "2.9.5" - resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-2.9.5.tgz#6690cd8b76b84214a38fc77cbbbd04a38f86ea90" - integrity sha512-MiHrA5teO6t8zKArE3DdMPT/Db6v2GUt5yfWnhBTrrsVfeCJUUnV6sgFvjGNBKDmEMqVwRFkEePL7wPwqrLKKA== - fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -3683,13 +3892,18 @@ get-stream@^4.0.0, get-stream@^4.1.0: dependencies: pump "^3.0.0" -get-stream@^5.0.0, get-stream@^5.1.0: +get-stream@^5.1.0: version "5.2.0" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== dependencies: pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -3705,7 +3919,7 @@ ghost-testrpc@^0.0.2: chalk "^2.4.2" node-emoji "^1.10.0" -glob-parent@^5.0.0, glob-parent@^5.1.0, glob-parent@~5.1.0: +glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -3776,13 +3990,6 @@ globals@^11.7.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^12.1.0: - version "12.4.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" - integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== - dependencies: - type-fest "^0.8.1" - globals@^13.6.0: version "13.7.0" resolved "https://registry.yarnpkg.com/globals/-/globals-13.7.0.tgz#aed3bcefd80ad3ec0f0be2cf0c895110c0591795" @@ -3790,6 +3997,13 @@ globals@^13.6.0: dependencies: type-fest "^0.20.2" +globals@^13.9.0: + version "13.10.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.10.0.tgz#60ba56c3ac2ca845cfbf4faeca727ad9dd204676" + integrity sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g== + dependencies: + type-fest "^0.20.2" + globby@^10.0.1: version "10.0.2" resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" @@ -4014,7 +4228,7 @@ hash.js@1.1.3: inherits "^2.0.3" minimalistic-assert "^1.0.0" -hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== @@ -4127,15 +4341,15 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -husky@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/husky/-/husky-6.0.0.tgz#810f11869adf51604c32ea577edbc377d7f9319e" - integrity sha512-SQS2gDTB7tBN486QSoKPKQItZw97BMOd+Kdb6ghfpBc0yXyzrddI0oDV5MkDAbuB4X2mO3/nj60TRMcYxwzZeQ== +husky@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.1.tgz#579f4180b5da4520263e8713cc832942b48e1f1c" + integrity sha512-gceRaITVZ+cJH9sNHqx5tFwbzlLCVxtVZcusME8JYQ8Edy5mpGDOqD8QBCdMhpyo9a+JXddnujQ4rpY2Ff9SJA== iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" @@ -4266,11 +4480,6 @@ io-ts@1.10.4: dependencies: fp-ts "^1.0.0" -io-ts@^2.2.9: - version "2.2.16" - resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-2.2.16.tgz#597dffa03db1913fc318c9c6df6931cb4ed808b2" - integrity sha512-y5TTSa6VP6le0hhmIyN0dqEXkrZeJLeC5KApJq6VLci3UEKF80lZ+KuoUs02RhBxNWlrqSNxzfI7otLX1Euv8Q== - ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" @@ -4792,39 +5001,37 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -lint-staged@10.5.4: - version "10.5.4" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-10.5.4.tgz#cd153b5f0987d2371fc1d2847a409a2fe705b665" - integrity sha512-EechC3DdFic/TdOPgj/RB3FicqE6932LTHCUm0Y2fsD9KGlLB+RwJl2q1IYBIvEsKzDOgn0D4gll+YxG5RsrKg== +lint-staged@11.1.1: + version "11.1.1" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.1.1.tgz#9c2018b872654cf80b2b1ff5a10b6b74aef6e300" + integrity sha512-eTNGe6i78PSUUH2BZi1gZmGmNfb8IeN4z2OzMYxSZ1qnP1WXKn1E7D+OHwLbRDm/wQINnzIj0bsKJ6lLVSuZiQ== dependencies: - chalk "^4.1.0" + chalk "^4.1.1" cli-truncate "^2.1.0" - commander "^6.2.0" + commander "^7.2.0" cosmiconfig "^7.0.0" - debug "^4.2.0" + debug "^4.3.1" dedent "^0.7.0" enquirer "^2.3.6" - execa "^4.1.0" - listr2 "^3.2.2" - log-symbols "^4.0.0" - micromatch "^4.0.2" + execa "^5.0.0" + listr2 "^3.8.2" + log-symbols "^4.1.0" + micromatch "^4.0.4" normalize-path "^3.0.0" please-upgrade-node "^3.2.0" string-argv "0.3.1" stringify-object "^3.3.0" -listr2@^3.2.2: - version "3.4.3" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.4.3.tgz#543bcf849d5ffc70602708b69d2daac73f751699" - integrity sha512-wZmkzNiuinOfwrGqAwTCcPw6aKQGTAMGXwG5xeU1WpDjJNeBA35jGBeWxR3OF+R6Yl5Y3dRG+3vE8t6PDcSNHA== +listr2@^3.8.2: + version "3.11.0" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.11.0.tgz#9771b02407875aa78e73d6e0ff6541bbec0aaee9" + integrity sha512-XLJVe2JgXCyQTa3FbSv11lkKExYmEyA4jltVo8z4FX10Vt1Yj8IMekBfwim0BSOM9uj1QMTJvDQQpHyuPbB/dQ== dependencies: - chalk "^4.1.0" cli-truncate "^2.1.0" - figures "^3.2.0" - indent-string "^4.0.0" + colorette "^1.2.2" log-update "^4.0.0" p-map "^4.0.0" - rxjs "^6.6.6" + rxjs "^6.6.7" through "^2.3.8" wrap-ansi "^7.0.0" @@ -4886,7 +5093,12 @@ lodash.toarray@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21: +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= + +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -4898,7 +5110,7 @@ log-symbols@3.0.0: dependencies: chalk "^2.4.2" -log-symbols@^4.0.0: +log-symbols@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== @@ -5091,6 +5303,14 @@ micromatch@^4.0.2: braces "^3.0.1" picomatch "^2.0.5" +micromatch@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.4.tgz#896d519dfe9db25fce94ceb7a500919bf881ebf9" + integrity sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg== + dependencies: + braces "^3.0.1" + picomatch "^2.2.3" + miller-rabin@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" @@ -5407,7 +5627,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^4.0.0: +npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -5523,7 +5743,7 @@ onetime@^2.0.0: dependencies: mimic-fn "^1.0.0" -onetime@^5.1.0: +onetime@^5.1.0, onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== @@ -5791,6 +6011,11 @@ picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== +picomatch@^2.2.3: + version "2.3.0" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" + integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== + pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" @@ -5835,10 +6060,10 @@ prettier@^1.14.3: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== -prettier@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" - integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== +prettier@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" + integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== process-nextick-args@~2.0.0: version "2.0.1" @@ -6274,13 +6499,20 @@ rustbn.js@~0.2.0: resolved "https://registry.yarnpkg.com/rustbn.js/-/rustbn.js-0.2.0.tgz#8082cb886e707155fd1cb6f23bd591ab8d55d0ca" integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== -rxjs@^6.4.0, rxjs@^6.6.6: +rxjs@^6.4.0: version "6.6.6" resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.6.tgz#14d8417aa5a07c5e633995b525e1e3c0dec03b70" integrity sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg== dependencies: tslib "^1.9.0" +rxjs@^6.6.7: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" @@ -6499,7 +6731,7 @@ side-channel@^1.0.4: get-intrinsic "^1.0.2" object-inspect "^1.9.0" -signal-exit@^3.0.0, signal-exit@^3.0.2: +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: version "3.0.3" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== @@ -6565,12 +6797,12 @@ solc@0.7.3: semver "^5.5.0" tmp "0.0.33" -solhint@^3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.3.4.tgz#81770c60eeb027e6e447cb91ed599baf5e888e09" - integrity sha512-AEyjshF/PC6kox1c1l79Pji+DK9WVuk5u2WEh6bBKt188gWa63NBOAgYg0fBRr5CTUmsuGc1sGH7dgUVs83mKw== +solhint@^3.3.6: + version "3.3.6" + resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.3.6.tgz#abe9af185a9a7defefba480047b3e42cbe9a1210" + integrity sha512-HWUxTAv2h7hx3s3hAab3ifnlwb02ZWhwFU/wSudUHqteMS3ll9c+m1FlGn9V8ztE2rf3Z82fQZA005Wv7KpcFA== dependencies: - "@solidity-parser/parser" "^0.12.0" + "@solidity-parser/parser" "^0.13.2" ajv "^6.6.1" antlr4 "4.7.1" ast-parents "0.0.1" @@ -6899,15 +7131,17 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" -table@^6.0.4: - version "6.0.7" - resolved "https://registry.yarnpkg.com/table/-/table-6.0.7.tgz#e45897ffbcc1bcf9e8a87bf420f2c9e5a7a52a34" - integrity sha512-rxZevLGTUzWna/qBLObOe16kB2RTnnbhciwgPbMMlazz1yZGVEgnZK762xyVdVznhqxrfCeBMmMkgOOaPwjH7g== +table@^6.0.9: + version "6.7.1" + resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" + integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== dependencies: - ajv "^7.0.2" - lodash "^4.17.20" + ajv "^8.0.1" + lodash.clonedeep "^4.5.0" + lodash.truncate "^4.4.2" slice-ansi "^4.0.0" string-width "^4.2.0" + strip-ansi "^6.0.0" tar@^4.0.2: version "4.4.13" @@ -7073,11 +7307,6 @@ type-fest@^0.7.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== -type-fest@^0.8.1: - version "0.8.1" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" - integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== - type-is@~1.6.17, type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" From f472bb6a6b0bb8f5747c4f799d58a3eec7c2b983 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Thu, 5 Aug 2021 11:44:22 +0300 Subject: [PATCH 02/55] Implement revenue sharing contract --- abi/RevenueSharing.json | 837 +++++++++++++++++++++++ contracts/RevenueSharing.sol | 280 ++++++++ contracts/interfaces/IRevenueSharing.sol | 201 ++++++ test/RevenueSharing.test.js | 610 +++++++++++++++++ 4 files changed, 1928 insertions(+) create mode 100644 abi/RevenueSharing.json create mode 100644 contracts/RevenueSharing.sol create mode 100644 contracts/interfaces/IRevenueSharing.sol create mode 100644 test/RevenueSharing.test.js diff --git a/abi/RevenueSharing.json b/abi/RevenueSharing.json new file mode 100644 index 00000000..22d747c3 --- /dev/null +++ b/abi/RevenueSharing.json @@ -0,0 +1,837 @@ +[ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint128", + "name": "revenueShare", + "type": "uint128" + } + ], + "name": "AccountAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reward", + "type": "uint256" + } + ], + "name": "AccountRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reward", + "type": "uint256" + } + ], + "name": "AmountIncreased", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "claimer", + "type": "address" + } + ], + "name": "ClaimerUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Paused", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint128", + "name": "revenueShare", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reward", + "type": "uint256" + } + ], + "name": "RevenueShareUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "reward", + "type": "uint256" + } + ], + "name": "RewardCollected", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "periodReward", + "type": "uint256" + } + ], + "name": "RewardsUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32" + } + ], + "name": "RoleAdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleGranted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "indexed": true, + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "RoleRevoked", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "Unpaused", + "type": "event" + }, + { + "inputs": [], + "name": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "PAUSER_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "claimer", + "type": "address" + }, + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "internalType": "uint128", + "name": "revenueShare", + "type": "uint128" + } + ], + "name": "addAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "addPauser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "checkpoints", + "outputs": [ + { + "internalType": "uint128", + "name": "amount", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "revenueShare", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "unclaimedReward", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "rewardPerPoint", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "name": "claimers", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + } + ], + "name": "collectReward", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "beneficiaries", + "type": "address[]" + } + ], + "name": "collectRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "getRoleMember", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "name": "getRoleMemberCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "grantRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "increaseAmount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_admin", + "type": "address" + }, + { + "internalType": "address", + "name": "_pool", + "type": "address" + }, + { + "internalType": "address", + "name": "_rewardEthToken", + "type": "address" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + } + ], + "name": "isAdded", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "isPauser", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "paused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + } + ], + "name": "pointsOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + } + ], + "name": "removeAccount", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "removePauser", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "renounceRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "revokeRole", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + } + ], + "name": "rewardOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "rewardPerPoint", + "outputs": [ + { + "internalType": "uint128", + "name": "", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "totalPoints", + "outputs": [ + { + "internalType": "uint128", + "name": "", + "type": "uint128" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newClaimer", + "type": "address" + } + ], + "name": "updateClaimer", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "internalType": "uint128", + "name": "revenueShare", + "type": "uint128" + } + ], + "name": "updateRevenueShare", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "totalReward", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalStaked", + "type": "uint256" + } + ], + "name": "updateRewards", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function" + } +] diff --git a/contracts/RevenueSharing.sol b/contracts/RevenueSharing.sol new file mode 100644 index 00000000..736fe4f0 --- /dev/null +++ b/contracts/RevenueSharing.sol @@ -0,0 +1,280 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +pragma solidity 0.7.5; + +import "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/token/ERC20/SafeERC20Upgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/SafeCastUpgradeable.sol"; +import "./presets/OwnablePausableUpgradeable.sol"; +import "./interfaces/IRevenueSharing.sol"; + + +/** + * @title RevenueSharing + * + * @dev RevenueSharing contract cuts the Pool's reward and distributes among added accounts. + */ +contract RevenueSharing is IRevenueSharing, OwnablePausableUpgradeable { + using SafeMathUpgradeable for uint256; + using SafeCastUpgradeable for uint256; + using SafeERC20Upgradeable for IERC20Upgradeable; + + // @dev Total number of points (sum of contributed amount * revenue share %). + uint128 public override totalPoints; + + // @dev Current rETH2 reward amount per point. + uint128 public override rewardPerPoint; + + // @dev Maps beneficiary address to the reward checkpoint. + mapping(address => Checkpoint) public override checkpoints; + + // @dev Maps beneficiary address to its rewards' claimer. + mapping(address => address) public override claimers; + + // @dev Address of the Pool contract. + address private pool; + + // @dev Address of the RewardEthToken contract. + IERC20Upgradeable private rewardEthToken; + + /** + * @dev See {IRevenueSharing-initialize}. + */ + function initialize(address _admin, address _pool, address _rewardEthToken) external override initializer { + __OwnablePausableUpgradeable_init(_admin); + pool = _pool; + rewardEthToken = IERC20Upgradeable(_rewardEthToken); + } + + /** + * @dev See {IRevenueSharing-isAdded}. + */ + function isAdded(address beneficiary) external view override returns (bool) { + return checkpoints[beneficiary].revenueShare != 0; + } + + /** + * @dev See {IRevenueSharing-addAccount}. + */ + function addAccount(address claimer, address beneficiary, uint128 revenueShare) external override onlyAdmin whenNotPaused { + require(checkpoints[beneficiary].revenueShare == 0, "RevenueSharing: account already added"); + require(revenueShare > 0 && revenueShare <= 1e4, "RevenueSharing: invalid revenue share"); + require(claimer != address(0) && beneficiary != address(0), "RevenueSharing: invalid claimer or beneficiary"); + + // register new checkpoint + checkpoints[beneficiary] = Checkpoint({ + amount : 0, + revenueShare : revenueShare, + unclaimedReward : 0, + rewardPerPoint : rewardPerPoint + }); + + // register account that can claim rewards + claimers[beneficiary] = claimer; + emit AccountAdded(beneficiary, claimer, revenueShare); + } + + /** + * @dev See {IRevenueSharing-removeAccount}. + */ + function removeAccount(address beneficiary) external override onlyAdmin whenNotPaused { + Checkpoint memory checkpoint = checkpoints[beneficiary]; + require(checkpoint.revenueShare != 0, "RevenueSharing: account is not added"); + + // calculate unclaimed reward + uint256 accountPoints = uint256(checkpoint.amount).mul(checkpoint.revenueShare); + uint256 reward = _calculateReward( + accountPoints, + checkpoint.unclaimedReward, + rewardPerPoint, + checkpoint.rewardPerPoint + ); + + // clean up account + delete checkpoints[beneficiary]; + delete claimers[beneficiary]; + totalPoints = uint256(totalPoints).sub(accountPoints).toUint128(); + + if (reward > 0) { + rewardEthToken.safeTransfer(beneficiary, reward); + } + emit AccountRemoved(beneficiary, reward); + } + + /** + * @dev See {IRevenueSharing-updateRevenueShare}. + */ + function updateRevenueShare(address beneficiary, uint128 revenueShare) external override onlyAdmin whenNotPaused { + Checkpoint storage checkpoint = checkpoints[beneficiary]; + require(checkpoint.revenueShare != 0, "RevenueSharing: account is not added"); + require(revenueShare > 0 && revenueShare <= 1e4 && checkpoint.revenueShare != revenueShare, "RevenueSharing: invalid revenue share"); + + // SLOAD for gas optimization + uint128 _rewardPerPoint = rewardPerPoint; + + // calculate unclaimed reward + uint256 prevPoints = uint256(checkpoint.amount).mul(checkpoint.revenueShare); + uint256 reward = _calculateReward( + prevPoints, + checkpoint.unclaimedReward, + rewardPerPoint, + checkpoint.rewardPerPoint + ); + + // update total points and checkpoint + totalPoints = uint256(totalPoints).sub(prevPoints).add(uint256(checkpoint.amount).mul(revenueShare)).toUint128(); + (checkpoint.revenueShare, checkpoint.rewardPerPoint, checkpoint.unclaimedReward) = (revenueShare, _rewardPerPoint, reward.toUint128()); + emit RevenueShareUpdated(beneficiary, revenueShare, reward); + } + + /** + * @dev See {IRevenueSharing-increaseAmount}. + */ + function increaseAmount(address beneficiary, uint256 amount) external override whenNotPaused { + require(msg.sender == pool || hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "RevenueSharing: access denied"); + require(amount > 0, "RevenueSharing: invalid amount"); + + Checkpoint storage checkpoint = checkpoints[beneficiary]; + require(checkpoint.revenueShare != 0, "RevenueSharing: account is not added"); + + // SLOAD for gas optimization + uint128 _rewardPerPoint = rewardPerPoint; + + // calculate unclaimed reward + uint256 prevPoints = uint256(checkpoint.amount).mul(checkpoint.revenueShare); + uint256 reward = _calculateReward( + prevPoints, + checkpoint.unclaimedReward, + rewardPerPoint, + checkpoint.rewardPerPoint + ); + + // update total points and checkpoint + uint256 newAmount = amount.add(checkpoint.amount); + totalPoints = uint256(totalPoints).sub(prevPoints).add(newAmount.mul(checkpoint.revenueShare)).toUint128(); + (checkpoint.amount, checkpoint.rewardPerPoint, checkpoint.unclaimedReward) = (newAmount.toUint128(), _rewardPerPoint, reward.toUint128()); + emit AmountIncreased(beneficiary, amount, reward); + } + + /** + * @dev See {IRevenueSharing-updateClaimer}. + */ + function updateClaimer(address newClaimer) external override whenNotPaused { + address prevClaimer = claimers[msg.sender]; + require(prevClaimer != address(0), "RevenueSharing: account is not added"); + require(newClaimer != address(0) && prevClaimer != newClaimer, "RevenueSharing: invalid new claimer"); + + claimers[msg.sender] = newClaimer; + emit ClaimerUpdated(msg.sender, newClaimer); + } + + /** + * @dev See {IRevenueSharing-pointsOf}. + */ + function pointsOf(address beneficiary) external view override returns (uint256) { + Checkpoint storage checkpoint = checkpoints[beneficiary]; + if (checkpoint.amount <= 0) { + return 0; + } + return uint256(checkpoint.amount).mul(checkpoint.revenueShare); + } + + /** + * @dev See {IRevenueSharing-rewardOf}. + */ + function rewardOf(address beneficiary) external view override returns (uint256) { + Checkpoint storage checkpoint = checkpoints[beneficiary]; + return _calculateReward( + uint256(checkpoint.amount).mul(checkpoint.revenueShare), + checkpoint.unclaimedReward, + rewardPerPoint, + checkpoint.rewardPerPoint + ); + } + + /** + * @dev See {IRevenueSharing-collectReward}. + */ + function collectReward(address beneficiary) external override whenNotPaused { + _collectReward(beneficiary); + } + + /** + * @dev See {IRevenueSharing-collectRewards}. + */ + function collectRewards(address[] calldata beneficiaries) external override whenNotPaused { + for (uint256 i = 0; i < beneficiaries.length; i++) { + _collectReward(beneficiaries[i]); + } + } + + function _collectReward(address beneficiary) internal { + Checkpoint storage checkpoint = checkpoints[beneficiary]; + require(checkpoint.revenueShare != 0, "RevenueSharing: account is not added"); + require(beneficiary == msg.sender || claimers[beneficiary] == msg.sender, "RevenueSharing: access denied"); + + // SLOAD for gas optimization + uint128 _rewardPerPoint = rewardPerPoint; + + // calculate unclaimed reward + uint256 accountPoints = uint256(checkpoint.amount).mul(checkpoint.revenueShare); + uint256 reward = _calculateReward( + accountPoints, + checkpoint.unclaimedReward, + rewardPerPoint, + checkpoint.rewardPerPoint + ); + + (checkpoint.rewardPerPoint, checkpoint.unclaimedReward) = (_rewardPerPoint, 0); + + if (reward > 0) { + rewardEthToken.safeTransfer(beneficiary, reward); + } + + emit RewardCollected(msg.sender, beneficiary, reward); + } + + /** + * @dev See {IRevenueSharing-updateRewards}. + */ + function updateRewards(uint256 totalReward, uint256 totalStaked) external override whenNotPaused returns (uint256) { + require(msg.sender == address(rewardEthToken), "RevenueSharing: access denied"); + + if (totalReward == 0 || totalStaked == 0) { + // nothing to update + return 0; + } + + // SLOAD for gas optimization + (uint256 _totalPoints, uint256 prevRewardPerPoint) = (totalPoints, rewardPerPoint); + if (_totalPoints == 0) { + return 0; + } + + // calculate period reward + uint256 periodReward = totalReward.mul(_totalPoints).div(totalStaked.mul(1e4)); + + // update reward per point + rewardPerPoint = prevRewardPerPoint.add(periodReward.mul(1e18).div(_totalPoints)).toUint128(); + + emit RewardsUpdated(msg.sender, periodReward); + return periodReward; + } + + function _calculateReward( + uint256 points, + uint256 unclaimedReward, + uint256 newRewardPerPoint, + uint256 prevRewardPerPoint + ) + internal pure returns (uint256 reward) + { + if (newRewardPerPoint > prevRewardPerPoint) { + reward = points.mul(newRewardPerPoint.sub(prevRewardPerPoint)).div(1e18); + } + + if (unclaimedReward > 0) { + reward = reward.add(unclaimedReward); + } + } +} diff --git a/contracts/interfaces/IRevenueSharing.sol b/contracts/interfaces/IRevenueSharing.sol new file mode 100644 index 00000000..790ba70e --- /dev/null +++ b/contracts/interfaces/IRevenueSharing.sol @@ -0,0 +1,201 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +pragma solidity 0.7.5; + +/** + * @dev Interface of the RevenueSharing contract. + */ +interface IRevenueSharing { + /** + * @dev Structure for storing account's checkpoint. + * @param amount - total amount contributed. + * @param revenueShare - revenue share percentage (up to 10000 (100.00%). + * @param unclaimedReward - total unclaimed reward. + * @param rewardPerPoint - reward per point at the last checkpoint. + */ + struct Checkpoint { + uint128 amount; + uint128 revenueShare; + uint128 unclaimedReward; + uint128 rewardPerPoint; + } + + /** + * @dev Event for tracking new accounts. + * @param beneficiary - address where the reward will be transferred. + * @param claimer - address that can execute collection of the rewards. + * @param revenueShare - revenue share percentage. + */ + event AccountAdded( + address indexed beneficiary, + address indexed claimer, + uint128 indexed revenueShare + ); + + /** + * @dev Event for tracking removed accounts. + * @param beneficiary - address where the reward has been transferred. + * @param reward - transferred unclaimed reward. + */ + event AccountRemoved( + address indexed beneficiary, + uint256 reward + ); + + /** + * @dev Event for tracking revenue share updates. + * @param beneficiary - address of the beneficiary. + * @param revenueShare - new revenue share. + * @param reward - unclaimed reward. + */ + event RevenueShareUpdated( + address indexed beneficiary, + uint128 indexed revenueShare, + uint256 reward + ); + + /** + * @dev Event for tracking increase of the contributed amount. + * @param beneficiary - address of the beneficiary. + * @param amount - contributed amount. + * @param reward - withdrawn reward. + */ + event AmountIncreased( + address indexed beneficiary, + uint256 amount, + uint256 reward + ); + + /** + * @dev Event for tracking when rewards are collected. + * @param sender - address of the transaction sender. + * @param beneficiary - address of the beneficiary. + * @param reward - withdrawn reward. + */ + event RewardCollected( + address indexed sender, + address indexed beneficiary, + uint256 reward + ); + + /** + * @dev Event for tracking total rewards update. + * @param sender - address of the transaction sender. + * @param periodReward - period reward. + */ + event RewardsUpdated( + address indexed sender, + uint256 periodReward + ); + + /** + * @dev Event for tracking the claimer updates. + * @param beneficiary - address of the beneficiary. + * @param claimer - new claimer address. + */ + event ClaimerUpdated( + address indexed beneficiary, + address indexed claimer + ); + + /** + * @dev Function for getting the total allocated points. + */ + function totalPoints() external view returns (uint128); + + /** + * @dev Function for getting the current reward per point. + */ + function rewardPerPoint() external view returns (uint128); + + /** + * @dev Constructor for initializing the RevenueSharing contract. + * @param _admin - address of the contract admin. + * @param _pool - address of the Pool contract. + * @param _rewardEthToken - address of the RewardEthToken contract. + */ + function initialize(address _admin, address _pool, address _rewardEthToken) external; + + /** + * @dev Function for retrieving beneficiary's current checkpoint. + * @param beneficiary - address of the beneficiary account. + */ + function checkpoints(address beneficiary) external view returns (uint128, uint128, uint128, uint128); + + /** + * @dev Function for retrieving beneficiary's claimer. + * @param beneficiary - address of the beneficiary account. + */ + function claimers(address beneficiary) external view returns (address); + + /** + * @dev Function for checking whether the beneficiary address is added. + * @param beneficiary - address of the beneficiary account. + */ + function isAdded(address beneficiary) external view returns (bool); + + /** + * @dev Function for updating the claimer. + * @param newClaimer - the new address of the claimer that can execute collection of rewards. + */ + function updateClaimer(address newClaimer) external; + + /** + * @dev Function for adding new account. + * @param claimer - the address of the claimer that can execute collection of rewards. + * @param beneficiary - the address of the beneficiary, where the rewards are directed. + * @param revenueShare - the revenue share that the account will earn (up to 10000 (100.00%)). + */ + function addAccount(address claimer, address beneficiary, uint128 revenueShare) external; + + /** + * @dev Function for removing account. + * @param beneficiary - the address of the beneficiary, where the rewards are directed. + */ + function removeAccount(address beneficiary) external; + + /** + * @dev Function for updating account's revenue share. + * @param beneficiary - the address of the beneficiary to update the revenue share for. + * @param revenueShare - the new revenue share. + */ + function updateRevenueShare(address beneficiary, uint128 revenueShare) external; + + /** + * @dev Function for increasing account's contributed amount. + * @param beneficiary - the address of the beneficiary to update the amount for. + * @param amount - the added amount. + */ + function increaseAmount(address beneficiary, uint256 amount) external; + + /** + * @dev Function for collecting reward. Can be called by beneficiary or claimer. + * @param beneficiary - the address of the beneficiary to collect rewards for. + */ + function collectReward(address beneficiary) external; + + /** + * @dev Function for collecting rewards. Can be called by beneficiary or claimer. + * @param beneficiaries - the list of beneficiaries to collect the rewards for. Must have the same claimer. + */ + function collectRewards(address[] calldata beneficiaries) external; + + /** + * @dev Function for updating rewards. Can be only be called by the RewardEthToken contract. + * @param totalReward - the total amount to split the reward from. + * @param totalStaked - the total amount staked used for reward per point calculation. + */ + function updateRewards(uint256 totalReward, uint256 totalStaked) external returns (uint256); + + /** + * @dev Function for checking the points of the beneficiary. + * @param beneficiary - the address of the beneficiary to check the points for. + */ + function pointsOf(address beneficiary) external view returns (uint256); + + /** + * @dev Function for checking the reward of the beneficiary. + * @param beneficiary - the address of the beneficiary to check the reward for. + */ + function rewardOf(address beneficiary) external view returns (uint256); +} diff --git a/test/RevenueSharing.test.js b/test/RevenueSharing.test.js new file mode 100644 index 00000000..cd5398be --- /dev/null +++ b/test/RevenueSharing.test.js @@ -0,0 +1,610 @@ +const { expect } = require('chai'); +const { + expectRevert, + expectEvent, + BN, + ether, + constants, + send, +} = require('@openzeppelin/test-helpers'); +const { upgradeContracts } = require('../deployments'); +const { contractSettings } = require('../deployments/settings'); +const { + stopImpersonatingAccount, + impersonateAccount, + resetFork, + setTotalRewards, + setupOracleAccounts, +} = require('./utils'); + +const Pool = artifacts.require('Pool'); +const Oracles = artifacts.require('Oracles'); +const RewardEthToken = artifacts.require('RewardEthToken'); +const RevenueSharing = artifacts.require('RevenueSharing'); + +contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { + const admin = contractSettings.admin; + const revenueShare = new BN(1000); + let revenueSharing, oracleAccounts, pool, rewardEthToken, oracles; + + after(async () => stopImpersonatingAccount(admin)); + + beforeEach(async () => { + await impersonateAccount(admin); + await send.ether(claimer, admin, ether('5')); + const contracts = await upgradeContracts(); + revenueSharing = await RevenueSharing.at(contracts.operatorsRevenueSharing); + pool = await Pool.at(contracts.pool); + oracles = await Oracles.at(contracts.oracles); + rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); + oracleAccounts = await setupOracleAccounts({ + admin, + oracles, + accounts: otherAccounts, + }); + }); + + afterEach(async () => resetFork()); + + describe('addAccount', () => { + it('fails to add account without admin role', async () => { + await expectRevert( + revenueSharing.addAccount(claimer, beneficiary, revenueShare, { + from: claimer, + }), + 'OwnablePausable: access denied' + ); + }); + + it('fails to add account when paused', async () => { + await revenueSharing.pause({ from: admin }); + await expectRevert( + revenueSharing.addAccount(claimer, beneficiary, revenueShare, { + from: admin, + }), + 'Pausable: paused' + ); + }); + + it('fails to add account with invalid revenue share', async () => { + await expectRevert( + revenueSharing.addAccount(claimer, beneficiary, '0', { + from: admin, + }), + 'RevenueSharing: invalid revenue share' + ); + + await expectRevert( + revenueSharing.addAccount(claimer, beneficiary, '10001', { + from: admin, + }), + 'RevenueSharing: invalid revenue share' + ); + }); + + it('fails to add account with invalid claimer or beneficiary', async () => { + await expectRevert( + revenueSharing.addAccount( + constants.ZERO_ADDRESS, + beneficiary, + revenueShare, + { + from: admin, + } + ), + 'RevenueSharing: invalid claimer or beneficiary' + ); + + await expectRevert( + revenueSharing.addAccount( + claimer, + constants.ZERO_ADDRESS, + revenueShare, + { + from: admin, + } + ), + 'RevenueSharing: invalid claimer or beneficiary' + ); + }); + + it('fails to add account twice', async () => { + await revenueSharing.addAccount(claimer, beneficiary, revenueShare, { + from: admin, + }); + + await expectRevert( + revenueSharing.addAccount(claimer, beneficiary, revenueShare, { + from: admin, + }), + 'RevenueSharing: account already added' + ); + }); + + it('admin can add new account', async () => { + let receipt = await revenueSharing.addAccount( + claimer, + beneficiary, + revenueShare, + { + from: admin, + } + ); + + await expectEvent(receipt, 'AccountAdded', { + beneficiary, + claimer, + revenueShare, + }); + + expect(await revenueSharing.isAdded(beneficiary)).to.equal(true); + expect(await revenueSharing.claimers(beneficiary)).to.equal(claimer); + }); + }); + + describe('removeAccount', () => { + beforeEach(async () => { + await revenueSharing.addAccount(claimer, beneficiary, revenueShare, { + from: admin, + }); + }); + + it('fails to remove account without admin role', async () => { + await expectRevert( + revenueSharing.removeAccount(beneficiary, { + from: beneficiary, + }), + 'OwnablePausable: access denied' + ); + }); + + it('fails to remove account when paused', async () => { + await revenueSharing.pause({ from: admin }); + await expectRevert( + revenueSharing.removeAccount(beneficiary, { + from: admin, + }), + 'Pausable: paused' + ); + }); + + it('fails to remove not existing account', async () => { + await expectRevert( + revenueSharing.removeAccount(claimer, { + from: admin, + }), + 'RevenueSharing: account is not added' + ); + }); + + it('admin can remove account', async () => { + let receipt = await revenueSharing.removeAccount(beneficiary, { + from: admin, + }); + + await expectEvent(receipt, 'AccountRemoved', { + beneficiary, + reward: new BN(0), + }); + + expect(await revenueSharing.isAdded(beneficiary)).to.equal(false); + expect(await revenueSharing.claimers(beneficiary)).to.equal( + constants.ZERO_ADDRESS + ); + }); + }); + + describe('updateRevenueShare', () => { + let newRevenueShare = revenueShare.add(new BN(1000)); + + beforeEach(async () => { + await revenueSharing.addAccount(claimer, beneficiary, revenueShare, { + from: admin, + }); + }); + + it('fails to update revenue share without admin role', async () => { + await expectRevert( + revenueSharing.updateRevenueShare(beneficiary, newRevenueShare, { + from: beneficiary, + }), + 'OwnablePausable: access denied' + ); + }); + + it('fails to update revenue share when paused', async () => { + await revenueSharing.pause({ from: admin }); + await expectRevert( + revenueSharing.updateRevenueShare(beneficiary, newRevenueShare, { + from: admin, + }), + 'Pausable: paused' + ); + }); + + it('fails to update with invalid revenue share', async () => { + await expectRevert( + revenueSharing.updateRevenueShare(beneficiary, '0', { + from: admin, + }), + 'RevenueSharing: invalid revenue share' + ); + + await expectRevert( + revenueSharing.updateRevenueShare(beneficiary, '10001', { + from: admin, + }), + 'RevenueSharing: invalid revenue share' + ); + + await expectRevert( + revenueSharing.updateRevenueShare(beneficiary, revenueShare, { + from: admin, + }), + 'RevenueSharing: invalid revenue share' + ); + }); + + it('fails to update revenue share for not existing account', async () => { + await expectRevert( + revenueSharing.updateRevenueShare(claimer, newRevenueShare, { + from: admin, + }), + 'RevenueSharing: account is not added' + ); + }); + + it('admin can update revenue share', async () => { + await revenueSharing.increaseAmount(beneficiary, ether('1000'), { + from: admin, + }); + let prevPoints = await revenueSharing.pointsOf(beneficiary); + let prevTotalPoints = await revenueSharing.totalPoints(); + let receipt = await revenueSharing.updateRevenueShare( + beneficiary, + newRevenueShare, + { + from: admin, + } + ); + + await expectEvent(receipt, 'RevenueShareUpdated', { + beneficiary, + revenueShare: newRevenueShare, + reward: new BN(0), + }); + + expect( + (await revenueSharing.checkpoints(beneficiary)).revenueShare + ).to.bignumber.equal(newRevenueShare); + expect( + await revenueSharing.pointsOf(beneficiary) + ).to.bignumber.greaterThan(prevPoints); + expect(await revenueSharing.totalPoints()).to.bignumber.greaterThan( + prevTotalPoints + ); + }); + }); + + describe('increaseAmount', () => { + let newAmount = ether('1000'); + + beforeEach(async () => { + await revenueSharing.addAccount(claimer, beneficiary, revenueShare, { + from: admin, + }); + }); + + it('fails to increase amount by not admin or pool', async () => { + await expectRevert( + revenueSharing.increaseAmount(beneficiary, newAmount, { + from: beneficiary, + }), + 'RevenueSharing: access denied' + ); + }); + + it('fails to increase amount when paused', async () => { + await revenueSharing.pause({ from: admin }); + await expectRevert( + revenueSharing.increaseAmount(beneficiary, newAmount, { + from: admin, + }), + 'Pausable: paused' + ); + }); + + it('fails to increase with zero amount', async () => { + await expectRevert( + revenueSharing.increaseAmount(beneficiary, '0', { + from: admin, + }), + 'RevenueSharing: invalid amount' + ); + }); + + it('fails to increase amount for not existing account', async () => { + await expectRevert( + revenueSharing.increaseAmount(claimer, newAmount, { + from: admin, + }), + 'RevenueSharing: account is not added' + ); + }); + + it('admin or pool can increase amount', async () => { + let prevPoints = await revenueSharing.pointsOf(beneficiary); + let prevTotalPoints = await revenueSharing.totalPoints(); + let receipt = await revenueSharing.increaseAmount( + beneficiary, + newAmount, + { + from: admin, + } + ); + + await expectEvent(receipt, 'AmountIncreased', { + beneficiary, + amount: newAmount, + reward: new BN(0), + }); + + expect( + (await revenueSharing.checkpoints(beneficiary)).amount + ).to.bignumber.equal(newAmount); + expect( + await revenueSharing.pointsOf(beneficiary) + ).to.bignumber.greaterThan(prevPoints); + expect(await revenueSharing.totalPoints()).to.bignumber.greaterThan( + prevTotalPoints + ); + }); + }); + + describe('collectRewards', () => { + let contributedAmount = ether('32'); + let revenueCut; + + beforeEach(async () => { + // add account and increase contributed amount + await revenueSharing.addAccount(claimer, beneficiary, revenueShare, { + from: admin, + }); + await revenueSharing.increaseAmount(beneficiary, contributedAmount, { + from: admin, + }); + + // increase reward + let periodReward = ether('10'); + let totalRewards = (await rewardEthToken.totalRewards()).add( + periodReward + ); + await setTotalRewards({ + admin, + rewardEthToken, + oracles, + oracleAccounts, + pool, + totalRewards, + }); + revenueCut = await rewardEthToken.balanceOf(revenueSharing.address); + }); + + it('fails to collect reward by not beneficiary or claimer', async () => { + await expectRevert( + revenueSharing.collectReward(beneficiary, { + from: otherAccounts[0], + }), + 'RevenueSharing: access denied' + ); + }); + + it('fails to collect reward when paused', async () => { + await revenueSharing.pause({ from: admin }); + await expectRevert( + revenueSharing.collectReward(beneficiary, { + from: beneficiary, + }), + 'Pausable: paused' + ); + }); + + it('fails to collect multiple when paused', async () => { + await revenueSharing.pause({ from: admin }); + await expectRevert( + revenueSharing.collectRewards([beneficiary, claimer], { + from: claimer, + }), + 'Pausable: paused' + ); + }); + + it('fails to collect reward for not existing account', async () => { + await expectRevert( + revenueSharing.collectReward(otherAccounts[0], { + from: beneficiary, + }), + 'RevenueSharing: account is not added' + ); + }); + + it('does not fail with zero reward', async () => { + // withdraw accumulated reward + await revenueSharing.collectReward(beneficiary, { + from: claimer, + }); + + let receipt = await revenueSharing.collectReward(beneficiary, { + from: claimer, + }); + const prevReward = await rewardEthToken.balanceOf(beneficiary); + + await expectEvent(receipt, 'RewardCollected', { + sender: claimer, + beneficiary, + reward: new BN(0), + }); + expect(await rewardEthToken.balanceOf(beneficiary)).to.bignumber.equal( + prevReward + ); + }); + + it('beneficiary or claimer can collect reward', async () => { + let receipt = await revenueSharing.collectReward(beneficiary, { + from: claimer, + }); + await expectEvent(receipt, 'RewardCollected', { + sender: claimer, + beneficiary, + }); + const reward = receipt.logs[0].args.reward; + expect(reward).to.bignumber.greaterThan(new BN(0)); + expect(reward).to.bignumber.lessThan(revenueCut); + expect(await revenueSharing.rewardOf(beneficiary)).to.bignumber.equal( + new BN(0) + ); + }); + + it('claimer can collect rewards for multiple beneficiaries', async () => { + let beneficiary1 = beneficiary; + let [beneficiary2, revenueShare2, contributedAmount2] = [ + otherAccounts[0], + revenueShare.add(new BN(1000)), + contributedAmount.add(ether('30')), + ]; + + // add another account and increase contributed amount + await revenueSharing.addAccount(claimer, beneficiary2, revenueShare2, { + from: admin, + }); + await revenueSharing.increaseAmount(beneficiary2, contributedAmount2, { + from: admin, + }); + + // increase reward + let periodReward = ether('10'); + let totalRewards = (await rewardEthToken.totalRewards()).add( + periodReward + ); + await setTotalRewards({ + admin, + rewardEthToken, + oracles, + oracleAccounts, + pool, + totalRewards, + }); + revenueCut = await rewardEthToken.balanceOf(revenueSharing.address); + + let receipt = await revenueSharing.collectRewards( + [beneficiary1, beneficiary2], + { + from: claimer, + } + ); + + await expectEvent(receipt, 'RewardCollected', { + sender: claimer, + beneficiary: beneficiary1, + }); + await expectEvent(receipt, 'RewardCollected', { + sender: claimer, + beneficiary: beneficiary2, + }); + + // check reward of the beneficiary1 + const reward1 = receipt.logs[0].args.reward; + expect(reward1).to.bignumber.greaterThan(new BN(0)); + expect(await revenueSharing.rewardOf(beneficiary1)).to.bignumber.equal( + new BN(0) + ); + + // check reward of the beneficiary1 + const reward2 = receipt.logs[1].args.reward; + expect(reward2).to.bignumber.greaterThan(new BN(0)); + expect(await revenueSharing.rewardOf(beneficiary2)).to.bignumber.equal( + new BN(0) + ); + expect(reward1.add(reward2)).to.bignumber.lessThan(revenueCut); + expect(reward2).to.bignumber.greaterThan(reward1); + }); + }); + + describe('updateRewards', () => { + it('fails to update rewards by not RewardEthToken', async () => { + await expectRevert( + revenueSharing.updateRewards(ether('5'), ether('1000'), { + from: otherAccounts[0], + }), + 'RevenueSharing: access denied' + ); + }); + + it('fails to update rewards when paused', async () => { + await revenueSharing.pause({ from: admin }); + await expectRevert( + revenueSharing.updateRewards(ether('5'), ether('1000'), { + from: beneficiary, + }), + 'Pausable: paused' + ); + }); + }); + + describe('updateClaimer', () => { + const newClaimer = otherAccounts[0]; + + beforeEach(async () => { + // add account and increase contributed amount + await revenueSharing.addAccount(claimer, beneficiary, revenueShare, { + from: admin, + }); + }); + + it('fails to update claimer by not beneficiary', async () => { + await expectRevert( + revenueSharing.updateClaimer(newClaimer, { + from: claimer, + }), + 'RevenueSharing: account is not added' + ); + }); + + it('fails to update claimer when paused', async () => { + await revenueSharing.pause({ from: admin }); + await expectRevert( + revenueSharing.updateClaimer(newClaimer, { + from: beneficiary, + }), + 'Pausable: paused' + ); + }); + + it('fails to update with invalid claimer', async () => { + await expectRevert( + revenueSharing.updateClaimer(constants.ZERO_ADDRESS, { + from: beneficiary, + }), + 'RevenueSharing: invalid new claimer' + ); + + await expectRevert( + revenueSharing.updateClaimer(claimer, { + from: beneficiary, + }), + 'RevenueSharing: invalid new claimer' + ); + }); + + it('beneficiary can update claimer', async () => { + let receipt = await revenueSharing.updateClaimer(newClaimer, { + from: beneficiary, + }); + await expectEvent(receipt, 'ClaimerUpdated', { + beneficiary, + claimer: newClaimer, + }); + expect(await revenueSharing.claimers(beneficiary)).to.equal(newClaimer); + }); + }); +}); From 3f8f6f8062634169abc69db575369edf9d8c950c Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Sun, 8 Aug 2021 13:04:40 +0300 Subject: [PATCH 03/55] Update RewardEthToken and MerkleDistributor rewards calculation --- abi/MerkleDistributor.json | 36 +-- abi/RewardEthToken.json | 126 +++++---- contracts/interfaces/IMerkleDistributor.sol | 6 +- contracts/interfaces/IRewardEthToken.sol | 53 ++-- contracts/merkles/MerkleDistributor.sol | 9 +- contracts/tokens/RewardEthToken.sol | 122 +++++--- test/MerkleDistributor.test.js | 151 +++++++--- test/Proxies.test.js | 2 +- test/RevenueSharing.test.js | 2 +- test/tokens/RewardEthToken.test.js | 295 ++++++++++++++++---- test/tokens/StakedEthToken.test.js | 79 +++--- test/tokens/toggleRewards.test.js | 17 +- test/tokens/upgrading.test.js | 28 +- 13 files changed, 645 insertions(+), 281 deletions(-) diff --git a/abi/MerkleDistributor.json b/abi/MerkleDistributor.json index 48cdae56..1a53fe5c 100644 --- a/abi/MerkleDistributor.json +++ b/abi/MerkleDistributor.json @@ -440,29 +440,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - }, - { - "internalType": "address", - "name": "_rewardEthToken", - "type": "address" - }, - { - "internalType": "address", - "name": "_oracles", - "type": "address" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -678,5 +655,18 @@ "outputs": [], "stateMutability": "nonpayable", "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_oracles", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" } ] diff --git a/abi/RewardEthToken.json b/abi/RewardEthToken.json index 36d7bca1..89bb195e 100644 --- a/abi/RewardEthToken.json +++ b/abi/RewardEthToken.json @@ -29,12 +29,12 @@ "inputs": [ { "indexed": false, - "internalType": "uint256", - "name": "maintainerFee", - "type": "uint256" + "internalType": "address", + "name": "account", + "type": "address" } ], - "name": "MaintainerFeeUpdated", + "name": "Paused", "type": "event" }, { @@ -43,11 +43,11 @@ { "indexed": false, "internalType": "address", - "name": "maintainer", + "name": "recipient", "type": "address" } ], - "name": "MaintainerUpdated", + "name": "ProtocolFeeRecipientUpdated", "type": "event" }, { @@ -55,12 +55,25 @@ "inputs": [ { "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" + "internalType": "uint256", + "name": "protocolFee", + "type": "uint256" } ], - "name": "Paused", + "name": "ProtocolFeeUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address[]", + "name": "revenueShares", + "type": "address[]" + } + ], + "name": "RevenueSharesUpdated", "type": "event" }, { @@ -102,6 +115,18 @@ "internalType": "uint256", "name": "rewardPerToken", "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "distributorPeriodReward", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "protocolReward", + "type": "uint256" } ], "name": "RewardsUpdated", @@ -610,32 +635,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "maintainer", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "maintainerFee", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "merkleDistributor", @@ -744,6 +743,32 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "protocolFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "protocolFeeRecipient", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -841,12 +866,12 @@ { "inputs": [ { - "internalType": "address", - "name": "_newMaintainer", - "type": "address" + "internalType": "uint256", + "name": "_protocolFee", + "type": "uint256" } ], - "name": "setMaintainer", + "name": "setProtocolFee", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -854,12 +879,12 @@ { "inputs": [ { - "internalType": "uint256", - "name": "_newMaintainerFee", - "type": "uint256" + "internalType": "address", + "name": "recipient", + "type": "address" } ], - "name": "setMaintainerFee", + "name": "setProtocolFeeRecipient", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -1046,13 +1071,18 @@ "inputs": [ { "internalType": "address", - "name": "_merkleDistributor", + "name": "_oracles", "type": "address" }, { - "internalType": "uint256", - "name": "_lastUpdateBlockNumber", - "type": "uint256" + "internalType": "address", + "name": "_operatorsRevenueSharing", + "type": "address" + }, + { + "internalType": "address", + "name": "_partnersRevenueSharing", + "type": "address" } ], "name": "upgrade", diff --git a/contracts/interfaces/IMerkleDistributor.sol b/contracts/interfaces/IMerkleDistributor.sol index f34f02d6..9d5f6f98 100644 --- a/contracts/interfaces/IMerkleDistributor.sol +++ b/contracts/interfaces/IMerkleDistributor.sol @@ -70,12 +70,10 @@ interface IMerkleDistributor { function lastUpdateBlockNumber() external view returns (uint256); /** - * @dev Constructor for initializing the MerkleDistributor contract. - * @param _admin - address of the contract admin. - * @param _rewardEthToken - address of the RewardEthToken contract. + * @dev Function for upgrading the MerkleDistributor contract. * @param _oracles - address of the Oracles contract. */ - function initialize(address _admin, address _rewardEthToken, address _oracles) external; + function upgrade(address _oracles) external; /** * @dev Function for checking the claimed bit map. diff --git a/contracts/interfaces/IRewardEthToken.sol b/contracts/interfaces/IRewardEthToken.sol index fddf45f7..9778df20 100644 --- a/contracts/interfaces/IRewardEthToken.sol +++ b/contracts/interfaces/IRewardEthToken.sol @@ -9,16 +9,16 @@ import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; */ interface IRewardEthToken is IERC20Upgradeable { /** - * @dev Event for tracking updated maintainer. - * @param maintainer - address of the new maintainer, where the fee will be paid. + * @dev Event for tracking updated protocol fee recipient. + * @param recipient - address of the new fee recipient. */ - event MaintainerUpdated(address maintainer); + event ProtocolFeeRecipientUpdated(address recipient); /** - * @dev Event for tracking updated maintainer fee. - * @param maintainerFee - new maintainer fee. + * @dev Event for tracking updated protocol fee. + * @param protocolFee - new protocol fee. */ - event MaintainerFeeUpdated(uint256 maintainerFee); + event ProtocolFeeUpdated(uint256 protocolFee); /** * @dev Event for tracking whether rewards distribution through merkle distributor is enabled/disabled. @@ -42,21 +42,30 @@ interface IRewardEthToken is IERC20Upgradeable { * @param periodRewards - rewards since the last update. * @param totalRewards - total amount of rewards. * @param rewardPerToken - calculated reward per token for account reward calculation. + * @param distributorPeriodReward - distributor period reward. + * @param protocolReward - protocol period reward. */ event RewardsUpdated( uint256 periodRewards, uint256 totalRewards, - uint256 rewardPerToken + uint256 rewardPerToken, + uint256 distributorPeriodReward, + uint256 protocolReward ); + /** + * @dev Event for tracking revenue shares updates. + * @param revenueShares - new revenue shares. + */ + event RevenueSharesUpdated(address[] revenueShares); + /** * @dev Function for upgrading the RewardEthToken contract. - * If deploying contract for the first time, the upgrade function should be replaced with `initialize` and - * contain initializations from the previous versions. - * @param _merkleDistributor - address of the MerkleDistributor contract. - * @param _lastUpdateBlockNumber - block number of the last rewards update. + * @param _oracles - address of the Oracles contract. + * @param _operatorsRevenueSharing - address of the Operators Revenue Sharing contract. + * @param _partnersRevenueSharing - address of the Partners Revenue Sharing contract. */ - function upgrade(address _merkleDistributor, uint256 _lastUpdateBlockNumber) external; + function upgrade(address _oracles, address _operatorsRevenueSharing, address _partnersRevenueSharing) external; /** * @dev Function for getting the address of the merkle distributor. @@ -64,26 +73,26 @@ interface IRewardEthToken is IERC20Upgradeable { function merkleDistributor() external view returns (address); /** - * @dev Function for getting the address of the maintainer, where the fee will be paid. + * @dev Function for getting the address of the protocol fee recipient. */ - function maintainer() external view returns (address); + function protocolFeeRecipient() external view returns (address); /** - * @dev Function for changing the maintainer's address. - * @param _newMaintainer - new maintainer's address. + * @dev Function for changing the protocol fee recipient's address. + * @param recipient - new protocol fee recipient's address. */ - function setMaintainer(address _newMaintainer) external; + function setProtocolFeeRecipient(address recipient) external; /** - * @dev Function for getting maintainer fee. The percentage fee users pay from their reward for using the pool service. + * @dev Function for getting protocol fee. The percentage fee users pay from their reward for using the pool service. */ - function maintainerFee() external view returns (uint256); + function protocolFee() external view returns (uint256); /** - * @dev Function for changing the maintainer's fee. - * @param _newMaintainerFee - new maintainer's fee. Must be less than 10000 (100.00%). + * @dev Function for changing the protocol fee. + * @param _protocolFee - new protocol fee. Must be less than 10000 (100.00%). */ - function setMaintainerFee(uint256 _newMaintainerFee) external; + function setProtocolFee(uint256 _protocolFee) external; /** * @dev Function for retrieving the total rewards amount. diff --git a/contracts/merkles/MerkleDistributor.sol b/contracts/merkles/MerkleDistributor.sol index 11606326..9fefea2c 100644 --- a/contracts/merkles/MerkleDistributor.sol +++ b/contracts/merkles/MerkleDistributor.sol @@ -36,11 +36,12 @@ contract MerkleDistributor is IMerkleDistributor, OwnablePausableUpgradeable { mapping (bytes32 => mapping (uint256 => uint256)) private _claimedBitMap; /** - * @dev See {IMerkleDistributor-initialize}. + * @dev See {IMerkleDistributor-upgrade}. + * The `initialize` must be called before upgrading in previous implementation contract: + * https://github.com/stakewise/contracts/blob/v1.3.0/contracts/collectors/Pool.sol#L55 */ - function initialize(address _admin, address _rewardEthToken, address _oracles) external override initializer { - __OwnablePausableUpgradeable_init(_admin); - rewardEthToken = _rewardEthToken; + function upgrade(address _oracles) external override onlyAdmin whenPaused { + require(address(oracles) == 0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514, "MerkleDistributor: already upgraded"); oracles = IOracles(_oracles); } diff --git a/contracts/tokens/RewardEthToken.sol b/contracts/tokens/RewardEthToken.sol index 70ea6b31..0de3ddb2 100644 --- a/contracts/tokens/RewardEthToken.sol +++ b/contracts/tokens/RewardEthToken.sol @@ -9,12 +9,14 @@ import "../interfaces/IStakedEthToken.sol"; import "../interfaces/IRewardEthToken.sol"; import "../interfaces/IMerkleDistributor.sol"; import "../interfaces/IOracles.sol"; +import "../interfaces/IRevenueSharing.sol"; import "./ERC20PermitUpgradeable.sol"; /** * @title RewardEthToken * * @dev RewardEthToken contract stores pool reward tokens. + * If deploying contract for the first time, the `initialize` function should replace the `upgrade` function. */ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20PermitUpgradeable { using SafeMathUpgradeable for uint256; @@ -29,11 +31,11 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per // @dev Maps account address to its reward checkpoint. mapping(address => Checkpoint) public override checkpoints; - // @dev Address of the maintainer, where the fee will be paid. - address public override maintainer; + // @dev Address where protocol fee will be paid. + address public override protocolFeeRecipient; - // @dev Maintainer percentage fee. - uint256 public override maintainerFee; + // @dev Protocol percentage fee. + uint256 public override protocolFee; // @dev Total amount of rewards. uint128 public override totalRewards; @@ -50,14 +52,20 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per // @dev Maps account address to whether rewards are distributed through the merkle distributor. mapping(address => bool) public override rewardsDisabled; + // @dev Address of the Operators Revenue Sharing contract. + IRevenueSharing private operatorsRevenueSharing; + + // @dev Address of the Partners Revenue Sharing contract. + IRevenueSharing private partnersRevenueSharing; + /** * @dev See {IRewardEthToken-upgrade}. */ - function upgrade(address _merkleDistributor, uint256 _lastUpdateBlockNumber) external override onlyAdmin whenPaused { - require(merkleDistributor == address(0), "RewardEthToken: already upgraded"); - merkleDistributor = _merkleDistributor; - lastUpdateBlockNumber = _lastUpdateBlockNumber; - updateRewardCheckpoint(address(0)); + function upgrade(address _oracles, address _operatorsRevenueSharing, address _partnersRevenueSharing) external override onlyAdmin whenPaused { + require(address(oracles) == 0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514, "RewardEthToken: already upgraded"); + oracles = _oracles; + operatorsRevenueSharing = IRevenueSharing(_operatorsRevenueSharing); + partnersRevenueSharing = IRevenueSharing(_partnersRevenueSharing); } /** @@ -79,21 +87,20 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per } /** - * @dev See {IRewardEthToken-setMaintainer}. + * @dev See {IRewardEthToken-setProtocolFeeRecipient}. */ - function setMaintainer(address _newMaintainer) external override onlyAdmin { - require(_newMaintainer != address(0), "RewardEthToken: invalid address"); - maintainer = _newMaintainer; - emit MaintainerUpdated(_newMaintainer); + function setProtocolFeeRecipient(address recipient) external override onlyAdmin { + protocolFeeRecipient = recipient; + emit ProtocolFeeRecipientUpdated(recipient); } /** - * @dev See {IRewardEthToken-setMaintainerFee}. + * @dev See {IRewardEthToken-setProtocolFee}. */ - function setMaintainerFee(uint256 _newMaintainerFee) external override onlyAdmin { - require(_newMaintainerFee < 10000, "RewardEthToken: invalid fee"); - maintainerFee = _newMaintainerFee; - emit MaintainerFeeUpdated(_newMaintainerFee); + function setProtocolFee(uint256 _protocolFee) external override onlyAdmin { + require(_protocolFee < 1e4, "RewardEthToken: invalid protocol fee"); + protocolFee = _protocolFee; + emit ProtocolFeeUpdated(_protocolFee); } /** @@ -215,29 +222,78 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per uint256 periodRewards = newTotalRewards.sub(totalRewards); if (periodRewards == 0) return; - // calculate reward per token used for account reward calculation - uint256 maintainerReward = periodRewards.mul(maintainerFee).div(10000); + // calculate protocol reward and new reward per token amount + uint256 protocolReward = periodRewards.mul(protocolFee).div(1e4); uint256 prevRewardPerToken = rewardPerToken; - uint256 newRewardPerToken = prevRewardPerToken.add(periodRewards.sub(maintainerReward).mul(1e18).div(stakedEthToken.totalDeposits())); + uint256 totalStaked = stakedEthToken.totalDeposits(); + uint256 newRewardPerToken = prevRewardPerToken.add(periodRewards.sub(protocolReward).mul(1e18).div(totalStaked)); uint128 newRewardPerToken128 = newRewardPerToken.toUint128(); + // store previous distributor rewards for period reward calculation + uint256 prevDistributorBalance = _balanceOf(address(0), prevRewardPerToken); + // update total rewards and new reward per token (totalRewards, rewardPerToken) = (newTotalRewards.toUint128(), newRewardPerToken128); - // update distributor's checkpoint - checkpoints[address(0)] = Checkpoint({ - reward: _balanceOf(address(0), newRewardPerToken).toUint128(), - rewardPerToken: newRewardPerToken128 - }); + // update revenue shares + uint256 leftReward = _updateRevenueShares(protocolReward, totalStaked, newRewardPerToken); + + uint256 newDistributorBalance = _balanceOf(address(0), newRewardPerToken); + address _protocolFeeRecipient = protocolFeeRecipient; + if (_protocolFeeRecipient == address(0) && leftReward > 0) { + // add left protocol reward to the merkle distributor + newDistributorBalance = newDistributorBalance.add(leftReward); + } else if (leftReward > 0) { + // update fee recipient's checkpoint and add its period reward + checkpoints[_protocolFeeRecipient] = Checkpoint({ + reward: _balanceOf(_protocolFeeRecipient, newRewardPerToken).add(leftReward).toUint128(), + rewardPerToken: newRewardPerToken128 + }); + } - // update maintainer's checkpoint and add its period reward - checkpoints[maintainer] = Checkpoint({ - reward: _balanceOf(maintainer, newRewardPerToken).add(maintainerReward).toUint128(), - rewardPerToken: newRewardPerToken128 - }); + // update distributor's checkpoint + if (newDistributorBalance != prevDistributorBalance) { + checkpoints[address(0)] = Checkpoint({ + reward: newDistributorBalance.toUint128(), + rewardPerToken: newRewardPerToken128 + }); + } lastUpdateBlockNumber = block.number; - emit RewardsUpdated(periodRewards, newTotalRewards, newRewardPerToken); + emit RewardsUpdated( + periodRewards, + newTotalRewards, + newRewardPerToken, + newDistributorBalance.sub(prevDistributorBalance), + leftReward + ); + } + + function _updateRevenueShares(uint256 protocolReward, uint256 totalStaked, uint256 newRewardPerToken) internal returns (uint256) { + // SLOAD for gas optimization + (IRevenueSharing _operatorsRevenueSharing, IRevenueSharing _partnersRevenueSharing) = (operatorsRevenueSharing, partnersRevenueSharing); + + uint128 newRewardPerToken128 = newRewardPerToken.toUint128(); + + // update operators revenue sharing + uint256 operatorsCut = _operatorsRevenueSharing.updateRewards(protocolReward, totalStaked); + if (operatorsCut > 0) { + checkpoints[address(_operatorsRevenueSharing)] = Checkpoint({ + reward: _balanceOf(address(_operatorsRevenueSharing), newRewardPerToken).add(operatorsCut).toUint128(), + rewardPerToken: newRewardPerToken128 + }); + } + + // update partners revenue sharing + uint256 partnersCut = _partnersRevenueSharing.updateRewards(protocolReward.sub(operatorsCut), totalStaked); + if (partnersCut > 0) { + checkpoints[address(_partnersRevenueSharing)] = Checkpoint({ + reward: _balanceOf(address(_partnersRevenueSharing), newRewardPerToken).add(partnersCut).toUint128(), + rewardPerToken: newRewardPerToken128 + }); + } + + return protocolReward.sub(operatorsCut).sub(partnersCut); } /** diff --git a/test/MerkleDistributor.test.js b/test/MerkleDistributor.test.js index ca244006..5f0ee738 100644 --- a/test/MerkleDistributor.test.js +++ b/test/MerkleDistributor.test.js @@ -1,3 +1,4 @@ +const { defaultAbiCoder, hexlify, keccak256 } = require('ethers/lib/utils'); const { expectRevert, expectEvent, @@ -13,7 +14,7 @@ const { stopImpersonatingAccount, impersonateAccount, resetFork, - getOracleAccounts, + setupOracleAccounts, setTotalRewards, setMerkleRoot, } = require('./utils'); @@ -22,7 +23,7 @@ const MerkleDistributor = artifacts.require('MerkleDistributor'); const StakeWiseToken = artifacts.require('StakeWiseToken'); const RewardEthToken = artifacts.require('RewardEthToken'); const StakedEthToken = artifacts.require('StakedEthToken'); -const OracleMock = artifacts.require('OracleMock'); +const MulticallMock = artifacts.require('MulticallMock'); const Oracles = artifacts.require('Oracles'); const Pool = artifacts.require('Pool'); @@ -63,7 +64,7 @@ const merkleProofs = { }, }; -contract('Merkle Distributor', ([beneficiary, anyone]) => { +contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { const admin = contractSettings.admin; let merkleDistributor, amount, @@ -91,11 +92,13 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); stakedEthToken = await StakedEthToken.at(contracts.stakedEthToken); - merkleDistributor = await MerkleDistributor.at( - upgradedContracts.merkleDistributor - ); - oracles = await Oracles.at(contracts.oracles); - oracleAccounts = await getOracleAccounts({ oracles }); + merkleDistributor = await MerkleDistributor.at(contracts.merkleDistributor); + oracles = await Oracles.at(upgradedContracts.oracles); + oracleAccounts = await setupOracleAccounts({ + admin, + oracles, + accounts: otherAccounts, + }); pool = await Pool.at(contracts.pool); }); @@ -299,7 +302,7 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { await pool.setMinActivatingDeposit(constants.MAX_UINT256, { from: admin, }); - await pool.addDeposit({ + await pool.stake(anyone, { from: anyone, value: ether('1000'), }); @@ -311,10 +314,10 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { let periodReward = distributorEthReward .mul(totalDeposits) .div(ether('1000')); - let maintainerFee = await rewardEthToken.maintainerFee(); + let protocolFee = await rewardEthToken.protocolFee(); totalRewards = totalRewards.add(periodReward); totalRewards = totalRewards.add( - periodReward.mul(maintainerFee).div(new BN(10000)) + periodReward.mul(protocolFee).div(new BN(10000)) ); await setTotalRewards({ @@ -354,7 +357,7 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { await pool.setMinActivatingDeposit(constants.MAX_UINT256, { from: admin, }); - await pool.addDeposit({ + await pool.stake(anyone, { from: anyone, value: ether('1000'), }); @@ -436,7 +439,12 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { }); describe('claiming within the same block', () => { - let mockedOracle, totalRewards, activatedValidators; + let multicallMock, + totalRewards, + activatedValidators, + rewardsSignatures, + merkleRootSignatures; + beforeEach(async () => { await setMerkleRoot({ merkleDistributor, @@ -447,34 +455,32 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { }); // clean up oracles - for (let i = 0; i < oracleAccounts.length; i++) { + for (let i = 1; i < oracleAccounts.length; i++) { await oracles.removeOracle(oracleAccounts[i], { from: admin, }); } // deploy mocked oracle - mockedOracle = await OracleMock.new( - contracts.oracles, - contracts.stakedEthToken, - contracts.rewardEthToken, + multicallMock = await MulticallMock.new( + oracles.address, + stakedEthToken.address, + rewardEthToken.address, merkleDistributor.address ); - await oracles.addOracle(mockedOracle.address, { - from: admin, - }); // wait for rewards voting time let newSyncPeriod = new BN('700'); await oracles.setSyncPeriod(newSyncPeriod, { from: admin, }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); + let lastUpdateBlockNumber = + await rewardEthToken.lastUpdateBlockNumber(); await time.advanceBlockTo( lastUpdateBlockNumber.add(new BN(newSyncPeriod)) ); - await pool.addDeposit({ + await pool.stake(anyone, { from: anyone, value: ether('1000'), }); @@ -482,22 +488,50 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { from: admin, }); let totalDeposits = await stakedEthToken.totalDeposits(); - let maintainerFee = await rewardEthToken.maintainerFee(); + let protocolFee = await rewardEthToken.protocolFee(); totalRewards = distributorEthReward .mul(totalDeposits) .div(ether('1000')); totalRewards = totalRewards.add( - totalRewards.add(maintainerFee.div(new BN(10000))) + totalRewards.add(protocolFee.div(new BN(10000))) ); activatedValidators = await pool.activatedValidators(); + + // create rewards signature + let currentNonce = await oracles.currentNonce(); + let encoded = defaultAbiCoder.encode( + ['uint256', 'uint256', 'uint256'], + [ + currentNonce.toString(), + totalRewards.toString(), + activatedValidators.toString(), + ] + ); + let candidateId = hexlify(keccak256(encoded)); + rewardsSignatures = [ + await web3.eth.sign(candidateId, oracleAccounts[0]), + ]; + + // create merkle root signature + encoded = defaultAbiCoder.encode( + ['uint256', 'bytes32', 'string'], + [currentNonce.add(new BN(1)).toString(), merkleRoot, merkleProofs] + ); + candidateId = hexlify(keccak256(encoded)); + merkleRootSignatures = [ + await web3.eth.sign(candidateId, oracleAccounts[0]), + ]; }); it('cannot claim after total rewards update in the same block', async () => { const { index, amounts, tokens, proof } = merkleProofs[account1]; await expectRevert( - mockedOracle.updateTotalRewardsAndClaim( - totalRewards, - activatedValidators, + multicallMock.updateTotalRewardsAndClaim( + { + totalRewards: totalRewards.toString(), + activatedValidators: activatedValidators.toString(), + signatures: rewardsSignatures, + }, index, account1, tokens, @@ -514,9 +548,12 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { it('can claim before total rewards update in the same block', async () => { const { index, amounts, tokens, proof } = merkleProofs[account1]; await expectRevert( - mockedOracle.claimAndUpdateTotalRewards( - totalRewards, - activatedValidators, + multicallMock.claimAndUpdateTotalRewards( + { + totalRewards: totalRewards.toString(), + activatedValidators: activatedValidators.toString(), + signatures: rewardsSignatures, + }, index, account1, tokens, @@ -532,14 +569,15 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { it('cannot claim before merkle root update in the same block', async () => { const { index, amounts, tokens, proof } = merkleProofs[account1]; - await mockedOracle.updateTotalRewards( + await oracles.submitRewards( + await oracles.currentNonce(), totalRewards, - activatedValidators + activatedValidators, + rewardsSignatures ); await expectRevert( - mockedOracle.claimAndUpdateMerkleRoot( - merkleRoot, - merkleProofs, + multicallMock.claimAndUpdateMerkleRoot( + { merkleRoot, merkleProofs, signatures: merkleRootSignatures }, index, account1, tokens, @@ -554,15 +592,16 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { }); it('can claim after merkle root update in the same block', async () => { - await mockedOracle.updateTotalRewards( + await oracles.submitRewards( + await oracles.currentNonce(), totalRewards, - activatedValidators + activatedValidators, + rewardsSignatures ); const { index, amounts, tokens, proof } = merkleProofs[account1]; await expectRevert( - mockedOracle.updateMerkleRootAndClaim( - merkleRoot, - merkleProofs, + multicallMock.updateMerkleRootAndClaim( + { merkleRoot, merkleProofs, signatures: merkleRootSignatures }, index, account1, tokens, @@ -577,4 +616,34 @@ contract('Merkle Distributor', ([beneficiary, anyone]) => { }); }); }); + + describe('upgrading', () => { + it('fails to upgrade with not admin privilege', async () => { + await expectRevert( + merkleDistributor.upgrade(oracles.address, { + from: anyone, + }), + 'OwnablePausable: access denied' + ); + }); + + it('fails to upgrade when not paused', async () => { + await expectRevert( + merkleDistributor.upgrade(oracles.address, { + from: admin, + }), + 'Pausable: not paused' + ); + }); + + it('fails to upgrade twice', async () => { + await merkleDistributor.pause({ from: admin }); + await expectRevert( + merkleDistributor.upgrade(oracles.address, { + from: admin, + }), + 'MerkleDistributor: already upgraded' + ); + }); + }); }); diff --git a/test/Proxies.test.js b/test/Proxies.test.js index c2c1e401..777ca3b9 100644 --- a/test/Proxies.test.js +++ b/test/Proxies.test.js @@ -46,7 +46,7 @@ contract('Proxies', () => { } }); - it('proxy admin admin owner is DAO', async () => { + it('proxy admin owner is DAO', async () => { expect(await proxyAdmin.owner()).to.equal(contractSettings.admin); }); }); diff --git a/test/RevenueSharing.test.js b/test/RevenueSharing.test.js index cd5398be..806a24ef 100644 --- a/test/RevenueSharing.test.js +++ b/test/RevenueSharing.test.js @@ -519,7 +519,7 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { new BN(0) ); - // check reward of the beneficiary1 + // check reward of the beneficiary2 const reward2 = receipt.logs[1].args.reward; expect(reward2).to.bignumber.greaterThan(new BN(0)); expect(await revenueSharing.rewardOf(beneficiary2)).to.bignumber.equal( diff --git a/test/tokens/RewardEthToken.test.js b/test/tokens/RewardEthToken.test.js index a1dd19c0..4b29811d 100644 --- a/test/tokens/RewardEthToken.test.js +++ b/test/tokens/RewardEthToken.test.js @@ -1,3 +1,4 @@ +const { hexlify, keccak256, defaultAbiCoder } = require('ethers/lib/utils'); const { expect } = require('chai'); const { expectRevert, @@ -9,28 +10,31 @@ const { time, } = require('@openzeppelin/test-helpers'); const { upgradeContracts } = require('../../deployments'); -const { contractSettings, contracts } = require('../../deployments/settings'); +const { contractSettings } = require('../../deployments/settings'); const { stopImpersonatingAccount, impersonateAccount, resetFork, checkRewardEthToken, setTotalRewards, - getOracleAccounts, + setupOracleAccounts, } = require('../utils'); const StakedEthToken = artifacts.require('StakedEthToken'); const RewardEthToken = artifacts.require('RewardEthToken'); const Pool = artifacts.require('Pool'); const Oracles = artifacts.require('Oracles'); -const OracleMock = artifacts.require('OracleMock'); -const maintainerFee = new BN(1000); +const RevenueSharing = artifacts.require('RevenueSharing'); +const MulticallMock = artifacts.require('MulticallMock'); +const protocolFee = new BN(1000); contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { const admin = contractSettings.admin; let stakedEthToken, rewardEthToken, - maintainer, + protocolFeeRecipient, + operatorsRevenueSharing, + partnersRevenueSharing, totalSupply, pool, oracles, @@ -42,75 +46,85 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { await impersonateAccount(admin); await send.ether(sender, admin, ether('5')); - await upgradeContracts(); + let contracts = await upgradeContracts(); stakedEthToken = await StakedEthToken.at(contracts.stakedEthToken); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); + operatorsRevenueSharing = await RevenueSharing.at( + contracts.operatorsRevenueSharing + ); + partnersRevenueSharing = await RevenueSharing.at( + contracts.partnersRevenueSharing + ); + pool = await Pool.at(contracts.pool); oracles = await Oracles.at(contracts.oracles); - oracleAccounts = await getOracleAccounts({ oracles }); - maintainer = await rewardEthToken.maintainer(); + oracleAccounts = await setupOracleAccounts({ oracles, admin, accounts }); + protocolFeeRecipient = await rewardEthToken.protocolFeeRecipient(); totalSupply = await rewardEthToken.totalSupply(); - await rewardEthToken.setMaintainer(maintainer, { from: admin }); - await rewardEthToken.setMaintainerFee(maintainerFee, { from: admin }); + await rewardEthToken.setProtocolFee(protocolFee, { from: admin }); }); afterEach(async () => resetFork()); describe('restricted actions', () => { - it('not admin fails to update maintainer address', async () => { + it('not admin fails to update protocol fee recipient address', async () => { await expectRevert( - rewardEthToken.setMaintainer(sender, { + rewardEthToken.setProtocolFeeRecipient(sender, { from: sender, }), 'OwnablePausable: access denied' ); }); - it('fails to set zero address for the maintainer', async () => { - await expectRevert( - rewardEthToken.setMaintainer(constants.ZERO_ADDRESS, { + it('can set zero address for the protocol fee recipient', async () => { + let receipt = await rewardEthToken.setProtocolFeeRecipient( + constants.ZERO_ADDRESS, + { from: admin, - }), - 'RewardEthToken: invalid address' + } ); + + await expectEvent(receipt, 'ProtocolFeeRecipientUpdated', { + recipient: constants.ZERO_ADDRESS, + }); }); - it('admin can update maintainer address', async () => { - let receipt = await rewardEthToken.setMaintainer(sender, { + it('admin can update protocol fee recipient address', async () => { + let receipt = await rewardEthToken.setProtocolFeeRecipient(sender, { from: admin, }); - await expectEvent(receipt, 'MaintainerUpdated', { - maintainer: sender, + await expectEvent(receipt, 'ProtocolFeeRecipientUpdated', { + recipient: sender, }); }); - it('not admin fails to update maintainer fee', async () => { + it('not admin fails to update protocol fee', async () => { await expectRevert( - rewardEthToken.setMaintainerFee(9999, { + rewardEthToken.setProtocolFee(9999, { from: sender, }), 'OwnablePausable: access denied' ); }); - it('admin can update maintainer fee', async () => { - let receipt = await rewardEthToken.setMaintainerFee(9999, { + it('admin can update protocol fee', async () => { + let receipt = await rewardEthToken.setProtocolFee(9999, { from: admin, }); - await expectEvent(receipt, 'MaintainerFeeUpdated', { - maintainerFee: '9999', + await expectEvent(receipt, 'ProtocolFeeUpdated', { + protocolFee: '9999', }); }); - it('fails to set invalid maintainer fee', async () => { + it('fails to set invalid protocol fee', async () => { await expectRevert( - rewardEthToken.setMaintainerFee(10000, { + rewardEthToken.setProtocolFee(10000, { from: admin, }), - 'RewardEthToken: invalid fee' + 'RewardEthToken: invalid protocol fee' ); }); @@ -145,11 +159,48 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { let newTotalRewards = prevTotalRewards.add(ether('10')); let receipt = await setTotalRewards({ admin, - totalRewards: newTotalRewards, rewardEthToken, oracles, + pool, + totalRewards: newTotalRewards, oracleAccounts, + }); + await expectEvent.inTransaction( + receipt.tx, + RewardEthToken, + 'RewardsUpdated', + { + periodRewards: newTotalRewards.sub(prevTotalRewards), + totalRewards: newTotalRewards, + } + ); + }); + + it('anyone cannot update rewards', async () => { + await expectRevert( + rewardEthToken.updateTotalRewards(ether('10'), { + from: sender, + }), + 'RewardEthToken: access denied' + ); + await checkRewardEthToken({ + rewardEthToken, + totalSupply, + account: sender, + balance: new BN(0), + }); + }); + + it('oracles can update rewards', async () => { + let prevTotalRewards = await rewardEthToken.totalRewards(); + let newTotalRewards = prevTotalRewards.add(ether('10')); + let receipt = await setTotalRewards({ + admin, + rewardEthToken, + oracles, pool, + totalRewards: newTotalRewards, + oracleAccounts, }); await expectEvent.inTransaction( receipt.tx, @@ -161,6 +212,123 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { } ); }); + + it('rewards update with revenue shares', async () => { + let [beneficiary1, revenueShare1, contributedAmount1] = [ + accounts[0], + new BN(1000), + ether('30'), + ]; + let [beneficiary2, revenueShare2, contributedAmount2] = [ + accounts[1], + new BN(2000), + ether('50'), + ]; + let claimer = accounts[2]; + + for (const revenueSharing of [ + operatorsRevenueSharing, + partnersRevenueSharing, + ]) { + // add accounts + await revenueSharing.addAccount(claimer, beneficiary1, revenueShare1, { + from: admin, + }); + await revenueSharing.increaseAmount(beneficiary1, contributedAmount1, { + from: admin, + }); + + await revenueSharing.addAccount(claimer, beneficiary2, revenueShare2, { + from: admin, + }); + await revenueSharing.increaseAmount(beneficiary2, contributedAmount2, { + from: admin, + }); + } + + // increase reward + let periodReward = ether('10'); + let totalRewards = (await rewardEthToken.totalRewards()).add( + periodReward + ); + let prevProtocolFeeRecipientBalance = await rewardEthToken.balanceOf( + protocolFeeRecipient + ); + await setTotalRewards({ + admin, + rewardEthToken, + oracles, + oracleAccounts, + pool, + totalRewards, + }); + let protocolReward = ( + await rewardEthToken.balanceOf(protocolFeeRecipient) + ).sub(prevProtocolFeeRecipientBalance); + expect(protocolReward).to.bignumber.greaterThan(new BN(0)); + + let operatorsRevenueCut = await rewardEthToken.balanceOf( + operatorsRevenueSharing.address + ); + + let partnersRevenueCut = await rewardEthToken.balanceOf( + partnersRevenueSharing.address + ); + expect(operatorsRevenueCut).to.bignumber.greaterThan(new BN(0)); + expect(partnersRevenueCut).to.bignumber.greaterThan(new BN(0)); + expect(operatorsRevenueCut).to.bignumber.greaterThan(partnersRevenueCut); + expect(operatorsRevenueCut.add(partnersRevenueCut)).to.bignumber.lessThan( + periodReward + ); + + for (const revenueSharing of [ + operatorsRevenueSharing, + partnersRevenueSharing, + ]) { + let receipt = await revenueSharing.collectRewards( + [beneficiary1, beneficiary2], + { + from: claimer, + } + ); + await expectEvent(receipt, 'RewardCollected', { + sender: claimer, + beneficiary: beneficiary1, + }); + await expectEvent(receipt, 'RewardCollected', { + sender: claimer, + beneficiary: beneficiary2, + }); + + // check reward of the beneficiary1 + const reward1 = receipt.logs[0].args.reward; + expect(reward1).to.bignumber.greaterThan(new BN(0)); + expect(await revenueSharing.rewardOf(beneficiary1)).to.bignumber.equal( + new BN(0) + ); + + // check reward of the beneficiary2 + const reward2 = receipt.logs[1].args.reward; + expect(reward2).to.bignumber.greaterThan(new BN(0)); + expect(await revenueSharing.rewardOf(beneficiary2)).to.bignumber.equal( + new BN(0) + ); + expect(reward1.add(reward2)).to.bignumber.lessThan(operatorsRevenueCut); + expect(reward2).to.bignumber.greaterThan(reward1); + } + + let gwei = ether('0.000000001'); + expect( + await rewardEthToken.balanceOf(operatorsRevenueSharing.address) + ).to.bignumber.lessThan(gwei); + expect( + await rewardEthToken.balanceOf(partnersRevenueSharing.address) + ).to.bignumber.lessThan(gwei); + + expect( + await rewardEthToken.balanceOf(protocolFeeRecipient) + ).to.bignumber.equal(prevProtocolFeeRecipientBalance.add(protocolReward)); + }); }); describe('transfer', () => { @@ -173,11 +341,11 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { await pool.setMinActivatingDeposit(stakedAmount2.add(ether('1')), { from: admin, }); - await pool.addDeposit({ + await pool.stake(sender1, { from: sender1, value: stakedAmount1, }); - await pool.addDeposit({ + await pool.stake(sender2, { from: sender2, value: stakedAmount2, }); @@ -317,24 +485,21 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { it('cannot transfer rewards after total rewards update in the same block', async () => { // clean up oracles - for (let i = 0; i < oracleAccounts.length; i++) { + for (let i = 1; i < oracleAccounts.length; i++) { await oracles.removeOracle(oracleAccounts[i], { from: admin, }); } // deploy mocked oracle - let mockedOracle = await OracleMock.new( - contracts.oracles, - contracts.stakedEthToken, - contracts.rewardEthToken, + let multicallMock = await MulticallMock.new( + oracles.address, + stakedEthToken.address, + rewardEthToken.address, merkleDistributor ); - await oracles.addOracle(mockedOracle.address, { - from: admin, - }); - await rewardEthToken.approve(mockedOracle.address, rewardAmount1, { + await rewardEthToken.approve(multicallMock.address, rewardAmount1, { from: sender1, }); @@ -351,11 +516,24 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); let activatedValidators = await pool.activatedValidators(); + let currentNonce = await oracles.currentNonce(); + let encoded = defaultAbiCoder.encode( + ['uint256', 'uint256', 'uint256'], + [ + currentNonce.toString(), + totalRewards.toString(), + activatedValidators.toString(), + ] + ); + let candidateId = hexlify(keccak256(encoded)); + let signature = await web3.eth.sign(candidateId, oracleAccounts[0]); + await expectRevert( - mockedOracle.updateTotalRewardsAndTransferRewards( + multicallMock.updateTotalRewardsAndTransferRewards( totalRewards, activatedValidators, sender2, + [signature], { from: sender1, } @@ -366,24 +544,21 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { it('can transfer rewards before total rewards update in the same block', async () => { // clean up oracles - for (let i = 0; i < oracleAccounts.length; i++) { + for (let i = 1; i < oracleAccounts.length; i++) { await oracles.removeOracle(oracleAccounts[i], { from: admin, }); } - // deploy mocked oracle - let mockedOracle = await OracleMock.new( - contracts.oracles, - contracts.stakedEthToken, - contracts.rewardEthToken, + // deploy mocked multicall + let multicallMock = await MulticallMock.new( + oracles.address, + stakedEthToken.address, + rewardEthToken.address, merkleDistributor ); - await oracles.addOracle(mockedOracle.address, { - from: admin, - }); - await rewardEthToken.approve(mockedOracle.address, rewardAmount1, { + await rewardEthToken.approve(multicallMock.address, rewardAmount1, { from: sender1, }); @@ -400,10 +575,22 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); let activatedValidators = await pool.activatedValidators(); - let receipt = await mockedOracle.transferRewardsAndUpdateTotalRewards( + let currentNonce = await oracles.currentNonce(); + let encoded = defaultAbiCoder.encode( + ['uint256', 'uint256', 'uint256'], + [ + currentNonce.toString(), + totalRewards.toString(), + activatedValidators.toString(), + ] + ); + let candidateId = hexlify(keccak256(encoded)); + let signature = await web3.eth.sign(candidateId, oracleAccounts[0]); + let receipt = await multicallMock.transferRewardsAndUpdateTotalRewards( totalRewards, activatedValidators, sender2, + [signature], { from: sender1, } diff --git a/test/tokens/StakedEthToken.test.js b/test/tokens/StakedEthToken.test.js index fec6240a..14496b4e 100644 --- a/test/tokens/StakedEthToken.test.js +++ b/test/tokens/StakedEthToken.test.js @@ -1,3 +1,4 @@ +const { hexlify, keccak256, defaultAbiCoder } = require('ethers/lib/utils'); const { expect } = require('chai'); const { expectRevert, @@ -13,7 +14,7 @@ const { stopImpersonatingAccount, resetFork, checkStakedEthToken, - getOracleAccounts, + setupOracleAccounts, setTotalRewards, } = require('../utils'); const { upgradeContracts } = require('../../deployments'); @@ -23,29 +24,51 @@ const StakedEthToken = artifacts.require('StakedEthToken'); const RewardEthToken = artifacts.require('RewardEthToken'); const Pool = artifacts.require('Pool'); const Oracles = artifacts.require('Oracles'); -const OracleMock = artifacts.require('OracleMock'); +const MulticallMock = artifacts.require('MulticallMock'); -contract('StakedEthToken', ([merkleDistributor, sender1, sender2]) => { +contract('StakedEthToken', (accounts) => { const admin = contractSettings.admin; + const [merkleDistributor, sender1, sender2, ...otherAccounts] = accounts; let stakedEthToken, rewardEthToken, pool, totalSupply, oracles, - oracleAccounts; + oracleAccounts, + activatedValidators, + totalRewards, + signature; beforeEach(async () => { await impersonateAccount(admin); await send.ether(sender1, admin, ether('5')); - await upgradeContracts(); + let upgradedContracts = await upgradeContracts(); stakedEthToken = await StakedEthToken.at(contracts.stakedEthToken); pool = await Pool.at(contracts.pool); - oracles = await Oracles.at(contracts.oracles); - oracleAccounts = await getOracleAccounts({ oracles }); + oracles = await Oracles.at(upgradedContracts.oracles); + oracleAccounts = await setupOracleAccounts({ + oracles, + admin, + accounts: otherAccounts, + }); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); + totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); + let currentNonce = await oracles.currentNonce(); + activatedValidators = await pool.activatedValidators(); + let encoded = defaultAbiCoder.encode( + ['uint256', 'uint256', 'uint256'], + [ + currentNonce.toString(), + totalRewards.toString(), + activatedValidators.toString(), + ] + ); + let candidateId = hexlify(keccak256(encoded)); + signature = await web3.eth.sign(candidateId, oracleAccounts[0]); + totalSupply = await stakedEthToken.totalSupply(); }); @@ -73,7 +96,7 @@ contract('StakedEthToken', ([merkleDistributor, sender1, sender2]) => { // disable rewards await stakedEthToken.toggleRewards(sender1, true, { from: admin }); let amount = ether('10'); - let receipt = await pool.addDeposit({ + let receipt = await pool.stake(sender1, { from: sender1, value: amount, }); @@ -95,7 +118,7 @@ contract('StakedEthToken', ([merkleDistributor, sender1, sender2]) => { await pool.setMinActivatingDeposit(value.add(ether('1')), { from: admin, }); - await pool.addDeposit({ + await pool.stake(sender1, { from: sender1, value, }); @@ -349,24 +372,21 @@ contract('StakedEthToken', ([merkleDistributor, sender1, sender2]) => { it('cannot transfer staked amount after total rewards update in the same block', async () => { // clean up oracles - for (let i = 0; i < oracleAccounts.length; i++) { + for (let i = 1; i < oracleAccounts.length; i++) { await oracles.removeOracle(oracleAccounts[i], { from: admin, }); } - // deploy mocked oracle - let mockedOracle = await OracleMock.new( - contracts.oracles, + // deploy mocked multicall + let multicallMock = await MulticallMock.new( + oracles.address, contracts.stakedEthToken, contracts.rewardEthToken, merkleDistributor ); - await oracles.addOracle(mockedOracle.address, { - from: admin, - }); - await stakedEthToken.approve(mockedOracle.address, value, { + await stakedEthToken.approve(multicallMock.address, value, { from: sender1, }); @@ -380,14 +400,12 @@ contract('StakedEthToken', ([merkleDistributor, sender1, sender2]) => { lastUpdateBlockNumber.add(new BN(newSyncPeriod)) ); - let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); - let activatedValidators = await pool.activatedValidators(); - await expectRevert( - mockedOracle.updateTotalRewardsAndTransferStakedEth( + multicallMock.updateTotalRewardsAndTransferStakedEth( totalRewards, activatedValidators, sender2, + [signature], { from: sender1, } @@ -398,24 +416,21 @@ contract('StakedEthToken', ([merkleDistributor, sender1, sender2]) => { it('can transfer staked amount before total rewards update in the same block', async () => { // clean up oracles - for (let i = 0; i < oracleAccounts.length; i++) { + for (let i = 1; i < oracleAccounts.length; i++) { await oracles.removeOracle(oracleAccounts[i], { from: admin, }); } - // deploy mocked oracle - let mockedOracle = await OracleMock.new( - contracts.oracles, + // deploy mocked multicall + let multicallMock = await MulticallMock.new( + oracles.address, contracts.stakedEthToken, contracts.rewardEthToken, merkleDistributor ); - await oracles.addOracle(mockedOracle.address, { - from: admin, - }); - await stakedEthToken.approve(mockedOracle.address, value, { + await stakedEthToken.approve(multicallMock.address, value, { from: sender1, }); @@ -429,13 +444,11 @@ contract('StakedEthToken', ([merkleDistributor, sender1, sender2]) => { lastUpdateBlockNumber.add(new BN(newSyncPeriod)) ); - let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); - let activatedValidators = await pool.activatedValidators(); - - let receipt = await mockedOracle.transferStakedEthAndUpdateTotalRewards( + let receipt = await multicallMock.transferStakedEthAndUpdateTotalRewards( totalRewards, activatedValidators, sender2, + [signature], { from: sender1, } diff --git a/test/tokens/toggleRewards.test.js b/test/tokens/toggleRewards.test.js index f05c459d..fa8f866f 100644 --- a/test/tokens/toggleRewards.test.js +++ b/test/tokens/toggleRewards.test.js @@ -10,7 +10,7 @@ const { impersonateAccount, stopImpersonatingAccount, resetFork, - getOracleAccounts, + setupOracleAccounts, setTotalRewards, } = require('../utils'); const { contractSettings, contracts } = require('../../deployments/settings'); @@ -32,13 +32,12 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { await impersonateAccount(admin); await send.ether(anyone, admin, ether('5')); - await upgradeContracts(); - - oracles = await Oracles.at(contracts.oracles); + let upgradedContracts = await upgradeContracts(); + oracles = await Oracles.at(upgradedContracts.oracles); pool = await Pool.at(contracts.pool); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); stakedEthToken = await StakedEthToken.at(contracts.stakedEthToken); - oracleAccounts = await getOracleAccounts({ oracles }); + oracleAccounts = await setupOracleAccounts({ oracles, admin, accounts }); }); afterEach(async () => resetFork()); @@ -75,7 +74,7 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { let deposit = ether('5'); // mint sETH2 for disabled account - await pool.addDeposit({ + await pool.stake(account, { from: account, value: deposit, }); @@ -120,7 +119,7 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { let deposit = ether('5'); // mint sETH2 for disabled account - await pool.addDeposit({ + await pool.stake(account, { from: account, value: deposit, }); @@ -140,7 +139,7 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { ).to.be.bignumber.equal(new BN(0)); // mint sETH2 for normal account - await pool.addDeposit({ + await pool.stake(anyone, { from: anyone, value: ether('5'), }); @@ -204,7 +203,7 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { it('toggling rewards does not affect current rewards balance', async () => { // mint sETH2 for disabled account let deposit = ether('5'); - await pool.addDeposit({ + await pool.stake(account, { from: account, value: deposit, }); diff --git a/test/tokens/upgrading.test.js b/test/tokens/upgrading.test.js index b177ff71..2c8d5b75 100644 --- a/test/tokens/upgrading.test.js +++ b/test/tokens/upgrading.test.js @@ -17,7 +17,11 @@ const RewardEthToken = artifacts.require('RewardEthToken'); contract('RewardEthToken (upgrading)', ([anyone]) => { let admin = contractSettings.admin; - let rewardEthToken, merkleDistributor; + let rewardEthToken, + merkleDistributor, + oracles, + partnersRevenueSharing, + operatorsRevenueSharing; after(async () => stopImpersonatingAccount(admin)); @@ -26,7 +30,12 @@ contract('RewardEthToken (upgrading)', ([anyone]) => { await send.ether(anyone, admin, ether('5')); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); - ({ merkleDistributor } = await upgradeContracts()); + ({ + merkleDistributor, + oracles, + partnersRevenueSharing, + operatorsRevenueSharing, + } = await upgradeContracts()); }); afterEach(async () => resetFork()); @@ -34,8 +43,9 @@ contract('RewardEthToken (upgrading)', ([anyone]) => { it('fails to upgrade with not admin privilege', async () => { await expectRevert( rewardEthToken.upgrade( - merkleDistributor, - contractSettings.totalRewardsLastUpdateBlockNumber, + oracles, + operatorsRevenueSharing, + partnersRevenueSharing, { from: anyone, } @@ -47,8 +57,9 @@ contract('RewardEthToken (upgrading)', ([anyone]) => { it('fails to upgrade when not paused', async () => { await expectRevert( rewardEthToken.upgrade( - merkleDistributor, - contractSettings.totalRewardsLastUpdateBlockNumber, + oracles, + operatorsRevenueSharing, + partnersRevenueSharing, { from: admin, } @@ -61,8 +72,9 @@ contract('RewardEthToken (upgrading)', ([anyone]) => { await rewardEthToken.pause({ from: admin }); await expectRevert( rewardEthToken.upgrade( - merkleDistributor, - contractSettings.totalRewardsLastUpdateBlockNumber, + oracles, + operatorsRevenueSharing, + partnersRevenueSharing, { from: admin, } From c8d3d9ea986e9a1a925be2a343ddf6674362188c Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Mon, 9 Aug 2021 15:30:05 +0300 Subject: [PATCH 04/55] Refactor oracles for gas optimization - Implement revenue sharing within reward token --- abi/Oracles.json | 293 ++++++-- contracts/Oracles.sol | 299 ++++++--- contracts/RevenueSharing.sol | 16 +- contracts/interfaces/IOracles.sol | 115 +++- .../{OracleMock.sol => MulticallMock.sol} | 114 ++-- contracts/tokens/RewardEthToken.sol | 4 +- test/MerkleDistributor.test.js | 51 +- test/RevenueSharing.test.js | 2 +- test/oracles/Oracles.test.js | 623 +++++++----------- test/oracles/upgrading.test.js | 47 +- test/pool/settings.test.js | 14 +- test/tokens/RewardEthToken.test.js | 30 +- test/tokens/StakedEthToken.test.js | 33 +- test/tokens/toggleRewards.test.js | 85 +-- test/tokens/upgrading.test.js | 33 +- 15 files changed, 958 insertions(+), 801 deletions(-) rename contracts/mocks/{OracleMock.sol => MulticallMock.sol} (53%) diff --git a/abi/Oracles.json b/abi/Oracles.json index c7c3c3c8..ffe6b9ae 100644 --- a/abi/Oracles.json +++ b/abi/Oracles.json @@ -1,4 +1,66 @@ [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "FinalizeValidatorVoteSubmitted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "signer", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "InitializeValidatorVoteSubmitted", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -260,14 +322,8 @@ "type": "function" }, { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "candidates", + "inputs": [], + "name": "currentNonce", "outputs": [ { "internalType": "uint256", @@ -279,16 +335,58 @@ "type": "function" }, { - "inputs": [], - "name": "currentNonce", - "outputs": [ + "inputs": [ { "internalType": "uint256", - "name": "", + "name": "_nonce", "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "depositDataRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "internalType": "struct IPoolValidators.Validator", + "name": "validator", + "type": "tuple" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" } ], - "stateMutability": "view", + "name": "finalizeValidator", + "outputs": [], + "stateMutability": "nonpayable", "type": "function" }, { @@ -399,24 +497,93 @@ "inputs": [ { "internalType": "address", - "name": "oracle", + "name": "_admin", "type": "address" }, { - "internalType": "bytes32", - "name": "candidateId", - "type": "bytes32" + "internalType": "address", + "name": "_prevOracles", + "type": "address" + }, + { + "internalType": "address", + "name": "_rewardEthToken", + "type": "address" + }, + { + "internalType": "address", + "name": "_pool", + "type": "address" + }, + { + "internalType": "address", + "name": "_merkleDistributor", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_syncPeriod", + "type": "uint256" } ], - "name": "hasVote", - "outputs": [ + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ { - "internalType": "bool", - "name": "", - "type": "bool" + "internalType": "uint256", + "name": "_nonce", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + }, + { + "internalType": "bytes32", + "name": "depositDataRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "internalType": "struct IPoolValidators.Validator", + "name": "validator", + "type": "tuple" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" } ], - "stateMutability": "view", + "name": "initializeValidator", + "outputs": [], + "stateMutability": "nonpayable", "type": "function" }, { @@ -610,44 +777,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "syncPeriod", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_merkleDistributor", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_syncPeriod", - "type": "uint256" - } - ], - "name": "upgrade", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -657,16 +786,21 @@ }, { "internalType": "bytes32", - "name": "_merkleRoot", + "name": "merkleRoot", "type": "bytes32" }, { "internalType": "string", - "name": "_merkleProofs", + "name": "merkleProofs", "type": "string" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" } ], - "name": "voteForMerkleRoot", + "name": "submitMerkleRoot", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -680,16 +814,41 @@ }, { "internalType": "uint256", - "name": "_totalRewards", + "name": "totalRewards", "type": "uint256" }, { "internalType": "uint256", - "name": "_activatedValidators", + "name": "activatedValidators", "type": "uint256" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" } ], - "name": "voteForRewards", + "name": "submitRewards", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "syncPeriod", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/contracts/Oracles.sol b/contracts/Oracles.sol index 1fe5e7e5..6f9dde2e 100644 --- a/contracts/Oracles.sol +++ b/contracts/Oracles.sol @@ -1,76 +1,87 @@ // SPDX-License-Identifier: AGPL-3.0-only pragma solidity 0.7.5; +pragma abicoder v2; import "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/CountersUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/cryptography/ECDSAUpgradeable.sol"; import "./presets/OwnablePausableUpgradeable.sol"; import "./interfaces/IRewardEthToken.sol"; import "./interfaces/IPool.sol"; import "./interfaces/IOracles.sol"; import "./interfaces/IMerkleDistributor.sol"; +import "./interfaces/IPoolValidators.sol"; + + +interface IAccessControlUpgradeable { + /** + * @dev See {AccessControlUpgradeable-getRoleMemberCount}. + */ + function getRoleMemberCount(bytes32 role) external view returns (uint256); + + /** + * @dev See {AccessControlUpgradeable-getRoleMember}. + */ + function getRoleMember(bytes32 role, uint256 index) external view returns (address); +} /** * @title Oracles * - * @dev Oracles contract stores accounts responsible for submitting off-chain data. + * @dev Oracles contract stores accounts responsible for submitting or update values based on the off-chain data. * The threshold of inputs from different oracles is required to submit the data. */ -contract Oracles is IOracles, ReentrancyGuardUpgradeable, OwnablePausableUpgradeable { +contract Oracles is IOracles, OwnablePausableUpgradeable { using SafeMathUpgradeable for uint256; using CountersUpgradeable for CountersUpgradeable.Counter; bytes32 public constant ORACLE_ROLE = keccak256("ORACLE_ROLE"); - // @dev Defines how often oracles submit data (in blocks). - uint256 public override syncPeriod; - - // @dev Maps candidate ID to the number of votes it has. - mapping(bytes32 => uint256) public override candidates; - - // @dev [Deprecated] List of supported rETH2 Uniswap pairs. - address[] private rewardEthUniswapPairs; - - // @dev Maps vote ID to whether it was submitted or not. - mapping(bytes32 => bool) private submittedVotes; + // @dev Nonce is used to protect from submitting the same vote several times. + CountersUpgradeable.Counter private nonce; // @dev Address of the RewardEthToken contract. IRewardEthToken private rewardEthToken; - // @dev Nonce is used to protect from submitting the same vote several times. - CountersUpgradeable.Counter private nonce; - // @dev Address of the Pool contract. IPool private pool; // @dev Address of the MerkleDistributor contract. IMerkleDistributor private merkleDistributor; - /** - * @dev Modifier for checking whether the caller is an oracle. - */ - modifier onlyOracle() { - require(hasRole(ORACLE_ROLE, msg.sender), "Oracles: access denied"); - _; - } + // @dev Defines how often oracles submit data (in blocks). + uint256 public override syncPeriod; /** - * @dev See {IOracles-upgrade}. + * @dev See {IOracles-initialize}. */ - function upgrade(address _merkleDistributor, uint256 _syncPeriod) external override onlyAdmin whenPaused { - require(address(merkleDistributor) == address(0), "Oracles: already upgraded"); + function initialize( + address _admin, + address _prevOracles, + address _rewardEthToken, + address _pool, + address _merkleDistributor, + uint256 _syncPeriod + ) + external override initializer + { + __OwnablePausableUpgradeable_init(_admin); + + // migrate data from previous Oracles contract + nonce._value = IOracles(_prevOracles).currentNonce(); + uint256 oraclesCount = IAccessControlUpgradeable(_prevOracles).getRoleMemberCount(ORACLE_ROLE); + for(uint256 i = 0; i < oraclesCount; i++) { + address oracle = IAccessControlUpgradeable(_prevOracles).getRoleMember(ORACLE_ROLE, i); + _setupRole(ORACLE_ROLE, oracle); + } + + rewardEthToken = IRewardEthToken(_rewardEthToken); + pool = IPool(_pool); merkleDistributor = IMerkleDistributor(_merkleDistributor); syncPeriod = _syncPeriod; } - /** - * @dev See {IOracles-hasVote}. - */ - function hasVote(address oracle, bytes32 candidateId) external override view returns (bool) { - return submittedVotes[keccak256(abi.encode(oracle, candidateId))]; - } - /** * @dev See {IOracles-currentNonce}. */ @@ -124,91 +135,179 @@ contract Oracles is IOracles, ReentrancyGuardUpgradeable, OwnablePausableUpgrade } /** - * @dev See {IOracles-voteForRewards}. + * @dev See {IOracles-submitRewards}. */ - function voteForRewards( + function submitRewards( uint256 _nonce, - uint256 _totalRewards, - uint256 _activatedValidators + uint256 totalRewards, + uint256 activatedValidators, + bytes[] memory signatures ) - external override onlyOracle whenNotPaused + external override whenNotPaused { require(_nonce == nonce.current(), "Oracles: invalid nonce"); - bytes32 candidateId = keccak256(abi.encode(_nonce, _totalRewards, _activatedValidators)); - bytes32 voteId = keccak256(abi.encode(msg.sender, candidateId)); - require(!submittedVotes[voteId], "Oracles: already voted"); - require(isRewardsVoting(), "Oracles: too early vote"); - - // mark vote as submitted, update candidate votes number - submittedVotes[voteId] = true; - uint256 candidateNewVotes = candidates[candidateId].add(1); - candidates[candidateId] = candidateNewVotes; - emit RewardsVoteSubmitted(msg.sender, _nonce, _totalRewards, _activatedValidators); - - // update only if enough votes accumulated - uint256 oraclesCount = getRoleMemberCount(ORACLE_ROLE); - if (candidateNewVotes.mul(3) > oraclesCount.mul(2)) { - // update total rewards - rewardEthToken.updateTotalRewards(_totalRewards); - - // update activated validators - if (_activatedValidators != pool.activatedValidators()) { - pool.setActivatedValidators(_activatedValidators); + require(isRewardsVoting(), "Oracles: too early"); + require( + signatures.length.mul(3) > getRoleMemberCount(ORACLE_ROLE).mul(2), + "Oracles: invalid number of signatures" + ); + + // calculate candidate ID hash + bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( + keccak256(abi.encode(_nonce, totalRewards, activatedValidators)) + ); + + // check signatures and calculate number of submitted oracle votes + address[] memory signedOracles = new address[](signatures.length); + for (uint256 i = 0; i < signatures.length; i++) { + bytes memory signature = signatures[i]; + address signer = ECDSAUpgradeable.recover(candidateId, signature); + require(hasRole(ORACLE_ROLE, signer), "Oracles: invalid signer"); + + for (uint256 j = 0; j < i; j++) { + require(signedOracles[j] != signer, "Oracles: repeated signature"); } + signedOracles[i] = signer; + emit RewardsVoteSubmitted(signer, _nonce, totalRewards, activatedValidators); + } - // clean up votes - delete submittedVotes[voteId]; - for (uint256 i = 0; i < oraclesCount; i++) { - address oracle = getRoleMember(ORACLE_ROLE, i); - if (oracle == msg.sender) continue; - delete submittedVotes[keccak256(abi.encode(oracle, candidateId))]; - } + // increment nonce for future signatures + nonce.increment(); + + // update total rewards + rewardEthToken.updateTotalRewards(totalRewards); - // clean up candidate - nonce.increment(); - delete candidates[candidateId]; + // update activated validators + if (activatedValidators != pool.activatedValidators()) { + pool.setActivatedValidators(activatedValidators); } } /** - * @dev See {IOracles-voteForMerkleRoot}. + * @dev See {IOracles-submitMerkleRoot}. */ - function voteForMerkleRoot( + function submitMerkleRoot( uint256 _nonce, - bytes32 _merkleRoot, - string calldata _merkleProofs + bytes32 merkleRoot, + string memory merkleProofs, + bytes[] memory signatures ) - external override onlyOracle whenNotPaused + external override whenNotPaused { require(_nonce == nonce.current(), "Oracles: invalid nonce"); - bytes32 candidateId = keccak256(abi.encode(_nonce, _merkleRoot, _merkleProofs)); - bytes32 voteId = keccak256(abi.encode(msg.sender, candidateId)); - require(!submittedVotes[voteId], "Oracles: already voted"); - require(isMerkleRootVoting(), "Oracles: too early vote"); - - // mark vote as submitted, update candidate votes number - submittedVotes[voteId] = true; - uint256 candidateNewVotes = candidates[candidateId].add(1); - candidates[candidateId] = candidateNewVotes; - emit MerkleRootVoteSubmitted(msg.sender, _nonce, _merkleRoot, _merkleProofs); - - // update only if enough votes accumulated - uint256 oraclesCount = getRoleMemberCount(ORACLE_ROLE); - if (candidateNewVotes.mul(3) > oraclesCount.mul(2)) { - // update merkle root - merkleDistributor.setMerkleRoot(_merkleRoot, _merkleProofs); - - // clean up votes - delete submittedVotes[voteId]; - for (uint256 i = 0; i < oraclesCount; i++) { - address oracle = getRoleMember(ORACLE_ROLE, i); - if (oracle == msg.sender) continue; - delete submittedVotes[keccak256(abi.encode(oracle, candidateId))]; + require(isMerkleRootVoting(), "Oracles: too early"); + require( + signatures.length.mul(3) > getRoleMemberCount(ORACLE_ROLE).mul(2), + "Oracles: invalid number of signatures" + ); + + // calculate candidate ID hash + bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( + keccak256(abi.encode(_nonce, merkleRoot, merkleProofs)) + ); + + // check signatures and calculate number of submitted oracle votes + address[] memory signedOracles = new address[](signatures.length); + for (uint256 i = 0; i < signatures.length; i++) { + bytes memory signature = signatures[i]; + address signer = ECDSAUpgradeable.recover(candidateId, signature); + require(hasRole(ORACLE_ROLE, signer), "Oracles: invalid signer"); + + for (uint256 j = 0; j < i; j++) { + require(signedOracles[j] != signer, "Oracles: repeated signature"); } + signedOracles[i] = signer; + emit MerkleRootVoteSubmitted(signer, _nonce, merkleRoot, merkleProofs); + } + + // increment nonce for future signatures + nonce.increment(); + + // update merkle root + merkleDistributor.setMerkleRoot(merkleRoot, merkleProofs); + } - // clean up candidate - nonce.increment(); - delete candidates[candidateId]; + /** + * @dev See {IOracles-initializeValidator}. + */ + function initializeValidator( + uint256 _nonce, + IPoolValidators.Validator memory validator, + bytes[] memory signatures + ) + external override whenNotPaused + { + require(_nonce == nonce.current(), "Oracles: invalid nonce"); + require( + signatures.length.mul(3) > getRoleMemberCount(ORACLE_ROLE).mul(2), + "Oracles: invalid number of signatures" + ); + + // calculate candidate ID hash + bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( + keccak256(abi.encode(_nonce, validator.merkleRoot, validator.index)) + ); + + // check signatures and calculate number of submitted oracle votes + address[] memory signedOracles = new address[](signatures.length); + for (uint256 i = 0; i < signatures.length; i++) { + bytes memory signature = signatures[i]; + address signer = ECDSAUpgradeable.recover(candidateId, signature); + require(hasRole(ORACLE_ROLE, signer), "Oracles: invalid signer"); + + for (uint256 j = 0; j < i; j++) { + require(signedOracles[j] != signer, "Oracles: repeated signature"); + } + signedOracles[i] = signer; + emit InitializeValidatorVoteSubmitted(signer, validator.merkleRoot, validator.index, _nonce); } + + // increment nonce for future signatures + nonce.increment(); + + // initialize validator + pool.initializeValidator(validator); + } + + /** + * @dev See {IOracles-finalizeValidator}. + */ + function finalizeValidator( + uint256 _nonce, + IPoolValidators.Validator memory validator, + bytes[] memory signatures + ) + external override whenNotPaused + { + require(_nonce == nonce.current(), "Oracles: invalid nonce"); + require( + signatures.length.mul(3) > getRoleMemberCount(ORACLE_ROLE).mul(2), + "Oracles: invalid number of signatures" + ); + + // calculate candidate ID hash + bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( + keccak256(abi.encode(_nonce, validator.merkleRoot, validator.index)) + ); + + // check signatures and calculate number of submitted oracle votes + address[] memory signedOracles = new address[](signatures.length); + for (uint256 i = 0; i < signatures.length; i++) { + bytes memory signature = signatures[i]; + address signer = ECDSAUpgradeable.recover(candidateId, signature); + require(hasRole(ORACLE_ROLE, signer), "Oracles: invalid signer"); + + for (uint256 j = 0; j < i; j++) { + require(signedOracles[j] != signer, "Oracles: repeated signature"); + } + signedOracles[i] = signer; + emit FinalizeValidatorVoteSubmitted(signer, validator.merkleRoot, validator.index, _nonce); + } + + // increment nonce for future signatures + nonce.increment(); + + // finalize validator + pool.finalizeValidator(validator); } } diff --git a/contracts/RevenueSharing.sol b/contracts/RevenueSharing.sol index 736fe4f0..362f35c7 100644 --- a/contracts/RevenueSharing.sol +++ b/contracts/RevenueSharing.sol @@ -19,12 +19,6 @@ contract RevenueSharing is IRevenueSharing, OwnablePausableUpgradeable { using SafeCastUpgradeable for uint256; using SafeERC20Upgradeable for IERC20Upgradeable; - // @dev Total number of points (sum of contributed amount * revenue share %). - uint128 public override totalPoints; - - // @dev Current rETH2 reward amount per point. - uint128 public override rewardPerPoint; - // @dev Maps beneficiary address to the reward checkpoint. mapping(address => Checkpoint) public override checkpoints; @@ -37,6 +31,12 @@ contract RevenueSharing is IRevenueSharing, OwnablePausableUpgradeable { // @dev Address of the RewardEthToken contract. IERC20Upgradeable private rewardEthToken; + // @dev Total number of points (sum of contributed amount * revenue share %). + uint128 public override totalPoints; + + // @dev Current rETH2 reward amount per point. + uint128 public override rewardPerPoint; + /** * @dev See {IRevenueSharing-initialize}. */ @@ -255,7 +255,7 @@ contract RevenueSharing is IRevenueSharing, OwnablePausableUpgradeable { uint256 periodReward = totalReward.mul(_totalPoints).div(totalStaked.mul(1e4)); // update reward per point - rewardPerPoint = prevRewardPerPoint.add(periodReward.mul(1e18).div(_totalPoints)).toUint128(); + rewardPerPoint = prevRewardPerPoint.add(periodReward.mul(1e31).div(_totalPoints)).toUint128(); emit RewardsUpdated(msg.sender, periodReward); return periodReward; @@ -270,7 +270,7 @@ contract RevenueSharing is IRevenueSharing, OwnablePausableUpgradeable { internal pure returns (uint256 reward) { if (newRewardPerPoint > prevRewardPerPoint) { - reward = points.mul(newRewardPerPoint.sub(prevRewardPerPoint)).div(1e18); + reward = points.mul(newRewardPerPoint.sub(prevRewardPerPoint)).div(1e31); } if (unclaimedReward > 0) { diff --git a/contracts/interfaces/IOracles.sol b/contracts/interfaces/IOracles.sol index 76734bc5..91e43e36 100644 --- a/contracts/interfaces/IOracles.sol +++ b/contracts/interfaces/IOracles.sol @@ -2,6 +2,9 @@ pragma solidity 0.7.5; +import "./IPoolValidators.sol"; +pragma abicoder v2; + /** * @dev Interface of the Oracles contract. */ @@ -42,10 +45,32 @@ interface IOracles { event SyncPeriodUpdated(uint256 syncPeriod, address indexed sender); /** - * @dev Function for retrieving number of votes of the submission candidate. - * @param _candidateId - ID of the candidate to retrieve number of votes for. + * @dev Event for tracking validator initialization votes. + * @param signer - address of the signed oracle. + * @param merkleRoot - validator initialization merkle root. + * @param index - validator initialization index. + * @param nonce - validator initialization nonce. + */ + event InitializeValidatorVoteSubmitted( + address indexed signer, + bytes32 indexed merkleRoot, + uint256 index, + uint256 nonce + ); + + /** + * @dev Event for tracking validator finalization votes. + * @param signer - address of the signed oracle. + * @param merkleRoot - validator finalization merkle root. + * @param index - validator finalization index. + * @param nonce - validator finalization nonce. */ - function candidates(bytes32 _candidateId) external view returns (uint256); + event FinalizeValidatorVoteSubmitted( + address indexed signer, + bytes32 indexed merkleRoot, + uint256 index, + uint256 nonce + ); /** * @dev Function for retrieving oracles sync period (in blocks). @@ -53,13 +78,22 @@ interface IOracles { function syncPeriod() external view returns (uint256); /** - * @dev Function for upgrading the Oracles contract. - * If deploying contract for the first time, the upgrade function should be replaced with `initialize` - * and contain initializations from all the previous versions. + * @dev Constructor for initializing the Oracles contract. + * @param _admin - address of the contract admin. + * @param _prevOracles - address of the previous Oracles contract. + * @param _rewardEthToken - address of the RewardEthToken contract. + * @param _pool - address of the Pool contract. * @param _merkleDistributor - address of the MerkleDistributor contract. - * @param _syncPeriod - number of blocks to wait before the next sync. + * @param _syncPeriod - oracles sync period (in blocks). */ - function upgrade(address _merkleDistributor, uint256 _syncPeriod) external; + function initialize( + address _admin, + address _prevOracles, + address _rewardEthToken, + address _pool, + address _merkleDistributor, + uint256 _syncPeriod + ) external; /** * @dev Function for checking whether an account has an oracle role. @@ -67,13 +101,6 @@ interface IOracles { */ function isOracle(address _account) external view returns (bool); - /** - * @dev Function for checking whether an oracle has voted. - * @param oracle - oracle address to check. - * @param candidateId - hash of nonce and vote parameters. - */ - function hasVote(address oracle, bytes32 candidateId) external view returns (bool); - /** * @dev Function for checking whether the oracles are currently voting for new total rewards. */ @@ -111,20 +138,58 @@ interface IOracles { function setSyncPeriod(uint256 _syncPeriod) external; /** - * @dev Function for submitting oracle vote for total rewards. The last vote required for quorum will update the values. - * Can only be called by an account with an oracle role. + * @dev Function for submitting oracle vote for total rewards. + * The quorum of signatures over the same data is required to submit the new value. + * @param _nonce - current nonce. + * @param totalRewards - voted total rewards. + * @param activatedValidators - voted amount of activated validators. + * @param signatures - oracles' signatures. + */ + function submitRewards( + uint256 _nonce, + uint256 totalRewards, + uint256 activatedValidators, + bytes[] calldata signatures + ) external; + + /** + * @dev Function for submitting new merkle root. + * The quorum of signatures over the same data is required to submit the new value. * @param _nonce - current nonce. - * @param _totalRewards - voted total rewards. - * @param _activatedValidators - voted amount of activated validators. + * @param merkleRoot - hash of the new merkle root. + * @param merkleProofs - link to the merkle proofs. + * @param signatures - oracles' signatures. */ - function voteForRewards(uint256 _nonce, uint256 _totalRewards, uint256 _activatedValidators) external; + function submitMerkleRoot( + uint256 _nonce, + bytes32 merkleRoot, + string memory merkleProofs, + bytes[] memory signatures + ) external; /** - * @dev Function for submitting oracle vote for merkle root. The last vote required for quorum will update the values. - * Can only be called by an account with an oracle role. + * @dev Function for submitting initializing new validator. + * The quorum of signatures over the same data is required to initialize. * @param _nonce - current nonce. - * @param _merkleRoot - hash of the new merkle root. - * @param _merkleProofs - link to the merkle proofs. + * @param validator - new validator. + * @param signatures - oracles' signatures. */ - function voteForMerkleRoot(uint256 _nonce, bytes32 _merkleRoot, string calldata _merkleProofs) external; + function initializeValidator( + uint256 _nonce, + IPoolValidators.Validator memory validator, + bytes[] memory signatures + ) external; + + /** + * @dev Function for submitting finalizing new validator. + * The quorum of signatures over the same data is required to finalize. + * @param _nonce - current nonce. + * @param validator - new validator. + * @param signatures - oracles' signatures. + */ + function finalizeValidator( + uint256 _nonce, + IPoolValidators.Validator memory validator, + bytes[] memory signatures + ) external; } diff --git a/contracts/mocks/OracleMock.sol b/contracts/mocks/MulticallMock.sol similarity index 53% rename from contracts/mocks/OracleMock.sol rename to contracts/mocks/MulticallMock.sol index e598f0d7..37e35bee 100644 --- a/contracts/mocks/OracleMock.sol +++ b/contracts/mocks/MulticallMock.sol @@ -1,12 +1,26 @@ // SPDX-License-Identifier: AGPL-3.0-only pragma solidity 0.7.5; +pragma abicoder v2; + import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; import "../interfaces/IOracles.sol"; import "../interfaces/IMerkleDistributor.sol"; -contract OracleMock { +contract MulticallMock { + struct OracleRewards { + uint256 totalRewards; + uint256 activatedValidators; + bytes[] signatures; + } + + struct MerkleRoot { + bytes32 merkleRoot; + string merkleProofs; + bytes[] signatures; + } + IOracles private oracles; IERC20Upgradeable private stakedEthToken; IERC20Upgradeable private rewardEthToken; @@ -19,45 +33,32 @@ contract OracleMock { merkleDistributor = IMerkleDistributor(_merkleDistributor); } - function updateTotalRewards(uint256 totalRewards, uint256 activatedValidators) external { - oracles.voteForRewards(oracles.currentNonce(), totalRewards, activatedValidators); - } - - function updateTotalRewardsAndMerkleRoot( + function transferRewardsAndUpdateTotalRewards( uint256 totalRewards, uint256 activatedValidators, - bytes32 merkleRoot, - string calldata merkleProofs + address payee, + bytes[] calldata signatures ) external { - oracles.voteForRewards(oracles.currentNonce(), totalRewards, activatedValidators); - oracles.voteForMerkleRoot(oracles.currentNonce(), merkleRoot, merkleProofs); - } - - function updateTotalRewardsAndTransferRewards(uint256 totalRewards, uint256 activatedValidators, address payee) external { - oracles.voteForRewards(oracles.currentNonce(), totalRewards, activatedValidators); rewardEthToken.transferFrom(msg.sender, payee, rewardEthToken.balanceOf(msg.sender)); + oracles.submitRewards(oracles.currentNonce(), totalRewards, activatedValidators, signatures); } - function transferRewardsAndUpdateTotalRewards(uint256 totalRewards, uint256 activatedValidators, address payee) external { + function updateTotalRewardsAndTransferRewards( + uint256 totalRewards, + uint256 activatedValidators, + address payee, + bytes[] calldata signatures + ) + external + { + oracles.submitRewards(oracles.currentNonce(), totalRewards, activatedValidators, signatures); rewardEthToken.transferFrom(msg.sender, payee, rewardEthToken.balanceOf(msg.sender)); - oracles.voteForRewards(oracles.currentNonce(), totalRewards, activatedValidators); - } - - function updateTotalRewardsAndTransferStakedEth(uint256 totalRewards, uint256 activatedValidators, address payee) external { - oracles.voteForRewards(oracles.currentNonce(), totalRewards, activatedValidators); - stakedEthToken.transferFrom(msg.sender, payee, stakedEthToken.balanceOf(msg.sender)); - } - - function transferStakedEthAndUpdateTotalRewards(uint256 totalRewards, uint256 activatedValidators, address payee) external { - stakedEthToken.transferFrom(msg.sender, payee, stakedEthToken.balanceOf(msg.sender)); - oracles.voteForRewards(oracles.currentNonce(), totalRewards, activatedValidators); } function updateTotalRewardsAndClaim( - uint256 totalRewards, - uint256 activatedValidators, + OracleRewards memory oracleRewards, uint256 index, address account, address[] calldata tokens, @@ -66,13 +67,12 @@ contract OracleMock { ) external { - oracles.voteForRewards(oracles.currentNonce(), totalRewards, activatedValidators); + oracles.submitRewards(oracles.currentNonce(), oracleRewards.totalRewards, oracleRewards.activatedValidators, oracleRewards.signatures); merkleDistributor.claim(index, account, tokens, amounts, merkleProof); } function claimAndUpdateTotalRewards( - uint256 totalRewards, - uint256 activatedValidators, + OracleRewards memory oracleRewards, uint256 index, address account, address[] calldata tokens, @@ -82,38 +82,68 @@ contract OracleMock { external { merkleDistributor.claim(index, account, tokens, amounts, merkleProof); - oracles.voteForRewards(oracles.currentNonce(), totalRewards, activatedValidators); + oracles.submitRewards(oracles.currentNonce(), oracleRewards.totalRewards, oracleRewards.activatedValidators, oracleRewards.signatures); } - function updateMerkleRootAndClaim( - bytes32 merkleRoot, - string calldata merkleProofs, + function claimAndUpdateMerkleRoot( + MerkleRoot memory merkleRoot, uint256 index, address account, address[] calldata tokens, uint256[] calldata amounts, bytes32[] calldata merkleProof - ) external { - oracles.voteForMerkleRoot(oracles.currentNonce(), merkleRoot, merkleProofs); merkleDistributor.claim(index, account, tokens, amounts, merkleProof); + oracles.submitMerkleRoot(oracles.currentNonce(), merkleRoot.merkleRoot, merkleRoot.merkleProofs, merkleRoot.signatures); } - function claimAndUpdateMerkleRoot( - bytes32 merkleRoot, - string calldata merkleProofs, + function updateMerkleRootAndClaim( + MerkleRoot memory merkleRoot, uint256 index, address account, address[] calldata tokens, uint256[] calldata amounts, bytes32[] calldata merkleProof - ) external { + oracles.submitMerkleRoot(oracles.currentNonce(), merkleRoot.merkleRoot, merkleRoot.merkleProofs, merkleRoot.signatures); merkleDistributor.claim(index, account, tokens, amounts, merkleProof); - oracles.voteForMerkleRoot(oracles.currentNonce(), merkleRoot, merkleProofs); + } + + function updateTotalRewardsAndTransferStakedEth( + uint256 totalRewards, + uint256 activatedValidators, + address payee, + bytes[] calldata signatures + ) + external + { + oracles.submitRewards(oracles.currentNonce(), totalRewards, activatedValidators, signatures); + stakedEthToken.transferFrom(msg.sender, payee, stakedEthToken.balanceOf(msg.sender)); + } + + function transferStakedEthAndUpdateTotalRewards( + uint256 totalRewards, + uint256 activatedValidators, + address payee, + bytes[] calldata signatures + ) + external + { + stakedEthToken.transferFrom(msg.sender, payee, stakedEthToken.balanceOf(msg.sender)); + oracles.submitRewards(oracles.currentNonce(), totalRewards, activatedValidators, signatures); + } + + function updateTotalRewardsAndMerkleRoot( + OracleRewards memory oracleRewards, + MerkleRoot memory merkleRoot + ) + external + { + oracles.submitRewards(oracles.currentNonce(), oracleRewards.totalRewards, oracleRewards.activatedValidators, oracleRewards.signatures); + oracles.submitMerkleRoot(oracles.currentNonce(), merkleRoot.merkleRoot, merkleRoot.merkleProofs, merkleRoot.signatures); } } diff --git a/contracts/tokens/RewardEthToken.sol b/contracts/tokens/RewardEthToken.sol index 0de3ddb2..8d5d4875 100644 --- a/contracts/tokens/RewardEthToken.sol +++ b/contracts/tokens/RewardEthToken.sol @@ -197,7 +197,7 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per ) internal pure returns (uint256) { - return currentReward.add(stakedEthAmount.mul(periodRewardPerToken).div(1e18)); + return currentReward.add(stakedEthAmount.mul(periodRewardPerToken).div(1e27)); } /** @@ -226,7 +226,7 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per uint256 protocolReward = periodRewards.mul(protocolFee).div(1e4); uint256 prevRewardPerToken = rewardPerToken; uint256 totalStaked = stakedEthToken.totalDeposits(); - uint256 newRewardPerToken = prevRewardPerToken.add(periodRewards.sub(protocolReward).mul(1e18).div(totalStaked)); + uint256 newRewardPerToken = prevRewardPerToken.add(periodRewards.sub(protocolReward).mul(1e27).div(totalStaked)); uint128 newRewardPerToken128 = newRewardPerToken.toUint128(); // store previous distributor rewards for period reward calculation diff --git a/test/MerkleDistributor.test.js b/test/MerkleDistributor.test.js index 5f0ee738..d2732931 100644 --- a/test/MerkleDistributor.test.js +++ b/test/MerkleDistributor.test.js @@ -74,6 +74,7 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { stakedEthToken, oracles, oracleAccounts, + prevDistributorBalance, pool; after(async () => stopImpersonatingAccount(admin)); @@ -100,6 +101,7 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { accounts: otherAccounts, }); pool = await Pool.at(contracts.pool); + prevDistributorBalance = await token.balanceOf(merkleDistributor.address); }); afterEach(async () => resetFork()); @@ -215,11 +217,24 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { }); expect( await token.balanceOf(merkleDistributor.address) - ).to.bignumber.equal(amount); + ).to.bignumber.equal(prevDistributorBalance.add(amount)); }); }); describe('claim', () => { + beforeEach(async () => { + // new rewards arrive + let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); + await setTotalRewards({ + admin, + rewardEthToken, + oracles, + oracleAccounts, + pool, + totalRewards, + }); + }); + it('cannot claim when contract paused', async () => { const { index, proof, amounts, tokens } = merkleProofs[account1]; await merkleDistributor.pause({ from: admin }); @@ -232,17 +247,6 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { }); it('cannot claim when merkle root updating', async () => { - // new rewards arrive - let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); - await setTotalRewards({ - admin, - rewardEthToken, - oracles, - oracleAccounts, - pool, - totalRewards, - }); - // try to claim before merkle root update const { index, proof, amounts, tokens } = merkleProofs[account1]; await expectRevert( @@ -599,19 +603,16 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { rewardsSignatures ); const { index, amounts, tokens, proof } = merkleProofs[account1]; - await expectRevert( - multicallMock.updateMerkleRootAndClaim( - { merkleRoot, merkleProofs, signatures: merkleRootSignatures }, - index, - account1, - tokens, - amounts, - proof, - { - from: anyone, - } - ), - 'SafeMath: subtraction overflow' + await multicallMock.updateMerkleRootAndClaim( + { merkleRoot, merkleProofs, signatures: merkleRootSignatures }, + index, + account1, + tokens, + amounts, + proof, + { + from: anyone, + } ); }); }); diff --git a/test/RevenueSharing.test.js b/test/RevenueSharing.test.js index 806a24ef..66dd1c2a 100644 --- a/test/RevenueSharing.test.js +++ b/test/RevenueSharing.test.js @@ -459,7 +459,7 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { }); const reward = receipt.logs[0].args.reward; expect(reward).to.bignumber.greaterThan(new BN(0)); - expect(reward).to.bignumber.lessThan(revenueCut); + expect(reward).to.bignumber.equal(revenueCut); expect(await revenueSharing.rewardOf(beneficiary)).to.bignumber.equal( new BN(0) ); diff --git a/test/oracles/Oracles.test.js b/test/oracles/Oracles.test.js index 1ec9bad7..8057b10a 100644 --- a/test/oracles/Oracles.test.js +++ b/test/oracles/Oracles.test.js @@ -6,15 +6,14 @@ const { ether, BN, send, - time, } = require('@openzeppelin/test-helpers'); const { impersonateAccount, stopImpersonatingAccount, resetFork, - getOracleAccounts, - setMerkleRoot, + setupOracleAccounts, setTotalRewards, + enableRewardsVoting, } = require('../utils'); const { contractSettings, contracts } = require('../../deployments/settings'); const { upgradeContracts } = require('../../deployments'); @@ -22,13 +21,13 @@ const { upgradeContracts } = require('../../deployments'); const RewardEthToken = artifacts.require('RewardEthToken'); const Oracles = artifacts.require('Oracles'); const Pool = artifacts.require('Pool'); +const MulticallMock = artifacts.require('MulticallMock'); const MerkleDistributor = artifacts.require('MerkleDistributor'); -const OracleMock = artifacts.require('OracleMock'); -contract('Oracles', ([_, ...accounts]) => { +contract('Oracles', ([_, anyone, ...accounts]) => { let admin = contractSettings.admin; let oracles, rewardEthToken, pool, merkleDistributor; - let [oracle, anotherOracle, anyone] = accounts; + let [oracle, anotherOracle] = accounts; after(async () => stopImpersonatingAccount(admin)); @@ -38,12 +37,10 @@ contract('Oracles', ([_, ...accounts]) => { let upgradedContracts = await upgradeContracts(); - oracles = await Oracles.at(contracts.oracles); + oracles = await Oracles.at(upgradedContracts.oracles); pool = await Pool.at(contracts.pool); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); - merkleDistributor = await MerkleDistributor.at( - upgradedContracts.merkleDistributor - ); + merkleDistributor = await MerkleDistributor.at(contracts.merkleDistributor); }); afterEach(async () => resetFork()); @@ -148,20 +145,13 @@ contract('Oracles', ([_, ...accounts]) => { }); it('cannot update oracles sync period when voting for rewards', async () => { - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo(lastUpdateBlockNumber.add(newSyncPeriod)); - + await enableRewardsVoting({ rewardEthToken, admin, oracles }); await expectRevert( oracles.setSyncPeriod(new BN('900'), { from: admin, }), 'Oracles: cannot update during voting' ); - expect(await oracles.syncPeriod()).bignumber.equal(newSyncPeriod); }); }); @@ -169,44 +159,46 @@ contract('Oracles', ([_, ...accounts]) => { let prevTotalRewards, newTotalRewards, currentNonce, - pendingValidators, - activatedValidators, + newActivatedValidators, oracleAccounts, - candidateId; + candidateId, + signatures; beforeEach(async () => { - oracleAccounts = await getOracleAccounts({ oracles }); - for (const oracleAccount of oracleAccounts) { - await send.ether(anyone, oracleAccount, ether('2')); - } - + oracleAccounts = await setupOracleAccounts({ oracles, accounts, admin }); prevTotalRewards = await rewardEthToken.totalRewards(); newTotalRewards = prevTotalRewards.add(ether('10')); currentNonce = await oracles.currentNonce(); - - activatedValidators = new BN(contractSettings.activatedValidators); - pendingValidators = new BN(contractSettings.pendingValidators); + newActivatedValidators = (await pool.activatedValidators()).add( + await pool.pendingValidators() + ); let encoded = defaultAbiCoder.encode( ['uint256', 'uint256', 'uint256'], [ currentNonce.toString(), newTotalRewards.toString(), - activatedValidators.toString(), + newActivatedValidators.toString(), ] ); candidateId = keccak256(encoded); + + signatures = []; + for (const oracleAccount of oracleAccounts) { + signatures.push(await web3.eth.sign(candidateId, oracleAccount)); + } }); - it('fails to vote when contract is paused', async () => { + it('fails to submit when contract is paused', async () => { await oracles.pause({ from: admin }); expect(await oracles.paused()).equal(true); await expectRevert( - oracles.voteForRewards( + oracles.submitRewards( currentNonce, newTotalRewards, - activatedValidators, + newActivatedValidators, + signatures, { from: oracleAccounts[0], } @@ -215,251 +207,132 @@ contract('Oracles', ([_, ...accounts]) => { ); }); - it('only oracle can submit vote', async () => { - await expectRevert( - oracles.voteForRewards( - currentNonce, - newTotalRewards, - activatedValidators, - { - from: anyone, - } - ), - 'Oracles: access denied' - ); - }); - - it('cannot vote twice', async () => { - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) - ); - - await oracles.voteForRewards( + it('fails to submit twice', async () => { + await enableRewardsVoting({ rewardEthToken, admin, oracles }); + await oracles.submitRewards( currentNonce, newTotalRewards, - activatedValidators, + newActivatedValidators, + signatures, { from: oracleAccounts[0], } ); - expect(await oracles.hasVote(oracleAccounts[0], candidateId)).to.equal( - true - ); - await expectRevert( - oracles.voteForRewards( + oracles.submitRewards( currentNonce, newTotalRewards, - activatedValidators, + newActivatedValidators, + signatures, { from: oracleAccounts[0], } ), - 'Oracles: already voted' + 'Oracles: invalid nonce' ); }); - it('cannot vote too early', async () => { + it('fails to submit too early', async () => { await expectRevert( - oracles.voteForRewards( + oracles.submitRewards( currentNonce, newTotalRewards, - activatedValidators, + newActivatedValidators, + signatures, { from: oracleAccounts[0], } ), - 'Oracles: too early vote' + 'Oracles: too early' ); }); - it('does not submit new data when not enough votes', async () => { - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) - ); - - const receipt = await oracles.voteForRewards( - currentNonce, - newTotalRewards, - activatedValidators, - { - from: oracleAccounts[0], - } - ); - expectEvent(receipt, 'RewardsVoteSubmitted', { - oracle: oracleAccounts[0], - totalRewards: newTotalRewards, - activatedValidators, - nonce: currentNonce, - }); - expect(await oracles.hasVote(oracleAccounts[0], candidateId)).to.equal( - true - ); - expect(await rewardEthToken.totalRewards()).to.bignumber.equal( - prevTotalRewards - ); - expect(await pool.activatedValidators()).to.bignumber.equal( - new BN(activatedValidators) - ); - expect(await pool.pendingValidators()).to.bignumber.equal( - pendingValidators + it('fails to submit with not enough signatures', async () => { + await enableRewardsVoting({ rewardEthToken, admin, oracles }); + await expectRevert( + oracles.submitRewards( + currentNonce, + newTotalRewards, + newActivatedValidators, + signatures.slice(signatures.length - 1), + { + from: oracleAccounts[0], + } + ), + 'Oracles: invalid number of signatures' ); }); - it('submits data when enough votes collected', async () => { - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) - ); - - let newActivatedValidators = activatedValidators.add(pendingValidators); - let encoded = defaultAbiCoder.encode( - ['uint256', 'uint256', 'uint256'], - [ - currentNonce.toString(), - newTotalRewards.toString(), - newActivatedValidators.toString(), - ] - ); - let candidateId = keccak256(encoded); - - for (let i = 0; i < oracleAccounts.length; i++) { - let receipt = await oracles.voteForRewards( + it('fails to submit with invalid signature', async () => { + await enableRewardsVoting({ rewardEthToken, admin, oracles }); + signatures[0] = await web3.eth.sign(candidateId, anyone); + await expectRevert( + oracles.submitRewards( currentNonce, newTotalRewards, newActivatedValidators, + signatures, { - from: oracleAccounts[i], + from: oracleAccounts[0], } - ); - if (!prevTotalRewards.eq(await rewardEthToken.totalRewards())) { - // data submitted - break; - } - expect(await oracles.hasVote(oracleAccounts[i], candidateId)).to.equal( - true - ); - expectEvent(receipt, 'RewardsVoteSubmitted', { - oracle: oracleAccounts[i], - totalRewards: newTotalRewards, - activatedValidators: newActivatedValidators, - nonce: currentNonce, - }); - } - - // update submitted - expect(await rewardEthToken.totalRewards()).to.bignumber.equal( - newTotalRewards - ); - expect(await pool.activatedValidators()).to.bignumber.equal( - newActivatedValidators + ), + 'Oracles: invalid signer' ); - expect(await pool.pendingValidators()).to.bignumber.equal(new BN(0)); - - lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo(lastUpdateBlockNumber.add(newSyncPeriod)); + }); - // nonce has incremented + it('fails to submit with repeated signature', async () => { + await enableRewardsVoting({ rewardEthToken, admin, oracles }); + signatures.push(signatures[0]); await expectRevert( - oracles.voteForRewards( + oracles.submitRewards( currentNonce, newTotalRewards, - activatedValidators, + newActivatedValidators, + signatures, { from: oracleAccounts[0], } ), - 'Oracles: invalid nonce' + 'Oracles: repeated signature' ); + }); - // new vote comes with different nonce - let receipt = await oracles.voteForRewards( - currentNonce.add(new BN(1)), + it('submits data with enough signatures', async () => { + await enableRewardsVoting({ rewardEthToken, admin, oracles }); + let receipt = await oracles.submitRewards( + currentNonce, newTotalRewards, newActivatedValidators, + signatures, { from: oracleAccounts[0], } ); - // previous vote cleaned up - expect(await oracles.hasVote(oracleAccounts[0], candidateId)).to.equal( - false - ); - encoded = defaultAbiCoder.encode( - ['uint256', 'uint256', 'uint256'], - [ - currentNonce.add(new BN(1)).toString(), - newTotalRewards.toString(), - newActivatedValidators.toString(), - ] - ); - let candidateId2 = keccak256(encoded); - - // new vote comes with an increased vote ID - expect(await oracles.hasVote(oracleAccounts[0], candidateId2)).to.equal( - true - ); - expectEvent(receipt, 'RewardsVoteSubmitted', { - oracle: oracleAccounts[0], - totalRewards: newTotalRewards, - activatedValidators: newActivatedValidators, - nonce: currentNonce.add(new BN(1)), - }); - }); + // check signatures + for (const oracleAccount of oracleAccounts) { + expectEvent(receipt, 'RewardsVoteSubmitted', { + oracle: oracleAccount, + totalRewards: newTotalRewards, + activatedValidators: newActivatedValidators, + nonce: currentNonce, + }); + } - it('does not update activation data when did not change', async () => { - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) + // check values updates + expect(await rewardEthToken.totalRewards()).to.bignumber.equal( + newTotalRewards ); - activatedValidators = new BN(contractSettings.activatedValidators); - pendingValidators = await pool.pendingValidators(); - - for (let i = 0; i < oracleAccounts.length; i++) { - await oracles.voteForRewards( - currentNonce, - newTotalRewards, - activatedValidators, - { - from: oracleAccounts[i], - } - ); - if (!prevTotalRewards.eq(await rewardEthToken.totalRewards())) { - // data submitted - break; - } - } // update submitted expect(await rewardEthToken.totalRewards()).to.bignumber.equal( newTotalRewards ); expect(await pool.activatedValidators()).to.bignumber.equal( - activatedValidators - ); - expect(await pool.pendingValidators()).to.bignumber.equal( - pendingValidators + newActivatedValidators ); + expect(await pool.pendingValidators()).to.bignumber.equal(new BN(0)); }); }); @@ -468,235 +341,243 @@ contract('Oracles', ([_, ...accounts]) => { '0xa3e724fce28a564a7908e40994bd8f48ed4470ffcab4c135fe661bcf5b15afe6'; const merkleProofs = 'ipfs://QmehR8yCaKdHqHSxZMSJA5q2SWc8jTVCSKuVgbtqDEdXCH'; - let currentNonce, oracleAccounts, candidateId; + let currentNonce, oracleAccounts, candidateId, signatures; beforeEach(async () => { - oracleAccounts = await getOracleAccounts({ oracles }); - for (const oracleAccount of oracleAccounts) { - await send.ether(anyone, oracleAccount, ether('2')); - } + let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); + oracleAccounts = await setupOracleAccounts({ oracles, accounts, admin }); + await setTotalRewards({ + admin, + rewardEthToken, + oracles, + oracleAccounts, + pool, + totalRewards, + }); + currentNonce = await oracles.currentNonce(); + let encoded = defaultAbiCoder.encode( ['uint256', 'bytes32', 'string'], - [currentNonce.toString(), merkleRoot, merkleProofs] + [ + currentNonce.toString(), + merkleRoot.toString(), + merkleProofs.toString(), + ] ); candidateId = keccak256(encoded); + + signatures = []; + for (const oracleAccount of oracleAccounts) { + signatures.push(await web3.eth.sign(candidateId, oracleAccount)); + } }); - it('fails to vote when contract is paused', async () => { + it('fails to submit when contract is paused', async () => { await oracles.pause({ from: admin }); expect(await oracles.paused()).equal(true); await expectRevert( - oracles.voteForMerkleRoot(currentNonce, merkleRoot, merkleProofs, { - from: oracleAccounts[0], - }), + oracles.submitMerkleRoot( + currentNonce, + merkleRoot, + merkleProofs, + signatures, + { + from: oracleAccounts[0], + } + ), 'Pausable: paused' ); }); - it('only oracle can submit vote', async () => { + it('fails to submit twice', async () => { + await oracles.submitMerkleRoot( + currentNonce, + merkleRoot, + merkleProofs, + signatures, + { + from: oracleAccounts[0], + } + ); + await expectRevert( - oracles.voteForMerkleRoot(currentNonce, merkleRoot, merkleProofs, { - from: anyone, - }), - 'Oracles: access denied' + oracles.submitMerkleRoot( + currentNonce, + merkleRoot, + merkleProofs, + signatures, + { + from: oracleAccounts[0], + } + ), + 'Oracles: invalid nonce' ); }); - it('cannot vote twice', async () => { - await oracles.voteForMerkleRoot(currentNonce, merkleRoot, merkleProofs, { - from: oracleAccounts[0], - }); - - let encoded = defaultAbiCoder.encode( - ['uint256', 'bytes32', 'string'], - [currentNonce.toString(), merkleRoot, merkleProofs] - ); - let candidateId = keccak256(encoded); - expect(await oracles.hasVote(oracleAccounts[0], candidateId)).to.equal( - true + it('fails to submit too early', async () => { + await oracles.submitMerkleRoot( + currentNonce, + merkleRoot, + merkleProofs, + signatures, + { + from: oracleAccounts[0], + } ); await expectRevert( - oracles.voteForMerkleRoot(currentNonce, merkleRoot, merkleProofs, { - from: oracleAccounts[0], - }), - 'Oracles: already voted' + oracles.submitMerkleRoot( + currentNonce.add(new BN(1)), + merkleRoot, + merkleProofs, + signatures, + { + from: oracleAccounts[0], + } + ), + 'Oracles: too early' ); }); - it('fails to vote for total rewards and merkle root in same block', async () => { - // clean up oracles - for (let i = 0; i < oracleAccounts.length; i++) { - await oracles.removeOracle(oracleAccounts[i], { - from: admin, - }); - } - - // deploy mocked oracle - let mockedOracle = await OracleMock.new( - contracts.oracles, - contracts.stakedEthToken, - contracts.rewardEthToken, - merkleDistributor.address - ); - await oracles.addOracle(mockedOracle.address, { - from: admin, - }); - - // wait for rewards voting time - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) + it('fails to submit with not enough signatures', async () => { + await expectRevert( + oracles.submitMerkleRoot( + currentNonce, + merkleRoot, + merkleProofs, + signatures.slice(signatures.length - 1), + { + from: oracleAccounts[0], + } + ), + 'Oracles: invalid number of signatures' ); + }); - let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); - let activatedValidators = await pool.activatedValidators(); - + it('fails to submit with invalid signature', async () => { + signatures[0] = await web3.eth.sign(candidateId, anyone); await expectRevert( - mockedOracle.updateTotalRewardsAndMerkleRoot( - totalRewards, - activatedValidators, + oracles.submitMerkleRoot( + currentNonce, merkleRoot, merkleProofs, + signatures, { - from: anyone, + from: oracleAccounts[0], } ), - 'Oracles: too early vote' + 'Oracles: invalid signer' ); }); - it('cannot vote too early', async () => { - await setMerkleRoot({ - merkleDistributor, - merkleRoot, - merkleProofs, - oracles, - oracleAccounts, - }); - + it('fails to submit with repeated signature', async () => { + signatures.push(signatures[0]); await expectRevert( - oracles.voteForMerkleRoot( - currentNonce.add(new BN(1)), + oracles.submitMerkleRoot( + currentNonce, merkleRoot, merkleProofs, + signatures, { from: oracleAccounts[0], } ), - 'Oracles: too early vote' + 'Oracles: repeated signature' ); }); - it('does not submit new data when not enough votes', async () => { - const receipt = await oracles.voteForMerkleRoot( + it('submits data with enough signatures', async () => { + let receipt = await oracles.submitMerkleRoot( currentNonce, merkleRoot, merkleProofs, + signatures, { from: oracleAccounts[0], } ); - expectEvent(receipt, 'MerkleRootVoteSubmitted', { - oracle: oracleAccounts[0], - merkleRoot, - merkleProofs, - nonce: currentNonce, - }); - let encoded = defaultAbiCoder.encode( - ['uint256', 'bytes32', 'string'], - [currentNonce.toString(), merkleRoot, merkleProofs] - ); - let candidateId = keccak256(encoded); - expect(await oracles.hasVote(oracleAccounts[0], candidateId)).to.equal( - true - ); - expect(await merkleDistributor.merkleRoot()).to.not.equal(merkleRoot); - }); - - it('submits data when enough votes collected', async () => { - for (let i = 0; i < oracleAccounts.length; i++) { - let receipt = await oracles.voteForMerkleRoot( - currentNonce, - merkleRoot, - merkleProofs, - { - from: oracleAccounts[i], - } - ); - if ((await merkleDistributor.merkleRoot()) === merkleRoot) { - break; - } - - expect(await oracles.hasVote(oracleAccounts[i], candidateId)).to.equal( - true - ); + // check signatures + for (const oracleAccount of oracleAccounts) { expectEvent(receipt, 'MerkleRootVoteSubmitted', { - oracle: oracleAccounts[i], + oracle: oracleAccount, merkleRoot, merkleProofs, nonce: currentNonce, }); } - // update submitted - expect(await merkleDistributor.merkleRoot()).to.equal(merkleRoot); + // check values updates + expect(await merkleDistributor.merkleRoot()).equal(merkleRoot); + }); - // nonce has incremented - await expectRevert( - oracles.voteForMerkleRoot(currentNonce, merkleRoot, merkleProofs, { - from: oracleAccounts[0], - }), - 'Oracles: invalid nonce' + it('fails to vote for total rewards and merkle root in same block', async () => { + // clean up oracles + for (let i = 1; i < oracleAccounts.length; i++) { + await oracles.removeOracle(oracleAccounts[i], { + from: admin, + }); + } + + // deploy mocked oracle + let mockedOracle = await MulticallMock.new( + oracles.address, + contracts.stakedEthToken, + contracts.rewardEthToken, + merkleDistributor.address ); let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); - await setTotalRewards({ - admin, - rewardEthToken, - oracles, - oracleAccounts, - pool, - totalRewards, - }); + let activatedValidators = await pool.activatedValidators(); - // new vote comes with different nonce - let receipt = await oracles.voteForMerkleRoot( - currentNonce.add(new BN(2)), - merkleRoot, - merkleProofs, - { - from: oracleAccounts[0], - } + // create rewards signatures + let currentNonce = await oracles.currentNonce(); + let encoded = defaultAbiCoder.encode( + ['uint256', 'uint256', 'uint256'], + [ + currentNonce.toString(), + totalRewards.toString(), + activatedValidators.toString(), + ] ); + candidateId = keccak256(encoded); - // previous vote cleaned up - expect(await oracles.hasVote(oracleAccounts[0], candidateId)).to.equal( - false - ); - let encoded = defaultAbiCoder.encode( + let rewardsSignatures = [ + await web3.eth.sign(candidateId, oracleAccounts[0]), + ]; + + // create merkle root signatures + currentNonce = await oracles.currentNonce(); + encoded = defaultAbiCoder.encode( ['uint256', 'bytes32', 'string'], - [currentNonce.add(new BN(2)).toString(), merkleRoot, merkleProofs] + [currentNonce.toString(), merkleRoot, merkleProofs] ); - let candidateId2 = keccak256(encoded); + candidateId = keccak256(encoded); + + let merkleRootSignatures = [ + await web3.eth.sign(candidateId, oracleAccounts[0]), + ]; - // new vote comes with an increased vote ID - expect(await oracles.hasVote(oracleAccounts[0], candidateId2)).to.equal( - true + await expectRevert( + mockedOracle.updateTotalRewardsAndMerkleRoot( + { + totalRewards: totalRewards.toString(), + activatedValidators: activatedValidators.toString(), + signatures: rewardsSignatures, + }, + { + merkleRoot, + merkleProofs, + signatures: merkleRootSignatures, + }, + { + from: anyone, + } + ), + 'Oracles: too early' ); - expectEvent(receipt, 'MerkleRootVoteSubmitted', { - oracle: oracleAccounts[0], - merkleRoot, - merkleProofs, - nonce: currentNonce.add(new BN(2)), - }); }); }); }); diff --git a/test/oracles/upgrading.test.js b/test/oracles/upgrading.test.js index ba899ed2..d0744de8 100644 --- a/test/oracles/upgrading.test.js +++ b/test/oracles/upgrading.test.js @@ -1,4 +1,4 @@ -const { expectRevert, send, ether } = require('@openzeppelin/test-helpers'); +const { send, ether } = require('@openzeppelin/test-helpers'); const { contractSettings, contracts } = require('../../deployments/settings'); const { upgradeContracts } = require('../../deployments'); const { @@ -11,45 +11,38 @@ const Oracles = artifacts.require('Oracles'); contract('Oracles (upgrading)', ([anyone]) => { let admin = contractSettings.admin; - let oracles, merkleDistributor; + let oracles; after(async () => stopImpersonatingAccount(admin)); beforeEach(async () => { await impersonateAccount(admin); await send.ether(anyone, admin, ether('5')); - - oracles = await Oracles.at(contracts.oracles); - ({ merkleDistributor } = await upgradeContracts()); + let upgradedContracts = await upgradeContracts(); + oracles = await Oracles.at(upgradedContracts.oracles); }); afterEach(async () => resetFork()); - it('fails to upgrade with not admin privilege', async () => { - await expectRevert( - oracles.upgrade(merkleDistributor, contractSettings.syncPeriod, { - from: anyone, - }), - 'OwnablePausable: access denied' + it('initializes with values from previous contract', async () => { + let prevOracles = await Oracles.at(contracts.oracles); + expect(await prevOracles.currentNonce()).to.bignumber.equal( + await oracles.currentNonce() ); - }); - it('fails to upgrade when not paused', async () => { - await expectRevert( - oracles.upgrade(merkleDistributor, contractSettings.syncPeriod, { - from: admin, - }), - 'Pausable: not paused' + let oraclesRole = await oracles.ORACLE_ROLE(); + let totalOracles = await oracles.getRoleMemberCount(oraclesRole); + expect(await oracles.syncPeriod()).to.bignumber.equal( + contractSettings.syncPeriod ); - }); - - it('fails to upgrade twice', async () => { - await oracles.pause({ from: admin }); - await expectRevert( - oracles.upgrade(merkleDistributor, contractSettings.syncPeriod, { - from: admin, - }), - 'Oracles: already upgraded' + expect(totalOracles).to.bignumber.equal( + await prevOracles.getRoleMemberCount(oraclesRole) ); + + for (let i = 0; i < totalOracles.toNumber(); i++) { + let oldOracle = await prevOracles.getRoleMember(oraclesRole, i); + let newOracle = await oracles.getRoleMember(oraclesRole, i); + expect(oldOracle).to.equal(newOracle); + } }); }); diff --git a/test/pool/settings.test.js b/test/pool/settings.test.js index 95e540d6..9de7d33c 100644 --- a/test/pool/settings.test.js +++ b/test/pool/settings.test.js @@ -11,7 +11,7 @@ const { impersonateAccount, resetFork, setActivatedValidators, - getOracleAccounts, + setupOracleAccounts, } = require('../utils'); const { validatorParams } = require('./validatorParams'); const { upgradeContracts } = require('../../deployments'); @@ -25,7 +25,7 @@ const RewardEthToken = artifacts.require('RewardEthToken'); const withdrawalCredentials = '0x0072ea0cf49536e3c66c787f705186df9a4378083753ae9536d65b3ad7fcddc4'; -contract('Pool (settings)', ([operator, anyone]) => { +contract('Pool (settings)', ([operator, anyone, ...otherAccounts]) => { const admin = contractSettings.admin; let pool, oracles, oracleAccounts, rewardEthToken; @@ -34,14 +34,18 @@ contract('Pool (settings)', ([operator, anyone]) => { beforeEach(async () => { await impersonateAccount(admin); await send.ether(anyone, admin, ether('5')); - await upgradeContracts(); + let upgradedContracts = await upgradeContracts(); pool = await Pool.at(contracts.pool); let validators = await Validators.at(contracts.validators); await validators.addOperator(operator, { from: admin }); - oracles = await Oracles.at(contracts.oracles); - oracleAccounts = await getOracleAccounts({ oracles }); + oracles = await Oracles.at(upgradedContracts.oracles); + oracleAccounts = await setupOracleAccounts({ + oracles, + admin, + accounts: otherAccounts, + }); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); }); diff --git a/test/tokens/RewardEthToken.test.js b/test/tokens/RewardEthToken.test.js index 4b29811d..651a8d17 100644 --- a/test/tokens/RewardEthToken.test.js +++ b/test/tokens/RewardEthToken.test.js @@ -7,7 +7,6 @@ const { ether, constants, send, - time, } = require('@openzeppelin/test-helpers'); const { upgradeContracts } = require('../../deployments'); const { contractSettings } = require('../../deployments/settings'); @@ -18,6 +17,7 @@ const { checkRewardEthToken, setTotalRewards, setupOracleAccounts, + enableRewardsVoting, } = require('../utils'); const StakedEthToken = artifacts.require('StakedEthToken'); @@ -281,9 +281,9 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { periodReward ); - for (const revenueSharing of [ - operatorsRevenueSharing, - partnersRevenueSharing, + for (const [revenueSharing, revenueCut] of [ + [operatorsRevenueSharing, operatorsRevenueCut], + [partnersRevenueSharing, partnersRevenueCut], ]) { let receipt = await revenueSharing.collectRewards( [beneficiary1, beneficiary2], @@ -313,7 +313,7 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { expect(await revenueSharing.rewardOf(beneficiary2)).to.bignumber.equal( new BN(0) ); - expect(reward1.add(reward2)).to.bignumber.lessThan(operatorsRevenueCut); + expect(reward1.add(reward2)).to.bignumber.lessThan(revenueCut); expect(reward2).to.bignumber.greaterThan(reward1); } @@ -504,15 +504,7 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { }); // wait for rewards voting time - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) - ); - + await enableRewardsVoting({ rewardEthToken, admin, oracles }); let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); let activatedValidators = await pool.activatedValidators(); @@ -563,15 +555,7 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { }); // wait for rewards voting time - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) - ); - + await enableRewardsVoting({ rewardEthToken, admin, oracles }); let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); let activatedValidators = await pool.activatedValidators(); diff --git a/test/tokens/StakedEthToken.test.js b/test/tokens/StakedEthToken.test.js index 14496b4e..42546b34 100644 --- a/test/tokens/StakedEthToken.test.js +++ b/test/tokens/StakedEthToken.test.js @@ -7,7 +7,6 @@ const { ether, constants, send, - time, } = require('@openzeppelin/test-helpers'); const { impersonateAccount, @@ -16,6 +15,7 @@ const { checkStakedEthToken, setupOracleAccounts, setTotalRewards, + enableRewardsVoting, } = require('../utils'); const { upgradeContracts } = require('../../deployments'); const { contractSettings, contracts } = require('../../deployments/settings'); @@ -94,6 +94,7 @@ contract('StakedEthToken', (accounts) => { it('updates distributor principal when deposited by account with disabled rewards', async () => { // disable rewards + let prevPrincipal = await stakedEthToken.distributorPrincipal(); await stakedEthToken.toggleRewards(sender1, true, { from: admin }); let amount = ether('10'); let receipt = await pool.stake(sender1, { @@ -106,13 +107,14 @@ contract('StakedEthToken', (accounts) => { value: amount, }); expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - amount + prevPrincipal.add(amount) ); }); }); describe('transfer', () => { let value = ether('10'); + let distributorPrincipal; beforeEach(async () => { await pool.setMinActivatingDeposit(value.add(ether('1')), { @@ -123,6 +125,7 @@ contract('StakedEthToken', (accounts) => { value, }); totalSupply = totalSupply.add(value); + distributorPrincipal = await stakedEthToken.distributorPrincipal(); }); it('cannot transfer to zero address', async () => { @@ -305,7 +308,7 @@ contract('StakedEthToken', (accounts) => { balance: value, }); expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - value + distributorPrincipal.add(value) ); }); @@ -335,7 +338,7 @@ contract('StakedEthToken', (accounts) => { balance: value, }); expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - new BN(0) + distributorPrincipal ); }); @@ -366,7 +369,7 @@ contract('StakedEthToken', (accounts) => { balance: value, }); expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - value + distributorPrincipal.add(value) ); }); @@ -391,15 +394,7 @@ contract('StakedEthToken', (accounts) => { }); // wait for rewards voting time - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) - ); - + await enableRewardsVoting({ rewardEthToken, admin, oracles }); await expectRevert( multicallMock.updateTotalRewardsAndTransferStakedEth( totalRewards, @@ -435,15 +430,7 @@ contract('StakedEthToken', (accounts) => { }); // wait for rewards voting time - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) - ); - + await enableRewardsVoting({ rewardEthToken, admin, oracles }); let receipt = await multicallMock.transferStakedEthAndUpdateTotalRewards( totalRewards, activatedValidators, diff --git a/test/tokens/toggleRewards.test.js b/test/tokens/toggleRewards.test.js index fa8f866f..46bc7311 100644 --- a/test/tokens/toggleRewards.test.js +++ b/test/tokens/toggleRewards.test.js @@ -23,7 +23,13 @@ const StakedEthToken = artifacts.require('StakedEthToken'); contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { let admin = contractSettings.admin; - let oracles, rewardEthToken, stakedEthToken, pool, oracleAccounts; + let oracles, + rewardEthToken, + stakedEthToken, + distributorReward, + pool, + oracleAccounts, + distributorPrincipal; let [account, anyone] = accounts; after(async () => stopImpersonatingAccount(admin)); @@ -38,6 +44,8 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); stakedEthToken = await StakedEthToken.at(contracts.stakedEthToken); oracleAccounts = await setupOracleAccounts({ oracles, admin, accounts }); + distributorPrincipal = await stakedEthToken.distributorPrincipal(); + distributorReward = await rewardEthToken.balanceOf(constants.ZERO_ADDRESS); }); afterEach(async () => resetFork()); @@ -92,7 +100,7 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { } ); expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - deposit + distributorPrincipal.add(deposit) ); receipt = await stakedEthToken.toggleRewards(account, false, { @@ -108,7 +116,7 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { } ); expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - new BN(0) + distributorPrincipal ); }); @@ -132,11 +140,11 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { // distributor principal updated expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - deposit + distributorPrincipal.add(deposit) ); expect( await rewardEthToken.balanceOf(constants.ZERO_ADDRESS) - ).to.be.bignumber.equal(new BN(0)); + ).to.be.bignumber.equal(distributorReward); // mint sETH2 for normal account await pool.stake(anyone, { @@ -175,11 +183,11 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { // check distributor balance expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - deposit + distributorPrincipal.add(deposit) ); expect( await rewardEthToken.balanceOf(constants.ZERO_ADDRESS) - ).to.be.bignumber.equal(balance); + ).to.be.bignumber.greaterThan(distributorReward); // check normal account balance expect(await stakedEthToken.balanceOf(anyone)).to.be.bignumber.equal( @@ -241,13 +249,16 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { let periodReward = await rewardEthToken.balanceOf(account); expect(periodReward).to.be.bignumber.greaterThan(new BN(0)); - // check distributor has no balance and reward + // check distributor reward arrived as usual expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - new BN(0) + distributorPrincipal + ); + let newDistributorReward = await rewardEthToken.balanceOf( + constants.ZERO_ADDRESS + ); + expect(newDistributorReward).to.be.bignumber.greaterThan( + distributorReward ); - expect( - await rewardEthToken.balanceOf(constants.ZERO_ADDRESS) - ).to.be.bignumber.equal(new BN(0)); // disable rewards await stakedEthToken.toggleRewards(account, true, { @@ -272,11 +283,11 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { // check distributor balance updated, reward didn't change expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - deposit + distributorPrincipal.add(deposit) ); expect( await rewardEthToken.balanceOf(constants.ZERO_ADDRESS) - ).to.be.bignumber.equal(new BN(0)); + ).to.be.bignumber.equal(newDistributorReward); // next rewards arrive totalRewards = totalRewards.add(ether('10')); @@ -307,11 +318,14 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { // check distributor balance didn't change, reward updated expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - deposit + distributorPrincipal.add(deposit) ); expect( await rewardEthToken.balanceOf(constants.ZERO_ADDRESS) - ).to.be.bignumber.equal(periodReward); + ).to.be.bignumber.greaterThan(newDistributorReward); + newDistributorReward = await rewardEthToken.balanceOf( + constants.ZERO_ADDRESS + ); // re-enable rewards await stakedEthToken.toggleRewards(account, false, { @@ -336,46 +350,11 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { // check distributor balance updated, reward didnt' change expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - new BN(0) - ); - expect( - await rewardEthToken.balanceOf(constants.ZERO_ADDRESS) - ).to.be.bignumber.equal(periodReward); - - // next rewards arrive - totalRewards = totalRewards.add(ether('10')); - await setTotalRewards({ - admin, - rewardEthToken, - oracles, - oracleAccounts, - pool, - totalRewards, - }); - - // manual checkpoints update - await rewardEthToken.updateRewardCheckpoint(account); - await rewardEthToken.updateRewardCheckpoint(constants.ZERO_ADDRESS); - await rewardEthToken.updateRewardCheckpoints( - account, - constants.ZERO_ADDRESS - ); - - // check user's balance didn't change, reward updated - expect(await stakedEthToken.balanceOf(account)).to.be.bignumber.equal( - deposit - ); - expect(await rewardEthToken.balanceOf(account)).to.be.bignumber.equal( - periodReward.mul(new BN(2)) - ); - - // check distributor balance and reward didn't change - expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - new BN(0) + distributorPrincipal ); expect( await rewardEthToken.balanceOf(constants.ZERO_ADDRESS) - ).to.bignumber.equal(periodReward); + ).to.be.bignumber.equal(newDistributorReward); }); }); diff --git a/test/tokens/upgrading.test.js b/test/tokens/upgrading.test.js index 2c8d5b75..e6d37eb2 100644 --- a/test/tokens/upgrading.test.js +++ b/test/tokens/upgrading.test.js @@ -1,10 +1,4 @@ -const { - expectRevert, - send, - ether, - constants, - BN, -} = require('@openzeppelin/test-helpers'); +const { expectRevert, send, ether } = require('@openzeppelin/test-helpers'); const { contractSettings, contracts } = require('../../deployments/settings'); const { upgradeContracts } = require('../../deployments'); const { @@ -17,11 +11,7 @@ const RewardEthToken = artifacts.require('RewardEthToken'); contract('RewardEthToken (upgrading)', ([anyone]) => { let admin = contractSettings.admin; - let rewardEthToken, - merkleDistributor, - oracles, - partnersRevenueSharing, - operatorsRevenueSharing; + let rewardEthToken, oracles, partnersRevenueSharing, operatorsRevenueSharing; after(async () => stopImpersonatingAccount(admin)); @@ -30,12 +20,8 @@ contract('RewardEthToken (upgrading)', ([anyone]) => { await send.ether(anyone, admin, ether('5')); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); - ({ - merkleDistributor, - oracles, - partnersRevenueSharing, - operatorsRevenueSharing, - } = await upgradeContracts()); + ({ oracles, partnersRevenueSharing, operatorsRevenueSharing } = + await upgradeContracts()); }); afterEach(async () => resetFork()); @@ -82,15 +68,4 @@ contract('RewardEthToken (upgrading)', ([anyone]) => { 'RewardEthToken: already upgraded' ); }); - - it('updates distributor checkpoint', async () => { - const rewardPerToken = await rewardEthToken.rewardPerToken(); - const distributorCheckpoint = await rewardEthToken.checkpoints( - constants.ZERO_ADDRESS - ); - await expect(distributorCheckpoint.rewardPerToken).to.bignumber.equal( - rewardPerToken - ); - await expect(distributorCheckpoint.reward).to.bignumber.equal(new BN(0)); - }); }); From e1017c3c0300d96c9e4976d90e3909189c9f4ef6 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Mon, 9 Aug 2021 15:38:21 +0300 Subject: [PATCH 05/55] Remove solos contracts --- abi/Solos.json | 709 --------------------------- contracts/collectors/Solos.sol | 160 ------ contracts/interfaces/ISolos.sol | 144 ------ test/solos/addDeposit.test.js | 231 --------- test/solos/cancelDeposit.test.js | 272 ---------- test/solos/registerValidator.test.js | 239 --------- test/solos/validatorParams.js | 56 --- 7 files changed, 1811 deletions(-) delete mode 100644 abi/Solos.json delete mode 100644 contracts/collectors/Solos.sol delete mode 100644 contracts/interfaces/ISolos.sol delete mode 100644 test/solos/addDeposit.test.js delete mode 100644 test/solos/cancelDeposit.test.js delete mode 100644 test/solos/registerValidator.test.js delete mode 100644 test/solos/validatorParams.js diff --git a/abi/Solos.json b/abi/Solos.json deleted file mode 100644 index 83373346..00000000 --- a/abi/Solos.json +++ /dev/null @@ -1,709 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - }, - { - "internalType": "address", - "name": "_validatorRegistration", - "type": "address" - }, - { - "internalType": "address", - "name": "_validators", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_validatorPrice", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_cancelLockDuration", - "type": "uint256" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "cancelLockDuration", - "type": "uint256" - } - ], - "name": "CancelLockDurationUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "soloId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "withdrawalCredentials", - "type": "bytes32" - } - ], - "name": "DepositAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "soloId", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes32", - "name": "withdrawalCredentials", - "type": "bytes32" - } - ], - "name": "DepositCanceled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Paused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "Unpaused", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "validatorPrice", - "type": "uint256" - } - ], - "name": "ValidatorPriceUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "soloId", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "price", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "ValidatorRegistered", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "PAUSER_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "VALIDATOR_DEPOSIT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "addAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_withdrawalCredentials", - "type": "bytes32" - } - ], - "name": "addDeposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "addPauser", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_withdrawalCredentials", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "_amount", - "type": "uint256" - } - ], - "name": "cancelDeposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "cancelLockDuration", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "index", - "type": "uint256" - } - ], - "name": "getRoleMember", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "name": "getRoleMemberCount", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "isPauser", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "paused", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "depositDataRoot", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "soloId", - "type": "bytes32" - } - ], - "internalType": "struct ISolos.Validator", - "name": "_validator", - "type": "tuple" - } - ], - "name": "registerValidator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "removeAdmin", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "removePauser", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_cancelLockDuration", - "type": "uint256" - } - ], - "name": "setCancelLockDuration", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_validatorPrice", - "type": "uint256" - } - ], - "name": "setValidatorPrice", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "solos", - "outputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "internalType": "bytes32", - "name": "withdrawalCredentials", - "type": "bytes32" - }, - { - "internalType": "uint256", - "name": "releaseTime", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "validatorPrice", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "validatorRegistration", - "outputs": [ - { - "internalType": "contract IDepositContract", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - } -] diff --git a/contracts/collectors/Solos.sol b/contracts/collectors/Solos.sol deleted file mode 100644 index 645a8c26..00000000 --- a/contracts/collectors/Solos.sol +++ /dev/null @@ -1,160 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-only - -pragma solidity 0.7.5; -pragma abicoder v2; - -import "@openzeppelin/contracts/math/SafeMath.sol"; -import "@openzeppelin/contracts/utils/Address.sol"; -import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; -import "../presets/OwnablePausable.sol"; -import "../interfaces/IDepositContract.sol"; -import "../interfaces/IValidators.sol"; -import "../interfaces/ISolos.sol"; - -/** - * @title Solos - * - * @dev Users can create standalone validators with their own withdrawal key using this contract. - * The validator can be registered as soon as deposit is added. - */ -contract Solos is ISolos, ReentrancyGuard, OwnablePausable { - using Address for address payable; - using SafeMath for uint256; - - // @dev Validator deposit amount. - uint256 public constant VALIDATOR_DEPOSIT = 32 ether; - - // @dev Maps ID of the solo to its information. - mapping(bytes32 => Solo) public override solos; - - // @dev Address of the ETH2 Deposit Contract (deployed by Ethereum). - IDepositContract public override validatorRegistration; - - // @dev Solo validator price per month. - uint256 public override validatorPrice; - - // @dev Solo validator deposit cancel lock duration. - uint256 public override cancelLockDuration; - - // @dev Address of the Validators contract. - IValidators private validators; - - /** - * @dev Constructor for initializing the Solos contract. - * @param _admin - address of the contract admin. - * @param _validatorRegistration - address of the VRC (deployed by Ethereum). - * @param _validators - address of the Validators contract. - * @param _validatorPrice - validator price. - * @param _cancelLockDuration - cancel lock duration in seconds. - */ - constructor( - address _admin, - address _validatorRegistration, - address _validators, - uint256 _validatorPrice, - uint256 _cancelLockDuration - ) - OwnablePausable(_admin) - { - validatorRegistration = IDepositContract(_validatorRegistration); - validators = IValidators(_validators); - - // set validator price - validatorPrice = _validatorPrice; - emit ValidatorPriceUpdated(_validatorPrice); - - // set cancel lock duration - cancelLockDuration = _cancelLockDuration; - emit CancelLockDurationUpdated(_cancelLockDuration); - } - - /** - * @dev See {ISolos-addDeposit}. - */ - function addDeposit(bytes32 _withdrawalCredentials) external payable override whenNotPaused { - require(_withdrawalCredentials != "" && _withdrawalCredentials[0] == 0x00, "Solos: invalid credentials"); - require(msg.value > 0 && msg.value.mod(VALIDATOR_DEPOSIT) == 0, "Solos: invalid deposit amount"); - - bytes32 soloId = keccak256(abi.encodePacked(address(this), msg.sender, _withdrawalCredentials)); - Solo storage solo = solos[soloId]; - - // update solo data - solo.amount = solo.amount.add(msg.value); - if (solo.withdrawalCredentials == "") { - solo.withdrawalCredentials = _withdrawalCredentials; - } - // the deposit can be canceled after lock has expired and it was not yet sent for staking - // solhint-disable-next-line not-rely-on-time - solo.releaseTime = block.timestamp.add(cancelLockDuration); - - // emit event - emit DepositAdded(soloId, msg.sender, msg.value, _withdrawalCredentials); - } - - /** - * @dev See {ISolos-cancelDeposit}. - */ - function cancelDeposit(bytes32 _withdrawalCredentials, uint256 _amount) external override nonReentrant { - // update balance - bytes32 soloId = keccak256(abi.encodePacked(address(this), msg.sender, _withdrawalCredentials)); - Solo storage solo = solos[soloId]; - - // solhint-disable-next-line not-rely-on-time - require(block.timestamp >= solo.releaseTime, "Solos: too early cancel"); - - uint256 newAmount = solo.amount.sub(_amount, "Solos: insufficient balance"); - require(newAmount.mod(VALIDATOR_DEPOSIT) == 0, "Solos: invalid cancel amount"); - - // emit event - emit DepositCanceled(soloId, msg.sender, _amount, solo.withdrawalCredentials); - - if (newAmount > 0) { - solo.amount = newAmount; - // solhint-disable-next-line not-rely-on-time - solo.releaseTime = block.timestamp.add(cancelLockDuration); - } else { - delete solos[soloId]; - } - - // transfer canceled amount to the recipient - msg.sender.sendValue(_amount); - } - - /** - * @dev See {ISolos-setValidatorPrice}. - */ - function setValidatorPrice(uint256 _validatorPrice) external override onlyAdmin { - validatorPrice = _validatorPrice; - emit ValidatorPriceUpdated(_validatorPrice); - } - - /** - * @dev See {ISolos-setCancelLockDuration}. - */ - function setCancelLockDuration(uint256 _cancelLockDuration) external override onlyAdmin { - cancelLockDuration = _cancelLockDuration; - emit CancelLockDurationUpdated(_cancelLockDuration); - } - - /** - * @dev See {ISolos-registerValidator}. - */ - function registerValidator(Validator calldata _validator) external override whenNotPaused { - require(validators.isOperator(msg.sender), "Solos: access denied"); - - // update solo balance - Solo storage solo = solos[_validator.soloId]; - solo.amount = solo.amount.sub(VALIDATOR_DEPOSIT, "Solos: insufficient balance"); - - // register validator - validators.register(keccak256(abi.encodePacked(_validator.publicKey))); - emit ValidatorRegistered(_validator.soloId, _validator.publicKey, validatorPrice, msg.sender); - - validatorRegistration.deposit{value : VALIDATOR_DEPOSIT}( - _validator.publicKey, - abi.encodePacked(solo.withdrawalCredentials), - _validator.signature, - _validator.depositDataRoot - ); - } -} diff --git a/contracts/interfaces/ISolos.sol b/contracts/interfaces/ISolos.sol deleted file mode 100644 index 323c0d1d..00000000 --- a/contracts/interfaces/ISolos.sol +++ /dev/null @@ -1,144 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-only - -pragma solidity 0.7.5; -pragma abicoder v2; - -import "./IDepositContract.sol"; - -/** - * @dev Interface of the Solos contract. - */ -interface ISolos { - /** - * @dev Structure for storing information about the solo deposits. - * @param amount - amount deposited. - * @param withdrawalCredentials - withdrawal credentials of the validators. - * @param releaseTime - the time when the deposit amount can be canceled. - */ - struct Solo { - uint256 amount; - bytes32 withdrawalCredentials; - uint256 releaseTime; - } - - /** - * @dev Structure for passing information about new Validator. - * @param publicKey - BLS public key of the validator, generated by the operator. - * @param signature - BLS signature of the validator, generated by the operator. - * @param depositDataRoot - hash tree root of the deposit data, generated by the operator. - * @param soloId - ID of the solo to register validator for. - */ - struct Validator { - bytes publicKey; - bytes signature; - bytes32 depositDataRoot; - bytes32 soloId; - } - - /** - * @dev Event for tracking added deposits. - * @param soloId - ID of the solo. - * @param sender - address of the deposit sender. - * @param amount - amount added. - * @param withdrawalCredentials - withdrawal credentials submitted by deposit owner. - */ - event DepositAdded( - bytes32 indexed soloId, - address indexed sender, - uint256 amount, - bytes32 withdrawalCredentials - ); - - /** - * @dev Event for tracking canceled deposits. - * @param soloId - ID of the solo. - * @param sender - address of the deposit sender. - * @param amount - amount canceled. - * @param withdrawalCredentials - withdrawal credentials submitted by deposit owner. - */ - event DepositCanceled( - bytes32 indexed soloId, - address indexed sender, - uint256 amount, - bytes32 withdrawalCredentials - ); - - /** - * @dev Event for tracking new cancel lock duration time. - * @param cancelLockDuration - new cancel lock duration for solo deposits. - */ - event CancelLockDurationUpdated(uint256 cancelLockDuration); - - /** - * @dev Event for tracking solo validator price updates. - * @param validatorPrice - new price for the solo validators. - */ - event ValidatorPriceUpdated(uint256 validatorPrice); - - /** - * @dev Event for tracking registered validators. - * @param soloId - ID of the solo where the deposit was accumulated. - * @param publicKey - validator public key. - * @param price - validator monthly price. - * @param operator - address of the validator operator. - */ - event ValidatorRegistered(bytes32 indexed soloId, bytes publicKey, uint256 price, address operator); - - /** - * @dev Function for getting solo's details. - * @param _soloId - ID of the solo to retrieve data for. - */ - function solos(bytes32 _soloId) external view returns ( - uint256 amount, - bytes32 withdrawalCredentials, - uint256 releaseTime - ); - - /** - * @dev Function for retrieving the validator registration contract address. - */ - function validatorRegistration() external view returns (IDepositContract); - - /** - * @dev Function for getting solo validator price per month. - */ - function validatorPrice() external view returns (uint256); - - /** - * @dev Function for updating solo validator price. - * @param _validatorPrice - new validator price. - */ - function setValidatorPrice(uint256 _validatorPrice) external; - - /** - * @dev Function for getting cancel lock duration in seconds. - */ - function cancelLockDuration() external view returns (uint256); - - /** - * @dev Function for updating cancel lock duration in seconds. - * @param newCancelLockDuration - new cancel lock duration in seconds. - */ - function setCancelLockDuration(uint256 newCancelLockDuration) external; - - /** - * @dev Function for adding solo deposits. - * The deposit amount must be divisible by the validator deposit amount. - * @param _withdrawalCredentials - withdrawal credentials for performing validator withdrawal. - */ - function addDeposit(bytes32 _withdrawalCredentials) external payable; - - /** - * @dev Function for canceling solo deposits. - * The deposit amount can only be canceled before it will be registered as a validator. - * @param _withdrawalCredentials - withdrawal credentials of solo validators. - * @param _amount - amount to cancel. - */ - function cancelDeposit(bytes32 _withdrawalCredentials, uint256 _amount) external; - - /** - * @dev Function for registering new solo validator. - * @param _validator - validator to register. - */ - function registerValidator(Validator calldata _validator) external; -} diff --git a/test/solos/addDeposit.test.js b/test/solos/addDeposit.test.js deleted file mode 100644 index e80c212e..00000000 --- a/test/solos/addDeposit.test.js +++ /dev/null @@ -1,231 +0,0 @@ -const { expect } = require('chai'); -const { - BN, - ether, - constants, - expectRevert, - send, -} = require('@openzeppelin/test-helpers'); -const { upgradeContracts } = require('../../deployments'); -const { contractSettings, contracts } = require('../../deployments/settings'); -const { - stopImpersonatingAccount, - impersonateAccount, - resetFork, - checkCollectorBalance, - checkSoloDepositAdded, -} = require('../utils'); - -const Solos = artifacts.require('Solos'); - -const validatorDeposit = ether('32'); -const withdrawalCredentials = - '0x00fd1759df8cf0dfa07a7d0b9083c7527af46d8b87c33305cee15165c49d5061'; - -contract('Solos (add deposit)', ([sender1, sender2]) => { - const admin = contractSettings.admin; - let solos; - - after(async () => stopImpersonatingAccount(admin)); - - beforeEach(async () => { - await impersonateAccount(admin); - await send.ether(sender1, admin, ether('5')); - - await upgradeContracts(); - - solos = await Solos.at(contracts.solos); - }); - - afterEach(async () => resetFork()); - - it('fails to add a deposit with invalid withdrawal credentials', async () => { - await expectRevert( - solos.addDeposit(constants.ZERO_BYTES32, { - from: sender1, - value: validatorDeposit, - }), - 'Solos: invalid credentials' - ); - await checkCollectorBalance(solos); - }); - - it('fails to add a deposit with invalid withdrawal credentials prefix', async () => { - await expectRevert( - solos.addDeposit( - '0x9dfd1759df8cf0dfa07a7d0b9083c7527af46d8b87c33305cee15165c49d5061', - { - from: sender1, - value: validatorDeposit, - } - ), - 'Solos: invalid credentials' - ); - await checkCollectorBalance(solos); - }); - - it('fails to add a deposit to paused contract', async () => { - await solos.pause({ from: admin }); - expect(await solos.paused()).equal(true); - - await expectRevert( - solos.addDeposit(withdrawalCredentials, { - from: sender1, - value: validatorDeposit, - }), - 'Pausable: paused' - ); - await checkCollectorBalance(solos); - }); - - it('fails to add a deposit smaller than validator deposit amount', async () => { - await expectRevert( - solos.addDeposit(withdrawalCredentials, { - from: sender1, - value: validatorDeposit.sub(ether('1')), - }), - 'Solos: invalid deposit amount' - ); - await checkCollectorBalance(solos); - }); - - it('fails to add a deposit not divisible by validator deposit amount', async () => { - await expectRevert( - solos.addDeposit(withdrawalCredentials, { - from: sender1, - value: validatorDeposit.add(ether('1')), - }), - 'Solos: invalid deposit amount' - ); - await checkCollectorBalance(solos); - }); - - it('adds deposits divisible by validator deposit amount', async () => { - let depositAmount = validatorDeposit.mul(new BN(3)); - // Send a deposit - const receipt = await solos.addDeposit(withdrawalCredentials, { - from: sender1, - value: depositAmount, - }); - - await checkSoloDepositAdded({ - receipt, - sender: sender1, - solos, - withdrawalCredentials, - addedAmount: depositAmount, - totalAmount: depositAmount, - }); - await checkCollectorBalance(solos, validatorDeposit.mul(new BN(3))); - }); - - it('increases amount for the same solo', async () => { - // Send first deposit - let receipt = await solos.addDeposit(withdrawalCredentials, { - from: sender1, - value: validatorDeposit, - }); - - // Check solo deposit added - await checkSoloDepositAdded({ - receipt, - sender: sender1, - solos, - withdrawalCredentials, - addedAmount: validatorDeposit, - totalAmount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - - // Send second deposit - receipt = await solos.addDeposit(withdrawalCredentials, { - from: sender1, - value: validatorDeposit, - }); - - // Check solo deposit added - await checkSoloDepositAdded({ - receipt, - sender: sender1, - solos, - withdrawalCredentials, - addedAmount: validatorDeposit, - totalAmount: validatorDeposit.mul(new BN(2)), - }); - await checkCollectorBalance(solos, validatorDeposit.mul(new BN(2))); - }); - - it('adds deposits for different users', async () => { - // User 1 creates a deposit - let receipt = await solos.addDeposit(withdrawalCredentials, { - from: sender1, - value: validatorDeposit, - }); - - // Check solo deposit added - await checkSoloDepositAdded({ - receipt, - sender: sender1, - solos, - withdrawalCredentials, - addedAmount: validatorDeposit, - totalAmount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - - // User 2 creates a deposit - receipt = await solos.addDeposit(withdrawalCredentials, { - from: sender2, - value: validatorDeposit, - }); - - // Check solo deposit added - await checkSoloDepositAdded({ - receipt, - sender: sender2, - solos, - withdrawalCredentials, - addedAmount: validatorDeposit, - totalAmount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit.mul(new BN(2))); - }); - - it('creates different solos for deposits with different withdrawal credentials', async () => { - // User creates deposit with first withdrawal credential - let receipt = await solos.addDeposit(withdrawalCredentials, { - from: sender1, - value: validatorDeposit, - }); - - // Check solo deposit added - await checkSoloDepositAdded({ - receipt, - sender: sender1, - solos, - withdrawalCredentials, - addedAmount: validatorDeposit, - totalAmount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - - // User creates deposit with second withdrawal credential - let withdrawalCredentials2 = - '0x00ef3debe27bec735f68fee62c107f6a2bf85a4bb308cee64ce3a9addefa44f7'; - receipt = await solos.addDeposit(withdrawalCredentials2, { - from: sender1, - value: validatorDeposit, - }); - - // Check solo deposit added - await checkSoloDepositAdded({ - receipt, - sender: sender1, - solos, - withdrawalCredentials: withdrawalCredentials2, - addedAmount: validatorDeposit, - totalAmount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit.mul(new BN(2))); - }); -}); diff --git a/test/solos/cancelDeposit.test.js b/test/solos/cancelDeposit.test.js deleted file mode 100644 index 7a6e0e0e..00000000 --- a/test/solos/cancelDeposit.test.js +++ /dev/null @@ -1,272 +0,0 @@ -const { expect } = require('chai'); -const { - ether, - expectRevert, - expectEvent, - time, - constants, - balance, - send, -} = require('@openzeppelin/test-helpers'); -const { upgradeContracts } = require('../../deployments'); -const { contractSettings, contracts } = require('../../deployments/settings'); -const { - checkCollectorBalance, - checkSolo, - stopImpersonatingAccount, - impersonateAccount, - resetFork, -} = require('../utils'); -const { validatorParams } = require('./validatorParams'); - -const Solos = artifacts.require('Solos'); -const Validators = artifacts.require('Validators'); - -const validatorDeposit = ether('32'); -const cancelLockDuration = 86400; // 1 day -const { withdrawalCredentials } = validatorParams[0]; - -contract('Solos (cancel deposit)', ([operator, sender, anyone]) => { - const admin = contractSettings.admin; - let solos, soloId; - - after(async () => stopImpersonatingAccount(admin)); - - beforeEach(async () => { - await impersonateAccount(admin); - await send.ether(sender, admin, ether('5')); - - await upgradeContracts(); - - let validators = await Validators.at(contracts.validators); - await validators.addOperator(operator, { from: admin }); - - solos = await Solos.at(contracts.solos); - await solos.setCancelLockDuration(cancelLockDuration, { - from: admin, - }); - - // create new solo - await solos.addDeposit(withdrawalCredentials, { - from: sender, - value: validatorDeposit, - }); - soloId = web3.utils.soliditySha3( - solos.address, - sender, - withdrawalCredentials - ); - }); - - afterEach(async () => resetFork()); - - it('fails to cancel a deposit with invalid withdrawal credentials', async () => { - await expectRevert( - solos.cancelDeposit(constants.ZERO_BYTES32, validatorDeposit, { - from: sender, - }), - 'Solos: insufficient balance' - ); - await checkSolo({ - solos, - soloId, - withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('fails to cancel a deposit for other user account', async () => { - await expectRevert( - solos.cancelDeposit(withdrawalCredentials, validatorDeposit, { - from: anyone, - }), - 'Solos: insufficient balance' - ); - await checkSolo({ - solos, - soloId, - withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('can cancel a deposit with zero amount', async () => { - await time.increase(cancelLockDuration); - const receipt = await solos.cancelDeposit(withdrawalCredentials, 0, { - from: sender, - }); - expectEvent(receipt, 'DepositCanceled', { - soloId, - amount: '0', - sender, - withdrawalCredentials, - }); - - await checkSolo({ - solos, - soloId, - withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('fails to cancel a deposit when lock duration has not passed', async () => { - await expectRevert( - solos.cancelDeposit(withdrawalCredentials, validatorDeposit, { - from: sender, - }), - 'Solos: too early cancel' - ); - await checkSolo({ - solos, - soloId, - withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('not admin fails to update cancel lock duration', async () => { - await expectRevert( - solos.setCancelLockDuration(cancelLockDuration, { - from: anyone, - }), - 'OwnablePausable: access denied' - ); - await checkSolo({ - solos, - soloId, - withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('admin can update cancel lock duration', async () => { - let receipt = await solos.setCancelLockDuration(cancelLockDuration, { - from: admin, - }); - - await expectEvent(receipt, 'CancelLockDurationUpdated', { - cancelLockDuration: cancelLockDuration.toString(), - }); - await checkSolo({ - solos, - soloId, - withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('fails to cancel a deposit with amount bigger than deposit', async () => { - await time.increase(cancelLockDuration); - await expectRevert( - solos.cancelDeposit( - withdrawalCredentials, - validatorDeposit.add(ether('1')), - { - from: sender, - } - ), - 'Solos: insufficient balance' - ); - await checkSolo({ - solos, - soloId, - withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('fails to cancel a deposit with too small unit', async () => { - await time.increase(cancelLockDuration); - await expectRevert( - solos.cancelDeposit(withdrawalCredentials, ether('1'), { - from: sender, - }), - 'Solos: invalid cancel amount' - ); - await checkSolo({ - solos, - soloId, - withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('fails to cancel a deposit with registered validator', async () => { - await time.increase(cancelLockDuration); - await solos.registerValidator( - { - publicKey: validatorParams[0].publicKey, - soloId, - signature: validatorParams[0].signature, - depositDataRoot: validatorParams[0].depositDataRoot, - }, - { - from: operator, - } - ); - - await expectRevert( - solos.cancelDeposit(withdrawalCredentials, validatorDeposit, { - from: sender, - }), - 'Solos: insufficient balance' - ); - await checkSolo({ solos, soloId, withdrawalCredentials }); - await checkCollectorBalance(solos); - }); - - it('fails to cancel deposit amount twice', async () => { - await time.increase(cancelLockDuration); - await solos.cancelDeposit(withdrawalCredentials, validatorDeposit, { - from: sender, - }); - await expectRevert( - solos.cancelDeposit(withdrawalCredentials, validatorDeposit, { - from: sender, - }), - 'Solos: insufficient balance' - ); - await checkSolo({ - solos, - soloId, - withdrawalCredentials: constants.ZERO_BYTES32, - }); - await checkCollectorBalance(solos); - }); - - it('cancels deposit in full amount', async () => { - await time.increase(cancelLockDuration); - const prevBalance = await balance.current(sender); - const receipt = await solos.cancelDeposit( - withdrawalCredentials, - validatorDeposit, - { - from: sender, - } - ); - expectEvent(receipt, 'DepositCanceled', { - soloId, - amount: validatorDeposit, - sender, - withdrawalCredentials, - }); - await checkSolo({ - solos, - soloId, - withdrawalCredentials: constants.ZERO_BYTES32, - }); - await checkCollectorBalance(solos); - - // Check recipient balance changed - expect(prevBalance.lt(await balance.current(sender))).to.be.equal(true); - }); -}); diff --git a/test/solos/registerValidator.test.js b/test/solos/registerValidator.test.js deleted file mode 100644 index 86eefc7e..00000000 --- a/test/solos/registerValidator.test.js +++ /dev/null @@ -1,239 +0,0 @@ -const { - BN, - expectRevert, - expectEvent, - constants, - ether, - send, -} = require('@openzeppelin/test-helpers'); -const { upgradeContracts } = require('../../deployments'); -const { contractSettings, contracts } = require('../../deployments/settings'); -const { vrcAbi } = require('../../deployments/vrc'); -const { - checkCollectorBalance, - checkSolo, - checkValidatorRegistered, - stopImpersonatingAccount, - impersonateAccount, - resetFork, -} = require('../utils'); -const { validatorParams } = require('./validatorParams'); - -const Solos = artifacts.require('Solos'); -const Validators = artifacts.require('Validators'); - -const validatorPrice = ether('10'); -const validatorDeposit = ether('32'); -const validator = validatorParams[0]; - -contract('Solos (register validator)', ([operator, sender, other]) => { - const admin = contractSettings.admin; - let vrc, solos, soloId; - - before(async () => { - vrc = new web3.eth.Contract(vrcAbi, contractSettings.VRC); - }); - - after(async () => stopImpersonatingAccount(admin)); - - beforeEach(async () => { - await impersonateAccount(admin); - await send.ether(sender, admin, ether('5')); - - await upgradeContracts(); - - solos = await Solos.at(contracts.solos); - let validators = await Validators.at(contracts.validators); - await validators.addOperator(operator, { from: admin }); - - await solos.setValidatorPrice(validatorPrice, { - from: admin, - }); - - // create new solo - await solos.addDeposit(validator.withdrawalCredentials, { - from: sender, - value: validatorDeposit, - }); - soloId = web3.utils.soliditySha3( - solos.address, - sender, - validator.withdrawalCredentials - ); - }); - - afterEach(async () => resetFork()); - - it('fails to register validator for invalid solo ID', async () => { - let validator = { soloId: constants.ZERO_BYTES32, ...validatorParams[0] }; - await expectRevert( - solos.registerValidator(validator, { - from: operator, - }), - 'Solos: insufficient balance' - ); - await checkSolo({ - solos, - soloId, - withdrawalCredentials: validator.withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('fails to register validator with callers other than operator', async () => { - await expectRevert( - solos.registerValidator( - { soloId, ...validator }, - { - from: other, - } - ), - 'Solos: access denied' - ); - await checkSolo({ - solos, - soloId, - withdrawalCredentials: validator.withdrawalCredentials, - amount: validatorDeposit, - }); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('fails to register validator with used public key', async () => { - await solos.addDeposit(validator.withdrawalCredentials, { - from: sender, - value: validatorDeposit, - }); - - await solos.registerValidator( - { soloId, ...validator }, - { - from: operator, - } - ); - - await expectRevert( - solos.registerValidator( - { soloId, ...validator }, - { - from: operator, - } - ), - 'Validators: invalid public key' - ); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('fails to register validator twice', async () => { - await solos.registerValidator( - { soloId, ...validatorParams[0] }, - { - from: operator, - } - ); - - await expectRevert( - solos.registerValidator( - { soloId, ...validatorParams[1] }, - { - from: operator, - } - ), - 'Solos: insufficient balance' - ); - - await checkCollectorBalance(solos, new BN(0)); - }); - - it('fails to register validator with paused solos', async () => { - await solos.pause({ from: admin }); - expect(await solos.paused()).equal(true); - - await expectRevert( - solos.registerValidator( - { soloId, ...validatorParams[1] }, - { - from: sender, - } - ), - 'Pausable: paused' - ); - await checkCollectorBalance(solos, validatorDeposit); - }); - - it('not admin fails to update validator price', async () => { - await expectRevert( - solos.setValidatorPrice(validatorPrice, { - from: other, - }), - 'OwnablePausable: access denied' - ); - }); - - it('admin can update validator price', async () => { - let receipt = await solos.setValidatorPrice(validatorPrice, { - from: admin, - }); - - await expectEvent(receipt, 'ValidatorPriceUpdated', { - validatorPrice: validatorPrice.toString(), - }); - }); - - it('registers single validator', async () => { - // one validator is already created - let totalAmount = validatorDeposit; - let newValidators = []; - newValidators.push({ - soloId: web3.utils.soliditySha3( - solos.address, - sender, - validator.withdrawalCredentials - ), - ...validator, - }); - - for (let i = 1; i < validatorParams.length; i++) { - await solos.addDeposit(validatorParams[i].withdrawalCredentials, { - from: sender, - value: validatorDeposit, - }); - newValidators.push({ - soloId: web3.utils.soliditySha3( - solos.address, - sender, - validatorParams[i].withdrawalCredentials - ), - ...validatorParams[i], - }); - totalAmount = totalAmount.add(validatorDeposit); - } - - // check balance increased correctly - await checkCollectorBalance(solos, totalAmount); - - // register validators - for (let i = 0; i < newValidators.length; i++) { - let receipt = await solos.registerValidator(newValidators[i], { - from: operator, - }); - await checkValidatorRegistered({ - vrc, - operator, - transaction: receipt.tx, - pubKey: newValidators[i].publicKey, - withdrawalCredentials: newValidators[i].withdrawalCredentials, - signature: validatorParams[i].signature, - }); - await expectEvent(receipt, 'ValidatorRegistered', { - publicKey: validatorParams[i].publicKey, - soloId: newValidators[i].soloId, - price: validatorPrice, - operator, - }); - } - - await checkCollectorBalance(solos); - }); -}); diff --git a/test/solos/validatorParams.js b/test/solos/validatorParams.js deleted file mode 100644 index 382a0a54..00000000 --- a/test/solos/validatorParams.js +++ /dev/null @@ -1,56 +0,0 @@ -const validatorParams = [ - { - publicKey: - '0xac77c929681e44a8a8ca73b6b233156d2f5293104b7ba45810b9f306f7ce9f5474250987e422b2eb1339297ba2b8eba4', - signature: - '0xaaf804d51a0ea59c25f195a73185650692e67f131540152410d1bbf6f0900212c48567195406788998ead422555507dc0a1a82b20fc1863329bd0d29df0d7c153e3c5198d5ae9834033947d8322117a4a6d4548cfa990e80e8465d4f9f67ef37', - depositDataRoot: - '0x0e95ab0ebb2a2d7dddcd00bfb8c3dcd4ed41ad782147afa5098749e6a9a80794', - withdrawalCredentials: - '0x00986967e5a0aa1732539565fdd0d2f61a6069488b5924147d28d31ba94bc99b', - }, - { - publicKey: - '0x9883f4beb669b7848795ea98e03f5d43db9c3e5520be725e11805c8fe1be7776dcca6014d585904af321b166b3da83be', - signature: - '0xb320734cecd73b759f1dcaeb62b8c26217423ef0944ed482c64fbd739c43f672c785de841933fcc61e65bbc184bbf52b04267ff3656bd0309090c9406ec087c1611d3e338f110d1526037581e2a66f05389e0010fa2b8bc13c9355d938e4f4ce', - depositDataRoot: - '0xe7dd6595b4b5e79077cb8c30e565381e981d67975e74a7242459898f410654d6', - withdrawalCredentials: - '0x0000b8fdd5954180a07b0cb93300044f78588db6d1e8b333d35c99c8e73ba934', - }, - { - publicKey: - '0x91ad8babbfe790a99a1a51801ea6334aa20d29f15fb0f3c6286e83c5511af172c90ba7a1d5d44157e15cf951ca96ef9b', - signature: - '0xb0cd36c07af2206b61f1b0343f00e1a3ad7015010a491f533ba70dcb86cd94d18b6cec6e3f68004d9f2c3354eb904a3c050b41373399c7e3bf6bbc05056ebf644e247a7a85604bfce1a270730f3ad1ff3d363c9b526aafffd44f082f115068a4', - depositDataRoot: - '0x3c9b64bb71a67d1e6be459bf684b239a68b0335cc1206ca3c34857b340e879aa', - withdrawalCredentials: - '0x0051cec6eb753cd24fce4f421595ea9d8bbc87402a1028a72f468521819f3177', - }, - { - publicKey: - '0x8d8973c4565bf0104238611e3d4e660143146049489c8efee7b15df82d8593501269221a391bf50a5c78da5cc4dbddd5', - signature: - '0xa60be10dc3d35fb7de414aa638ed098211049d1578741e1a509fca334e3ba50bc365b293d1b362abc0fe5b545ab4ab3406200599b4121452efa4a8c831cc0f90d102954528f7f7d595f5daa3714e54060afdf2c6d55066cd2457537f8408dd2b', - depositDataRoot: - '0x4ff14da4a622977c67d75909055bee375a1d4fb87a3fbdea5477b9d44e6da807', - withdrawalCredentials: - '0x00c01386fa9823eda0af28e41b88608e61153b158623e2989ff7b2c489d766dc', - }, - { - publicKey: - '0xa3074a7179e674a8889142201e229e3a27e8ee66fe2d8f092e771afb5ce894bd614789a900f16e2327b5097132c75041', - signature: - '0x8c3e924bc357012de6a3cbd9eea5b2267ded3929849a8a7649f8a75e3d4c024f6ac14eb94330d6e4a99d7e598d49fab303ba1ebf299bc797609201459093b397d406ce1c69c0446f6dd3160818bd89263d03771f58d7df0856aece8950a2774e', - depositDataRoot: - '0x173856845dec3326fdc9d3c41ec7b744153799db175e36d753716ad4bfa6b1f0', - withdrawalCredentials: - '0x00206f328d344d1adfa297d5519c874b7e2b58dc2ef1cfb3725087b12f962609', - }, -]; - -module.exports = { - validatorParams, -}; From 00c3436ddc5117faf618652dcfc7e9ebba5cef00 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Mon, 16 Aug 2021 17:16:35 +0300 Subject: [PATCH 06/55] Implement onboarding other node operators --- README.md | 40 +- abi/Oracles.json | 125 +- abi/Pool.json | 263 ++-- abi/{Validators.json => PoolValidators.json} | 464 ++++++- abi/RevenueSharing.json | 74 +- contracts/Oracles.sol | 35 +- contracts/RevenueSharing.sol | 206 ++-- contracts/Validators.sol | 70 -- contracts/collectors/Pool.sol | 205 --- contracts/interfaces/IOracles.sol | 42 +- contracts/interfaces/IPool.sol | 129 +- contracts/interfaces/IPoolValidators.sol | 203 +++ contracts/interfaces/IRevenueSharing.sol | 37 +- contracts/interfaces/IValidators.sol | 48 - contracts/mocks/MulticallMock.sol | 20 +- contracts/pool/Pool.sol | 281 +++++ contracts/{collectors => pool}/PoolEscrow.sol | 0 contracts/pool/PoolValidators.sol | 277 +++++ deployments/index.js | 227 +++- deployments/settings.js | 16 +- hardhat.config.js | 8 +- package.json | 2 +- scripts/{prepareUpgrade.js => deploy.js} | 4 +- test/MerkleDistributor.test.js | 2 - test/RevenueSharing.test.js | 171 +-- test/Validators.test.js | 144 --- test/oracles/Oracles.test.js | 119 +- test/pool/PoolValidators.test.js | 1096 +++++++++++++++++ test/pool/finalizeMerkleRoot.js | 166 +++ test/pool/initializeMerkleRoot.js | 166 +++ test/pool/registerValidator.test.js | 167 --- test/pool/settings.test.js | 79 +- .../{addDeposit.test.js => stake.test.js} | 324 ++++- test/pool/upgrading.test.js | 48 +- test/pool/validatorParams.js | 94 -- test/utils.js | 377 ++++-- 36 files changed, 3990 insertions(+), 1739 deletions(-) rename abi/{Validators.json => PoolValidators.json} (52%) delete mode 100644 contracts/Validators.sol delete mode 100644 contracts/collectors/Pool.sol create mode 100644 contracts/interfaces/IPoolValidators.sol delete mode 100644 contracts/interfaces/IValidators.sol create mode 100644 contracts/pool/Pool.sol rename contracts/{collectors => pool}/PoolEscrow.sol (100%) create mode 100644 contracts/pool/PoolValidators.sol rename scripts/{prepareUpgrade.js => deploy.js} (54%) delete mode 100644 test/Validators.test.js create mode 100644 test/pool/PoolValidators.test.js create mode 100644 test/pool/finalizeMerkleRoot.js create mode 100644 test/pool/initializeMerkleRoot.js delete mode 100644 test/pool/registerValidator.test.js rename test/pool/{addDeposit.test.js => stake.test.js} (57%) delete mode 100644 test/pool/validatorParams.js diff --git a/README.md b/README.md index a3c10d85..62a74b41 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,19 @@ # StakeWise smart contracts [![CircleCI](https://circleci.com/gh/stakewise/contracts.svg?style=svg)](https://circleci.com/gh/stakewise/contracts) -[![CodeCov](https://codecov.io/gh/stakewise/contracts/branch/master/graph/badge.svg)](https://codecov.io/gh/stakewise/contracts) [![Discord](https://user-images.githubusercontent.com/7288322/34471967-1df7808a-efbb-11e7-9088-ed0b04151291.png)](https://discord.gg/2BSdr2g) -The StakeWise smart contracts for tokenized staking and non-custodial validators. +The StakeWise smart contracts for liquid non-custodial ETH2 staking. -- **Extensible:** It is possible to create your own contract with logic for accumulating validator deposit amount. -- **Upgradable:** By using [OpenZeppelin Upgrades](https://github.com/OpenZeppelin/openzeppelin-upgrades), it's possible to fix bugs and critical issues when the contracts are deployed to the mainnet. - Only the [Solos](./contracts/collectors/Solos.sol) contract cannot be upgraded to prevent the possibility of changing staker's withdrawal credentials. -- **Role-based access:** By having [Operators](./contracts/Validators.sol), [Admins](./contracts/presets/OwnablePausableUpgradeable.sol), [Pausers](./contracts/presets/OwnablePausableUpgradeable.sol) - and [Oracles](contracts/Oracles.sol) roles, it is possible to restrict user capabilities. -- **Integration friendly:** Any contract state emits event. Applications can monitor and act on these events. +## Documentation + +You can find the documentation for every contract in the `contracts` directory. For integration, check the `contracts/interfaces` directory. +The documentation is also available on the [official documentation page](https://docs.stakewise.io/smart-contracts). ## Deployment +**NB!** You would have to define the `initialize` function for the contracts that don't have it when deploying for the first time. + 1. Install dependencies: ```shell script @@ -27,33 +26,16 @@ The StakeWise smart contracts for tokenized staking and non-custodial validators yarn compile --optimizer ``` -3. Define network parameters in `hardhat.config.js`. Learn more at [Hardhat config options](https://hardhat.org/config/). - -4. Change [initial settings](./deployments/settings.js) accordingly. - -5. If you are deploying to the network without [ETH2 deposit contract](https://github.com/ethereum/eth2.0-specs/tree/dev/solidity_deposit_contract), run the following commands: - - ```shell script - yarn deployVRC --network rinkeby - ``` - -6. If you are deploying to the network without `DAI contract`, run the following commands: +3. Update network parameters in `hardhat.config.js`. Learn more at [Hardhat config options](https://hardhat.org/config/). - ```shell script - yarn deployDAI --network rinkeby - ``` +4. Change [settings](./deployments/settings.js) if needed. -7. Deploy StakeWise contracts to the selected network: +5. Deploy StakeWise contracts to the selected network: ```shell script - yarn deploy --network rinkeby + yarn deploy-contracts --network rinkeby ``` -## Documentation - -You can find the documentation for every contract in the `contracts` directory. -The documentation is also available on the [official documentation page](https://docs.stakewise.io/smart-contracts). - ## Contributing Development of the project happens in the open on GitHub, and we are grateful to the community for contributing bugfixes and improvements. diff --git a/abi/Oracles.json b/abi/Oracles.json index ffe6b9ae..b94459e3 100644 --- a/abi/Oracles.json +++ b/abi/Oracles.json @@ -10,15 +10,15 @@ }, { "indexed": true, - "internalType": "bytes32", - "name": "merkleRoot", - "type": "bytes32" + "internalType": "address", + "name": "operator", + "type": "address" }, { "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" }, { "indexed": false, @@ -41,15 +41,15 @@ }, { "indexed": true, - "internalType": "bytes32", - "name": "merkleRoot", - "type": "bytes32" + "internalType": "address", + "name": "operator", + "type": "address" }, { "indexed": false, - "internalType": "uint256", - "name": "index", - "type": "uint256" + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" }, { "indexed": false, @@ -336,27 +336,17 @@ }, { "inputs": [ - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - }, { "components": [ { - "internalType": "uint256", - "name": "index", - "type": "uint256" - }, - { - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" + "internalType": "address", + "name": "operator", + "type": "address" }, { - "internalType": "bytes", - "name": "signature", - "type": "bytes" + "internalType": "bytes32", + "name": "withdrawalCredentials", + "type": "bytes32" }, { "internalType": "bytes32", @@ -364,20 +354,25 @@ "type": "bytes32" }, { - "internalType": "bytes32", - "name": "merkleRoot", - "type": "bytes32" + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" }, { - "internalType": "bytes32[]", - "name": "merkleProof", - "type": "bytes32[]" + "internalType": "bytes", + "name": "signature", + "type": "bytes" } ], - "internalType": "struct IPoolValidators.Validator", - "name": "validator", + "internalType": "struct IPoolValidators.DepositData", + "name": "depositData", "type": "tuple" }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + }, { "internalType": "bytes[]", "name": "signatures", @@ -515,6 +510,11 @@ "name": "_pool", "type": "address" }, + { + "internalType": "address", + "name": "_poolValidators", + "type": "address" + }, { "internalType": "address", "name": "_merkleDistributor", @@ -533,27 +533,17 @@ }, { "inputs": [ - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - }, { "components": [ { - "internalType": "uint256", - "name": "index", - "type": "uint256" + "internalType": "address", + "name": "operator", + "type": "address" }, { - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" + "internalType": "bytes32", + "name": "withdrawalCredentials", + "type": "bytes32" }, { "internalType": "bytes32", @@ -561,20 +551,25 @@ "type": "bytes32" }, { - "internalType": "bytes32", - "name": "merkleRoot", - "type": "bytes32" + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" }, { - "internalType": "bytes32[]", - "name": "merkleProof", - "type": "bytes32[]" + "internalType": "bytes", + "name": "signature", + "type": "bytes" } ], - "internalType": "struct IPoolValidators.Validator", - "name": "validator", + "internalType": "struct IPoolValidators.DepositData", + "name": "depositData", "type": "tuple" }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + }, { "internalType": "bytes[]", "name": "signatures", @@ -779,11 +774,6 @@ }, { "inputs": [ - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - }, { "internalType": "bytes32", "name": "merkleRoot", @@ -807,11 +797,6 @@ }, { "inputs": [ - { - "internalType": "uint256", - "name": "_nonce", - "type": "uint256" - }, { "internalType": "uint256", "name": "totalRewards", diff --git a/abi/Pool.json b/abi/Pool.json index 8da8c22c..1eba1ac3 100644 --- a/abi/Pool.json +++ b/abi/Pool.json @@ -125,6 +125,25 @@ "name": "PendingValidatorsLimitUpdated", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "Refunded", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -217,32 +236,38 @@ "anonymous": false, "inputs": [ { - "indexed": false, + "indexed": true, "internalType": "bytes", "name": "publicKey", "type": "bytes" }, { - "indexed": false, + "indexed": true, "internalType": "address", "name": "operator", "type": "address" } ], - "name": "ValidatorRegistered", + "name": "ValidatorInitialized", "type": "event" }, { "anonymous": false, "inputs": [ { - "indexed": false, - "internalType": "bytes32", - "name": "withdrawalCredentials", - "type": "bytes32" + "indexed": true, + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" } ], - "name": "WithdrawalCredentialsUpdated", + "name": "ValidatorRegistered", "type": "event" }, { @@ -273,7 +298,20 @@ }, { "inputs": [], - "name": "VALIDATOR_DEPOSIT", + "name": "VALIDATOR_INIT_DEPOSIT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "VALIDATOR_TOTAL_DEPOSIT", "outputs": [ { "internalType": "uint256", @@ -288,12 +326,12 @@ "inputs": [ { "internalType": "address", - "name": "_account", + "name": "account", "type": "address" }, { "internalType": "uint256", - "name": "_validatorIndex", + "name": "validatorIndex", "type": "uint256" } ], @@ -306,12 +344,12 @@ "inputs": [ { "internalType": "address", - "name": "_account", + "name": "account", "type": "address" }, { "internalType": "uint256[]", - "name": "_validatorIndexes", + "name": "validatorIndexes", "type": "uint256[]" } ], @@ -370,13 +408,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "addDeposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, { "inputs": [ { @@ -394,7 +425,7 @@ "inputs": [ { "internalType": "uint256", - "name": "_validatorIndex", + "name": "validatorIndex", "type": "uint256" } ], @@ -409,6 +440,46 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "withdrawalCredentials", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "depositDataRoot", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct IPoolValidators.DepositData", + "name": "depositData", + "type": "tuple" + } + ], + "name": "finalizeValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -513,6 +584,46 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "withdrawalCredentials", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "depositDataRoot", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct IPoolValidators.DepositData", + "name": "depositData", + "type": "tuple" + } + ], + "name": "initializeValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -611,33 +722,10 @@ "type": "function" }, { - "inputs": [ - { - "components": [ - { - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - }, - { - "internalType": "bytes32", - "name": "depositDataRoot", - "type": "bytes32" - } - ], - "internalType": "struct IPool.Validator", - "name": "_validator", - "type": "tuple" - } - ], - "name": "registerValidator", + "inputs": [], + "name": "refund", "outputs": [], - "stateMutability": "nonpayable", + "stateMutability": "payable", "type": "function" }, { @@ -719,7 +807,7 @@ "inputs": [ { "internalType": "uint256", - "name": "_minActivatingDeposit", + "name": "newMinActivatingDeposit", "type": "uint256" } ], @@ -732,7 +820,7 @@ "inputs": [ { "internalType": "uint256", - "name": "_pendingValidatorsLimit", + "name": "newPendingValidatorsLimit", "type": "uint256" } ], @@ -741,17 +829,55 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [], + "name": "stake", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, { "inputs": [ { - "internalType": "bytes32", - "name": "_withdrawalCredentials", - "type": "bytes32" + "internalType": "address", + "name": "recipient", + "type": "address" } ], - "name": "setWithdrawalCredentials", + "name": "stakeOnBehalf", "outputs": [], - "stateMutability": "nonpayable", + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "partner", + "type": "address" + } + ], + "name": "stakeWithPartner", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "partner", + "type": "address" + }, + { + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "stakeWithPartnerOnBehalf", + "outputs": [], + "stateMutability": "payable", "type": "function" }, { @@ -765,28 +891,23 @@ "inputs": [ { "internalType": "address", - "name": "_oracles", + "name": "_poolValidators", "type": "address" }, { - "internalType": "uint256", - "name": "_activatedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_pendingValidators", - "type": "uint256" + "internalType": "address", + "name": "_oracles", + "type": "address" }, { - "internalType": "uint256", - "name": "_minActivatingDeposit", - "type": "uint256" + "internalType": "address", + "name": "_partnersRevenueSharing", + "type": "address" }, { - "internalType": "uint256", - "name": "_pendingValidatorsLimit", - "type": "uint256" + "internalType": "address", + "name": "_operatorsRevenueSharing", + "type": "address" } ], "name": "upgrade", @@ -819,5 +940,9 @@ ], "stateMutability": "view", "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" } ] diff --git a/abi/Validators.json b/abi/PoolValidators.json similarity index 52% rename from abi/Validators.json rename to abi/PoolValidators.json index 134fc57b..58d4f66f 100644 --- a/abi/Validators.json +++ b/abi/PoolValidators.json @@ -1,4 +1,166 @@ [ + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "collateral", + "type": "uint256" + } + ], + "name": "CollateralDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "collateralRecipient", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "collateral", + "type": "uint256" + } + ], + "name": "CollateralWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "initializeMerkleRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "initializeMerkleProofs", + "type": "string" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "finalizeMerkleRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "finalizeMerkleProofs", + "type": "string" + } + ], + "name": "OperatorAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + } + ], + "name": "OperatorRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "refundedAmount", + "type": "uint256" + } + ], + "name": "OperatorSlashed", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "initializeMerkleRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "initializeMerkleProofs", + "type": "string" + }, + { + "indexed": true, + "internalType": "bytes32", + "name": "finalizeMerkleRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "finalizeMerkleProofs", + "type": "string" + } + ], + "name": "OperatorUpdated", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -115,7 +277,7 @@ }, { "inputs": [], - "name": "OPERATOR_ROLE", + "name": "PAUSER_ROLE", "outputs": [ { "internalType": "bytes32", @@ -127,27 +289,47 @@ "type": "function" }, { - "inputs": [], - "name": "PAUSER_ROLE", - "outputs": [ + "inputs": [ { - "internalType": "bytes32", - "name": "", - "type": "bytes32" + "internalType": "address", + "name": "_account", + "type": "address" } ], - "stateMutability": "view", + "name": "addAdmin", + "outputs": [], + "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", - "name": "_account", + "name": "_operator", "type": "address" + }, + { + "internalType": "bytes32", + "name": "initializeMerkleRoot", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "initializeMerkleProofs", + "type": "string" + }, + { + "internalType": "bytes32", + "name": "finalizeMerkleRoot", + "type": "bytes32" + }, + { + "internalType": "string", + "name": "finalizeMerkleProofs", + "type": "string" } ], - "name": "addAdmin", + "name": "addOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -160,7 +342,7 @@ "type": "address" } ], - "name": "addOperator", + "name": "addPauser", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -169,15 +351,108 @@ "inputs": [ { "internalType": "address", - "name": "_account", + "name": "", "type": "address" } ], - "name": "addPauser", + "name": "collaterals", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_operator", + "type": "address" + } + ], + "name": "depositCollateral", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "withdrawalCredentials", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "depositDataRoot", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct IPoolValidators.DepositData", + "name": "depositData", + "type": "tuple" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "name": "finalizeValidator", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "address", + "name": "_operator", + "type": "address" + } + ], + "name": "getOperator", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -296,7 +571,7 @@ }, { "internalType": "address", - "name": "_solos", + "name": "_oracles", "type": "address" } ], @@ -308,20 +583,46 @@ { "inputs": [ { - "internalType": "address", - "name": "_account", - "type": "address" - } - ], - "name": "isAdmin", - "outputs": [ + "components": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "withdrawalCredentials", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "depositDataRoot", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct IPoolValidators.DepositData", + "name": "depositData", + "type": "tuple" + }, { - "internalType": "bool", - "name": "", - "type": "bool" + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" } ], - "stateMutability": "view", + "name": "initializeValidator", + "outputs": [], + "stateMutability": "nonpayable", "type": "function" }, { @@ -332,7 +633,7 @@ "type": "address" } ], - "name": "isOperator", + "name": "isAdmin", "outputs": [ { "internalType": "bool", @@ -382,38 +683,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "publicKeys", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_validatorId", - "type": "bytes32" - } - ], - "name": "register", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -431,7 +700,7 @@ "inputs": [ { "internalType": "address", - "name": "_account", + "name": "_operator", "type": "address" } ], @@ -489,11 +758,88 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "withdrawalCredentials", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "depositDataRoot", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct IPoolValidators.DepositData", + "name": "depositData", + "type": "tuple" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "name": "slashOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "validatorStatuses", + "outputs": [ + { + "internalType": "enum IPoolValidators.ValidatorStatus", + "name": "", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "collateralRecipient", + "type": "address" + } + ], + "name": "withdrawCollateral", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" } ] diff --git a/abi/RevenueSharing.json b/abi/RevenueSharing.json index 22d747c3..1713da0e 100644 --- a/abi/RevenueSharing.json +++ b/abi/RevenueSharing.json @@ -8,12 +8,6 @@ "name": "beneficiary", "type": "address" }, - { - "indexed": true, - "internalType": "address", - "name": "claimer", - "type": "address" - }, { "indexed": true, "internalType": "uint128", @@ -68,25 +62,6 @@ "name": "AmountIncreased", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beneficiary", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "claimer", - "type": "address" - } - ], - "name": "ClaimerUpdated", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -111,9 +86,9 @@ }, { "indexed": true, - "internalType": "uint128", + "internalType": "uint256", "name": "revenueShare", - "type": "uint128" + "type": "uint256" }, { "indexed": false, @@ -285,11 +260,6 @@ }, { "inputs": [ - { - "internalType": "address", - "name": "claimer", - "type": "address" - }, { "internalType": "address", "name": "beneficiary", @@ -366,25 +336,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "claimers", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -524,7 +475,7 @@ }, { "internalType": "uint256", - "name": "amount", + "name": "addedAmount", "type": "uint256" } ], @@ -779,19 +730,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "newClaimer", - "type": "address" - } - ], - "name": "updateClaimer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -800,9 +738,9 @@ "type": "address" }, { - "internalType": "uint128", - "name": "revenueShare", - "type": "uint128" + "internalType": "uint256", + "name": "newRevenueShare", + "type": "uint256" } ], "name": "updateRevenueShare", diff --git a/contracts/Oracles.sol b/contracts/Oracles.sol index 6f9dde2e..c9af6a30 100644 --- a/contracts/Oracles.sol +++ b/contracts/Oracles.sol @@ -47,6 +47,9 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { // @dev Address of the Pool contract. IPool private pool; + // @dev Address of the Pool contract. + IPoolValidators private poolValidators; + // @dev Address of the MerkleDistributor contract. IMerkleDistributor private merkleDistributor; @@ -61,6 +64,7 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { address _prevOracles, address _rewardEthToken, address _pool, + address _poolValidators, address _merkleDistributor, uint256 _syncPeriod ) @@ -78,6 +82,7 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { rewardEthToken = IRewardEthToken(_rewardEthToken); pool = IPool(_pool); + poolValidators = IPoolValidators(_poolValidators); merkleDistributor = IMerkleDistributor(_merkleDistributor); syncPeriod = _syncPeriod; } @@ -138,14 +143,12 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { * @dev See {IOracles-submitRewards}. */ function submitRewards( - uint256 _nonce, uint256 totalRewards, uint256 activatedValidators, bytes[] memory signatures ) external override whenNotPaused { - require(_nonce == nonce.current(), "Oracles: invalid nonce"); require(isRewardsVoting(), "Oracles: too early"); require( signatures.length.mul(3) > getRoleMemberCount(ORACLE_ROLE).mul(2), @@ -153,6 +156,7 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { ); // calculate candidate ID hash + uint256 _nonce = nonce.current(); bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( keccak256(abi.encode(_nonce, totalRewards, activatedValidators)) ); @@ -187,14 +191,12 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { * @dev See {IOracles-submitMerkleRoot}. */ function submitMerkleRoot( - uint256 _nonce, bytes32 merkleRoot, string memory merkleProofs, bytes[] memory signatures ) external override whenNotPaused { - require(_nonce == nonce.current(), "Oracles: invalid nonce"); require(isMerkleRootVoting(), "Oracles: too early"); require( signatures.length.mul(3) > getRoleMemberCount(ORACLE_ROLE).mul(2), @@ -202,6 +204,7 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { ); // calculate candidate ID hash + uint256 _nonce = nonce.current(); bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( keccak256(abi.encode(_nonce, merkleRoot, merkleProofs)) ); @@ -231,21 +234,21 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { * @dev See {IOracles-initializeValidator}. */ function initializeValidator( - uint256 _nonce, - IPoolValidators.Validator memory validator, + IPoolValidators.DepositData memory depositData, + bytes32[] memory merkleProof, bytes[] memory signatures ) external override whenNotPaused { - require(_nonce == nonce.current(), "Oracles: invalid nonce"); require( signatures.length.mul(3) > getRoleMemberCount(ORACLE_ROLE).mul(2), "Oracles: invalid number of signatures" ); // calculate candidate ID hash + uint256 _nonce = nonce.current(); bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( - keccak256(abi.encode(_nonce, validator.merkleRoot, validator.index)) + keccak256(abi.encode(_nonce, depositData.publicKey, depositData.operator)) ); // check signatures and calculate number of submitted oracle votes @@ -259,35 +262,35 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { require(signedOracles[j] != signer, "Oracles: repeated signature"); } signedOracles[i] = signer; - emit InitializeValidatorVoteSubmitted(signer, validator.merkleRoot, validator.index, _nonce); + emit InitializeValidatorVoteSubmitted(signer, depositData.operator, depositData.publicKey, _nonce); } // increment nonce for future signatures nonce.increment(); // initialize validator - pool.initializeValidator(validator); + poolValidators.initializeValidator(depositData, merkleProof); } /** * @dev See {IOracles-finalizeValidator}. */ function finalizeValidator( - uint256 _nonce, - IPoolValidators.Validator memory validator, + IPoolValidators.DepositData memory depositData, + bytes32[] memory merkleProof, bytes[] memory signatures ) external override whenNotPaused { - require(_nonce == nonce.current(), "Oracles: invalid nonce"); require( signatures.length.mul(3) > getRoleMemberCount(ORACLE_ROLE).mul(2), "Oracles: invalid number of signatures" ); // calculate candidate ID hash + uint256 _nonce = nonce.current(); bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( - keccak256(abi.encode(_nonce, validator.merkleRoot, validator.index)) + keccak256(abi.encode(_nonce, depositData.publicKey, depositData.operator)) ); // check signatures and calculate number of submitted oracle votes @@ -301,13 +304,13 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { require(signedOracles[j] != signer, "Oracles: repeated signature"); } signedOracles[i] = signer; - emit FinalizeValidatorVoteSubmitted(signer, validator.merkleRoot, validator.index, _nonce); + emit FinalizeValidatorVoteSubmitted(signer, depositData.operator, depositData.publicKey, _nonce); } // increment nonce for future signatures nonce.increment(); // finalize validator - pool.finalizeValidator(validator); + poolValidators.finalizeValidator(depositData, merkleProof); } } diff --git a/contracts/RevenueSharing.sol b/contracts/RevenueSharing.sol index 362f35c7..c093b007 100644 --- a/contracts/RevenueSharing.sol +++ b/contracts/RevenueSharing.sol @@ -22,9 +22,6 @@ contract RevenueSharing is IRevenueSharing, OwnablePausableUpgradeable { // @dev Maps beneficiary address to the reward checkpoint. mapping(address => Checkpoint) public override checkpoints; - // @dev Maps beneficiary address to its rewards' claimer. - mapping(address => address) public override claimers; - // @dev Address of the Pool contract. address private pool; @@ -56,116 +53,135 @@ contract RevenueSharing is IRevenueSharing, OwnablePausableUpgradeable { /** * @dev See {IRevenueSharing-addAccount}. */ - function addAccount(address claimer, address beneficiary, uint128 revenueShare) external override onlyAdmin whenNotPaused { + function addAccount(address beneficiary, uint128 revenueShare) external override onlyAdmin whenNotPaused { require(checkpoints[beneficiary].revenueShare == 0, "RevenueSharing: account already added"); require(revenueShare > 0 && revenueShare <= 1e4, "RevenueSharing: invalid revenue share"); - require(claimer != address(0) && beneficiary != address(0), "RevenueSharing: invalid claimer or beneficiary"); + require(beneficiary != address(0), "RevenueSharing: invalid beneficiary"); // register new checkpoint checkpoints[beneficiary] = Checkpoint({ - amount : 0, - revenueShare : revenueShare, - unclaimedReward : 0, - rewardPerPoint : rewardPerPoint + amount: 0, + revenueShare: revenueShare, + unclaimedReward: 0, + rewardPerPoint: rewardPerPoint }); - - // register account that can claim rewards - claimers[beneficiary] = claimer; - emit AccountAdded(beneficiary, claimer, revenueShare); + emit AccountAdded(beneficiary, revenueShare); } /** * @dev See {IRevenueSharing-removeAccount}. */ function removeAccount(address beneficiary) external override onlyAdmin whenNotPaused { - Checkpoint memory checkpoint = checkpoints[beneficiary]; - require(checkpoint.revenueShare != 0, "RevenueSharing: account is not added"); - - // calculate unclaimed reward - uint256 accountPoints = uint256(checkpoint.amount).mul(checkpoint.revenueShare); - uint256 reward = _calculateReward( - accountPoints, + Checkpoint storage checkpoint = checkpoints[beneficiary]; + ( + uint256 amount, + uint256 revenueShare, + uint256 prevReward, + uint256 prevRewardPerPoint + ) = ( + checkpoint.amount, + checkpoint.revenueShare, checkpoint.unclaimedReward, - rewardPerPoint, checkpoint.rewardPerPoint ); + require(revenueShare != 0, "RevenueSharing: account is not added"); + + // calculate new reward + uint256 accountPoints = amount.mul(revenueShare); + uint256 newReward = _calculateReward(accountPoints, prevReward, prevRewardPerPoint, rewardPerPoint); // clean up account delete checkpoints[beneficiary]; - delete claimers[beneficiary]; totalPoints = uint256(totalPoints).sub(accountPoints).toUint128(); - if (reward > 0) { - rewardEthToken.safeTransfer(beneficiary, reward); + // transfer funds + if (newReward > 0) { + rewardEthToken.safeTransfer(beneficiary, newReward); } - emit AccountRemoved(beneficiary, reward); + emit AccountRemoved(beneficiary, newReward); } /** * @dev See {IRevenueSharing-updateRevenueShare}. */ - function updateRevenueShare(address beneficiary, uint128 revenueShare) external override onlyAdmin whenNotPaused { + function updateRevenueShare(address beneficiary, uint256 newRevenueShare) external override onlyAdmin whenNotPaused { Checkpoint storage checkpoint = checkpoints[beneficiary]; - require(checkpoint.revenueShare != 0, "RevenueSharing: account is not added"); - require(revenueShare > 0 && revenueShare <= 1e4 && checkpoint.revenueShare != revenueShare, "RevenueSharing: invalid revenue share"); - - // SLOAD for gas optimization - uint128 _rewardPerPoint = rewardPerPoint; - - // calculate unclaimed reward - uint256 prevPoints = uint256(checkpoint.amount).mul(checkpoint.revenueShare); - uint256 reward = _calculateReward( - prevPoints, + ( + uint256 amount, + uint256 prevRevenueShare, + uint256 prevReward, + uint256 prevRewardPerPoint + ) = ( + checkpoint.amount, + checkpoint.revenueShare, checkpoint.unclaimedReward, - rewardPerPoint, checkpoint.rewardPerPoint ); + require(prevRevenueShare != 0, "RevenueSharing: account is not added"); + require(newRevenueShare > 0 && newRevenueShare <= 1e4 && prevRevenueShare != newRevenueShare, "RevenueSharing: invalid revenue share"); + + // SLOAD for gas optimization + uint128 newRewardPerPoint = rewardPerPoint; + + // calculate new reward + uint256 prevPoints = amount.mul(prevRevenueShare); + uint256 newReward = _calculateReward(prevPoints, prevReward, prevRewardPerPoint, newRewardPerPoint); // update total points and checkpoint - totalPoints = uint256(totalPoints).sub(prevPoints).add(uint256(checkpoint.amount).mul(revenueShare)).toUint128(); - (checkpoint.revenueShare, checkpoint.rewardPerPoint, checkpoint.unclaimedReward) = (revenueShare, _rewardPerPoint, reward.toUint128()); - emit RevenueShareUpdated(beneficiary, revenueShare, reward); + totalPoints = uint256(totalPoints).sub(prevPoints).add(amount.mul(newRevenueShare)).toUint128(); + ( + checkpoint.revenueShare, + checkpoint.rewardPerPoint, + checkpoint.unclaimedReward + ) = ( + newRevenueShare.toUint128(), + newRewardPerPoint, + newReward.toUint128() + ); + emit RevenueShareUpdated(beneficiary, newRevenueShare, newReward); } /** * @dev See {IRevenueSharing-increaseAmount}. */ - function increaseAmount(address beneficiary, uint256 amount) external override whenNotPaused { + function increaseAmount(address beneficiary, uint256 addedAmount) external override whenNotPaused { require(msg.sender == pool || hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "RevenueSharing: access denied"); - require(amount > 0, "RevenueSharing: invalid amount"); + require(addedAmount > 0, "RevenueSharing: invalid amount"); Checkpoint storage checkpoint = checkpoints[beneficiary]; - require(checkpoint.revenueShare != 0, "RevenueSharing: account is not added"); - - // SLOAD for gas optimization - uint128 _rewardPerPoint = rewardPerPoint; - - // calculate unclaimed reward - uint256 prevPoints = uint256(checkpoint.amount).mul(checkpoint.revenueShare); - uint256 reward = _calculateReward( - prevPoints, + ( + uint256 prevAmount, + uint256 revenueShare, + uint256 prevReward, + uint256 prevRewardPerPoint + ) = ( + checkpoint.amount, + checkpoint.revenueShare, checkpoint.unclaimedReward, - rewardPerPoint, checkpoint.rewardPerPoint ); + require(revenueShare != 0, "RevenueSharing: account is not added"); - // update total points and checkpoint - uint256 newAmount = amount.add(checkpoint.amount); - totalPoints = uint256(totalPoints).sub(prevPoints).add(newAmount.mul(checkpoint.revenueShare)).toUint128(); - (checkpoint.amount, checkpoint.rewardPerPoint, checkpoint.unclaimedReward) = (newAmount.toUint128(), _rewardPerPoint, reward.toUint128()); - emit AmountIncreased(beneficiary, amount, reward); - } + // SLOAD for gas optimization + uint128 newRewardPerPoint = rewardPerPoint; - /** - * @dev See {IRevenueSharing-updateClaimer}. - */ - function updateClaimer(address newClaimer) external override whenNotPaused { - address prevClaimer = claimers[msg.sender]; - require(prevClaimer != address(0), "RevenueSharing: account is not added"); - require(newClaimer != address(0) && prevClaimer != newClaimer, "RevenueSharing: invalid new claimer"); + // calculate new reward + uint256 prevPoints = prevAmount.mul(revenueShare); + uint256 newReward = _calculateReward(prevPoints, prevReward, prevRewardPerPoint, newRewardPerPoint); - claimers[msg.sender] = newClaimer; - emit ClaimerUpdated(msg.sender, newClaimer); + // update total points and checkpoint + uint256 newAmount = prevAmount.add(addedAmount); + totalPoints = uint256(totalPoints).sub(prevPoints).add(newAmount.mul(revenueShare)).toUint128(); + ( + checkpoint.amount, + checkpoint.rewardPerPoint, + checkpoint.unclaimedReward + ) = ( + newAmount.toUint128(), + newRewardPerPoint, + newReward.toUint128() + ); + emit AmountIncreased(beneficiary, addedAmount, newReward); } /** @@ -187,8 +203,8 @@ contract RevenueSharing is IRevenueSharing, OwnablePausableUpgradeable { return _calculateReward( uint256(checkpoint.amount).mul(checkpoint.revenueShare), checkpoint.unclaimedReward, - rewardPerPoint, - checkpoint.rewardPerPoint + checkpoint.rewardPerPoint, + rewardPerPoint ); } @@ -202,7 +218,7 @@ contract RevenueSharing is IRevenueSharing, OwnablePausableUpgradeable { /** * @dev See {IRevenueSharing-collectRewards}. */ - function collectRewards(address[] calldata beneficiaries) external override whenNotPaused { + function collectRewards(address[] memory beneficiaries) external override whenNotPaused { for (uint256 i = 0; i < beneficiaries.length; i++) { _collectReward(beneficiaries[i]); } @@ -210,28 +226,38 @@ contract RevenueSharing is IRevenueSharing, OwnablePausableUpgradeable { function _collectReward(address beneficiary) internal { Checkpoint storage checkpoint = checkpoints[beneficiary]; - require(checkpoint.revenueShare != 0, "RevenueSharing: account is not added"); - require(beneficiary == msg.sender || claimers[beneficiary] == msg.sender, "RevenueSharing: access denied"); + ( + uint256 amount, + uint256 revenueShare, + uint256 prevReward, + uint256 prevRewardPerPoint + ) = ( + checkpoint.amount, + checkpoint.revenueShare, + checkpoint.unclaimedReward, + checkpoint.rewardPerPoint + ); + require(revenueShare != 0, "RevenueSharing: account is not added"); // SLOAD for gas optimization - uint128 _rewardPerPoint = rewardPerPoint; + uint128 newRewardPerPoint = rewardPerPoint; - // calculate unclaimed reward - uint256 accountPoints = uint256(checkpoint.amount).mul(checkpoint.revenueShare); - uint256 reward = _calculateReward( + // calculate new reward + uint256 accountPoints = amount.mul(revenueShare); + uint256 newReward = _calculateReward( accountPoints, - checkpoint.unclaimedReward, - rewardPerPoint, - checkpoint.rewardPerPoint + prevReward, + prevRewardPerPoint, + newRewardPerPoint ); - (checkpoint.rewardPerPoint, checkpoint.unclaimedReward) = (_rewardPerPoint, 0); + (checkpoint.rewardPerPoint, checkpoint.unclaimedReward) = (newRewardPerPoint, 0); - if (reward > 0) { - rewardEthToken.safeTransfer(beneficiary, reward); + if (newReward > 0) { + rewardEthToken.safeTransfer(beneficiary, newReward); } - emit RewardCollected(msg.sender, beneficiary, reward); + emit RewardCollected(msg.sender, beneficiary, newReward); } /** @@ -263,18 +289,18 @@ contract RevenueSharing is IRevenueSharing, OwnablePausableUpgradeable { function _calculateReward( uint256 points, - uint256 unclaimedReward, - uint256 newRewardPerPoint, - uint256 prevRewardPerPoint + uint256 prevReward, + uint256 prevRewardPerPoint, + uint256 newRewardPerPoint ) - internal pure returns (uint256 reward) + internal pure returns (uint256 newReward) { if (newRewardPerPoint > prevRewardPerPoint) { - reward = points.mul(newRewardPerPoint.sub(prevRewardPerPoint)).div(1e31); + newReward = points.mul(newRewardPerPoint.sub(prevRewardPerPoint)).div(1e31); } - if (unclaimedReward > 0) { - reward = reward.add(unclaimedReward); + if (prevReward > 0) { + newReward = newReward.add(prevReward); } } } diff --git a/contracts/Validators.sol b/contracts/Validators.sol deleted file mode 100644 index 6a1bbe07..00000000 --- a/contracts/Validators.sol +++ /dev/null @@ -1,70 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-only - -pragma solidity 0.7.5; - -import "./presets/OwnablePausableUpgradeable.sol"; -import "./interfaces/IValidators.sol"; - - -/** - * @title Validators - * - * @dev Validators contract keeps track of all the registered validators. - * Only collectors can register validators. - */ -contract Validators is IValidators, OwnablePausableUpgradeable { - bytes32 public constant OPERATOR_ROLE = keccak256("OPERATOR_ROLE"); - - // @dev Maps hash of the public key to whether it was already used. - mapping(bytes32 => bool) public override publicKeys; - - // @dev Address of the Pool contract. - address private pool; - - // @dev Address of the Solos contract. - address private solos; - - // @dev Checks whether the caller is the collector contract. - modifier onlyCollector() { - require(msg.sender == solos || msg.sender == pool, "Validators: access denied"); - _; - } - - /** - * @dev See {IValidators-initialize}. - */ - function initialize(address _admin, address _pool, address _solos) external override initializer { - __OwnablePausableUpgradeable_init(_admin); - pool = _pool; - solos = _solos; - } - - /** - * @dev See {IValidators-isOperator}. - */ - function isOperator(address _account) external override view returns (bool) { - return hasRole(OPERATOR_ROLE, _account); - } - - /** - * @dev See {IValidators-addOperator}. - */ - function addOperator(address _account) external override { - grantRole(OPERATOR_ROLE, _account); - } - - /** - * @dev See {IValidators-removeOperator}. - */ - function removeOperator(address _account) external override { - revokeRole(OPERATOR_ROLE, _account); - } - - /** - * @dev See {IValidators-register}. - */ - function register(bytes32 _validatorId) external override onlyCollector whenNotPaused { - require(!publicKeys[_validatorId], "Validators: invalid public key"); - publicKeys[_validatorId] = true; - } -} diff --git a/contracts/collectors/Pool.sol b/contracts/collectors/Pool.sol deleted file mode 100644 index a6e03b32..00000000 --- a/contracts/collectors/Pool.sol +++ /dev/null @@ -1,205 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-only - -pragma solidity 0.7.5; -pragma abicoder v2; - -import "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol"; -import "../presets/OwnablePausableUpgradeable.sol"; -import "../interfaces/IStakedEthToken.sol"; -import "../interfaces/IDepositContract.sol"; -import "../interfaces/IValidators.sol"; -import "../interfaces/IPool.sol"; - -/** - * @title Pool - * - * @dev Pool contract accumulates deposits from the users, mints tokens and registers validators. - */ -contract Pool is IPool, OwnablePausableUpgradeable { - using SafeMathUpgradeable for uint256; - - // @dev Validator deposit amount. - uint256 public constant VALIDATOR_DEPOSIT = 32 ether; - - // @dev Total activated validators. - uint256 public override activatedValidators; - - // @dev Pool validator withdrawal credentials. - bytes32 public override withdrawalCredentials; - - // @dev Address of the ETH2 Deposit Contract (deployed by Ethereum). - IDepositContract public override validatorRegistration; - - // @dev Address of the StakedEthToken contract. - IStakedEthToken private stakedEthToken; - - // @dev Address of the Validators contract. - IValidators private validators; - - // @dev Address of the Oracles contract. - address private oracles; - - // @dev Maps senders to the validator index that it will be activated in. - mapping(address => mapping(uint256 => uint256)) public override activations; - - // @dev Total pending validators. - uint256 public override pendingValidators; - - // @dev Amount of deposited ETH that is not considered for the activation period. - uint256 public override minActivatingDeposit; - - // @dev Pending validators percent limit. If it's not exceeded tokens can be minted immediately. - uint256 public override pendingValidatorsLimit; - - /** - * @dev See {IPool-upgrade}. - * The `initialize` must be called before upgrading in previous implementation contract: - * https://github.com/stakewise/contracts/blob/v1.0.0/contracts/collectors/Pool.sol#L42 - */ - function upgrade( - address _oracles, - uint256 _activatedValidators, - uint256 _pendingValidators, - uint256 _minActivatingDeposit, - uint256 _pendingValidatorsLimit - ) - external override onlyAdmin whenPaused - { - require(oracles == address(0), "Pool: already upgraded"); - oracles = _oracles; - - pendingValidators = _pendingValidators; - activatedValidators = _activatedValidators; - emit ActivatedValidatorsUpdated(_activatedValidators, msg.sender); - - minActivatingDeposit = _minActivatingDeposit; - emit MinActivatingDepositUpdated(_minActivatingDeposit, msg.sender); - - pendingValidatorsLimit = _pendingValidatorsLimit; - emit PendingValidatorsLimitUpdated(_pendingValidatorsLimit, msg.sender); - } - - /** - * @dev See {IPool-setWithdrawalCredentials}. - */ - function setWithdrawalCredentials(bytes32 _withdrawalCredentials) external override onlyAdmin { - withdrawalCredentials = _withdrawalCredentials; - emit WithdrawalCredentialsUpdated(_withdrawalCredentials); - } - - /** - * @dev See {IPool-setMinActivatingDeposit}. - */ - function setMinActivatingDeposit(uint256 _minActivatingDeposit) external override onlyAdmin { - minActivatingDeposit = _minActivatingDeposit; - emit MinActivatingDepositUpdated(_minActivatingDeposit, msg.sender); - } - - /** - * @dev See {IPool-setPendingValidatorsLimit}. - */ - function setPendingValidatorsLimit(uint256 _pendingValidatorsLimit) external override onlyAdmin { - require(_pendingValidatorsLimit < 10000, "Pool: invalid limit"); - pendingValidatorsLimit = _pendingValidatorsLimit; - emit PendingValidatorsLimitUpdated(_pendingValidatorsLimit, msg.sender); - } - - /** - * @dev See {IPool-setActivatedValidators}. - */ - function setActivatedValidators(uint256 newActivatedValidators) external override { - require(msg.sender == oracles || hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Pool: access denied"); - - // subtract activated validators from pending validators - pendingValidators = pendingValidators.sub(newActivatedValidators.sub(activatedValidators)); - activatedValidators = newActivatedValidators; - emit ActivatedValidatorsUpdated(newActivatedValidators, msg.sender); - } - - /** - * @dev See {IPool-addDeposit}. - */ - function addDeposit() external payable override whenNotPaused { - require(msg.value > 0, "Pool: invalid deposit amount"); - - // mint tokens for small deposits immediately - if (msg.value <= minActivatingDeposit) { - stakedEthToken.mint(msg.sender, msg.value); - return; - } - - // mint tokens if current pending validators limit is not exceed - uint256 _pendingValidators = pendingValidators.add((address(this).balance).div(VALIDATOR_DEPOSIT)); - uint256 _activatedValidators = activatedValidators; // gas savings - uint256 validatorIndex = _activatedValidators.add(_pendingValidators); - if (validatorIndex.mul(1e4) <= _activatedValidators.mul(pendingValidatorsLimit.add(1e4))) { - stakedEthToken.mint(msg.sender, msg.value); - } else { - // lock deposit amount until validator activated - activations[msg.sender][validatorIndex] = activations[msg.sender][validatorIndex].add(msg.value); - emit ActivationScheduled(msg.sender, validatorIndex, msg.value); - } - } - - /** - * @dev See {IPool-canActivate}. - */ - function canActivate(uint256 _validatorIndex) external view override returns (bool) { - return _validatorIndex.mul(1e4) <= activatedValidators.mul(pendingValidatorsLimit.add(1e4)); - } - - /** - * @dev See {IPool-activate}. - */ - function activate(address _account, uint256 _validatorIndex) external override whenNotPaused { - require(_validatorIndex.mul(1e4) <= activatedValidators.mul(pendingValidatorsLimit.add(1e4)), "Pool: validator is not active yet"); - - uint256 amount = activations[_account][_validatorIndex]; - require(amount > 0, "Pool: invalid validator index"); - - delete activations[_account][_validatorIndex]; - stakedEthToken.mint(_account, amount); - emit Activated(_account, _validatorIndex, amount, msg.sender); - } - - /** - * @dev See {IPool-activateMultiple}. - */ - function activateMultiple(address _account, uint256[] calldata _validatorIndexes) external override whenNotPaused { - uint256 toMint; - uint256 _activatedValidators = activatedValidators; - for (uint256 i = 0; i < _validatorIndexes.length; i++) { - uint256 validatorIndex = _validatorIndexes[i]; - require(validatorIndex.mul(1e4) <= _activatedValidators.mul(pendingValidatorsLimit.add(1e4)), "Pool: validator is not active yet"); - - uint256 amount = activations[_account][validatorIndex]; - toMint = toMint.add(amount); - delete activations[_account][validatorIndex]; - - emit Activated(_account, validatorIndex, amount, msg.sender); - } - require(toMint > 0, "Pool: invalid validator index"); - stakedEthToken.mint(_account, toMint); - } - - /** - * @dev See {IPool-registerValidator}. - */ - function registerValidator(Validator calldata _validator) external override whenNotPaused { - require(validators.isOperator(msg.sender), "Pool: access denied"); - - // register validator - validators.register(keccak256(abi.encodePacked(_validator.publicKey))); - emit ValidatorRegistered(_validator.publicKey, msg.sender); - - // update number of pending validators - pendingValidators = pendingValidators.add(1); - - validatorRegistration.deposit{value : VALIDATOR_DEPOSIT}( - _validator.publicKey, - abi.encodePacked(withdrawalCredentials), - _validator.signature, - _validator.depositDataRoot - ); - } -} diff --git a/contracts/interfaces/IOracles.sol b/contracts/interfaces/IOracles.sol index 91e43e36..f63d43f9 100644 --- a/contracts/interfaces/IOracles.sol +++ b/contracts/interfaces/IOracles.sol @@ -47,28 +47,28 @@ interface IOracles { /** * @dev Event for tracking validator initialization votes. * @param signer - address of the signed oracle. - * @param merkleRoot - validator initialization merkle root. - * @param index - validator initialization index. + * @param operator - address of the operator the vote was sent for. + * @param publicKey - public key of the validator the vote was sent for. * @param nonce - validator initialization nonce. */ event InitializeValidatorVoteSubmitted( address indexed signer, - bytes32 indexed merkleRoot, - uint256 index, + address indexed operator, + bytes publicKey, uint256 nonce ); /** * @dev Event for tracking validator finalization votes. * @param signer - address of the signed oracle. - * @param merkleRoot - validator finalization merkle root. - * @param index - validator finalization index. + * @param operator - address of the operator the vote was sent for. + * @param publicKey - public key of the validator the vote was sent for. * @param nonce - validator finalization nonce. */ event FinalizeValidatorVoteSubmitted( address indexed signer, - bytes32 indexed merkleRoot, - uint256 index, + address indexed operator, + bytes publicKey, uint256 nonce ); @@ -83,6 +83,7 @@ interface IOracles { * @param _prevOracles - address of the previous Oracles contract. * @param _rewardEthToken - address of the RewardEthToken contract. * @param _pool - address of the Pool contract. + * @param _poolValidators - address of the PoolValidators contract. * @param _merkleDistributor - address of the MerkleDistributor contract. * @param _syncPeriod - oracles sync period (in blocks). */ @@ -91,6 +92,7 @@ interface IOracles { address _prevOracles, address _rewardEthToken, address _pool, + address _poolValidators, address _merkleDistributor, uint256 _syncPeriod ) external; @@ -140,13 +142,11 @@ interface IOracles { /** * @dev Function for submitting oracle vote for total rewards. * The quorum of signatures over the same data is required to submit the new value. - * @param _nonce - current nonce. * @param totalRewards - voted total rewards. * @param activatedValidators - voted amount of activated validators. * @param signatures - oracles' signatures. */ function submitRewards( - uint256 _nonce, uint256 totalRewards, uint256 activatedValidators, bytes[] calldata signatures @@ -155,41 +155,39 @@ interface IOracles { /** * @dev Function for submitting new merkle root. * The quorum of signatures over the same data is required to submit the new value. - * @param _nonce - current nonce. * @param merkleRoot - hash of the new merkle root. * @param merkleProofs - link to the merkle proofs. * @param signatures - oracles' signatures. */ function submitMerkleRoot( - uint256 _nonce, bytes32 merkleRoot, string memory merkleProofs, bytes[] memory signatures ) external; /** - * @dev Function for submitting initializing new validator. + * @dev Function for submitting initialization of the new validator. * The quorum of signatures over the same data is required to initialize. - * @param _nonce - current nonce. - * @param validator - new validator. + * @param depositData - the deposit data for the initialization. + * @param merkleProof - an array of hashes to verify whether the deposit data is part of the initialize merkle root. * @param signatures - oracles' signatures. */ function initializeValidator( - uint256 _nonce, - IPoolValidators.Validator memory validator, + IPoolValidators.DepositData memory depositData, + bytes32[] memory merkleProof, bytes[] memory signatures ) external; /** - * @dev Function for submitting finalizing new validator. + * @dev Function for submitting finalization of the new validator. * The quorum of signatures over the same data is required to finalize. - * @param _nonce - current nonce. - * @param validator - new validator. + * @param depositData - the deposit data for the finalization. + * @param merkleProof - an array of hashes to verify whether the deposit data is part of the finalize merkle root. * @param signatures - oracles' signatures. */ function finalizeValidator( - uint256 _nonce, - IPoolValidators.Validator memory validator, + IPoolValidators.DepositData memory depositData, + bytes32[] memory merkleProof, bytes[] memory signatures ) external; } diff --git a/contracts/interfaces/IPool.sol b/contracts/interfaces/IPool.sol index 4e1c878e..886756db 100644 --- a/contracts/interfaces/IPool.sol +++ b/contracts/interfaces/IPool.sol @@ -4,23 +4,32 @@ pragma solidity 0.7.5; pragma abicoder v2; import "./IDepositContract.sol"; +import "./IPoolValidators.sol"; /** * @dev Interface of the Pool contract. */ interface IPool { /** - * @dev Event for tracking new pool withdrawal credentials. - * @param withdrawalCredentials - new withdrawal credentials for the pool validators. + * @dev Event for tracking initialized validators. + * @param publicKey - validator public key. + * @param operator - address of the validator operator. */ - event WithdrawalCredentialsUpdated(bytes32 withdrawalCredentials); + event ValidatorInitialized(bytes indexed publicKey, address indexed operator); /** * @dev Event for tracking registered validators. * @param publicKey - validator public key. * @param operator - address of the validator operator. */ - event ValidatorRegistered(bytes publicKey, address operator); + event ValidatorRegistered(bytes indexed publicKey, address indexed operator); + + /** + * @dev Event for tracking refunds. + * @param sender - address of the refund sender. + * @param amount - refunded amount. + */ + event Refunded(address indexed sender, uint256 amount); /** * @dev Event for tracking scheduled deposit activation. @@ -61,34 +70,30 @@ interface IPool { */ event PendingValidatorsLimitUpdated(uint256 pendingValidatorsLimit, address sender); - /** - * @dev Structure for passing information about new Validator. - * @param publicKey - BLS public key of the validator, generated by the operator. - * @param signature - BLS signature of the validator, generated by the operator. - * @param depositDataRoot - hash tree root of the deposit data, generated by the operator. - */ - struct Validator { - bytes publicKey; - bytes signature; - bytes32 depositDataRoot; - } - /** * @dev Function for upgrading the Pools contract. + * @param _poolValidators - address of the PoolValidators contract. * @param _oracles - address of the Oracles contract. - * @param _activatedValidators - initial amount of activated validators. - * @param _pendingValidators - initial amount of pending validators. - * @param _minActivatingDeposit - minimal deposit in Wei to be considered for the activation period. - * @param _pendingValidatorsLimit - pending validators percent limit. If it's not exceeded tokens can be minted immediately. + * @param _partnersRevenueSharing - address of the PartnersRevenueSharing contract. + * @param _operatorsRevenueSharing - address of the OperatorsRevenueSharing contract. */ function upgrade( + address _poolValidators, address _oracles, - uint256 _activatedValidators, - uint256 _pendingValidators, - uint256 _minActivatingDeposit, - uint256 _pendingValidatorsLimit + address _partnersRevenueSharing, + address _operatorsRevenueSharing ) external; + /** + * @dev Function for getting the total validator deposit. + */ + function VALIDATOR_TOTAL_DEPOSIT() external view returns (uint256); + + /** + * @dev Function for getting the initial validator deposit. + */ + function VALIDATOR_INIT_DEPOSIT() external view returns (uint256); + /** * @dev Function for getting the total amount of pending validators. */ @@ -125,33 +130,27 @@ interface IPool { /** * @dev Function for setting minimal deposit amount considered for the activation period. - * @param _minActivatingDeposit - new minimal deposit amount considered for the activation. - */ - function setMinActivatingDeposit(uint256 _minActivatingDeposit) external; - - /** - * @dev Function for changing withdrawal credentials. - * @param _withdrawalCredentials - new withdrawal credentials for the pool validators. + * @param newMinActivatingDeposit - new minimal deposit amount considered for the activation. */ - function setWithdrawalCredentials(bytes32 _withdrawalCredentials) external; + function setMinActivatingDeposit(uint256 newMinActivatingDeposit) external; /** * @dev Function for changing the total amount of activated validators. - * @param _activatedValidators - new total amount of activated validators. + * @param newActivatedValidators - new total amount of activated validators. */ - function setActivatedValidators(uint256 _activatedValidators) external; + function setActivatedValidators(uint256 newActivatedValidators) external; /** * @dev Function for changing pending validators limit. - * @param _pendingValidatorsLimit - new pending validators limit. When it's exceeded, the deposits will be set for the activation. + * @param newPendingValidatorsLimit - new pending validators limit. When it's exceeded, the deposits will be set for the activation. */ - function setPendingValidatorsLimit(uint256 _pendingValidatorsLimit) external; + function setPendingValidatorsLimit(uint256 newPendingValidatorsLimit) external; /** * @dev Function for checking whether validator index can be activated. - * @param _validatorIndex - index of the validator to check. + * @param validatorIndex - index of the validator to check. */ - function canActivate(uint256 _validatorIndex) external view returns (bool); + function canActivate(uint256 validatorIndex) external view returns (bool); /** * @dev Function for retrieving the validator registration contract address. @@ -159,27 +158,59 @@ interface IPool { function validatorRegistration() external view returns (IDepositContract); /** - * @dev Function for adding deposits to the pool. + * @dev Function for staking ether to the pool to the different tokens' recipient. + * @param recipient - address of the tokens recipient. */ - function addDeposit() external payable; + function stakeOnBehalf(address recipient) external payable; + + /** + * @dev Function for staking ether to the pool. + */ + function stake() external payable; + + /** + * @dev Function for staking ether with the partner that will receive the revenue share from the protocol fee. + * @param partner - address of partner who will get its contributed amount increased. + */ + function stakeWithPartner(address partner) external payable; + + /** + * @dev Function for staking ether with the partner that will receive the revenue share from the protocol fee + * and the different tokens' recipient. + * @param partner - address of partner who will get its contributed amount increased. + * @param recipient - address of the tokens recipient. + */ + function stakeWithPartnerOnBehalf(address partner, address recipient) external payable; /** * @dev Function for minting account's tokens for the specific validator index. - * @param _account - account address to activate the tokens for. - * @param _validatorIndex - index of the activated validator. + * @param account - account address to activate the tokens for. + * @param validatorIndex - index of the activated validator. */ - function activate(address _account, uint256 _validatorIndex) external; + function activate(address account, uint256 validatorIndex) external; /** * @dev Function for minting account's tokens for the specific validator indexes. - * @param _account - account address to activate the tokens for. - * @param _validatorIndexes - list of activated validator indexes. + * @param account - account address to activate the tokens for. + * @param validatorIndexes - list of activated validator indexes. + */ + function activateMultiple(address account, uint256[] calldata validatorIndexes) external; + + /** + * @dev Function for initializing new pool validator. + * @param depositData - the deposit data to submit for the validator. + */ + function initializeValidator(IPoolValidators.DepositData memory depositData) external; + + /** + * @dev Function for finalizing new pool validator registration. + * @param depositData - the deposit data to submit for the validator. */ - function activateMultiple(address _account, uint256[] calldata _validatorIndexes) external; + function finalizeValidator(IPoolValidators.DepositData memory depositData) external; /** - * @dev Function for registering new pool validator. - * @param _validator - validator to register. + * @dev Function for refunding to the pool. + * Can only be executed by the account with admin role. */ - function registerValidator(Validator calldata _validator) external; + function refund() external payable; } diff --git a/contracts/interfaces/IPoolValidators.sol b/contracts/interfaces/IPoolValidators.sol new file mode 100644 index 00000000..a92bc3c6 --- /dev/null +++ b/contracts/interfaces/IPoolValidators.sol @@ -0,0 +1,203 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +pragma solidity 0.7.5; +pragma abicoder v2; + +/** + * @dev Interface of the PoolValidators contract. + */ +interface IPoolValidators { + /** + * @dev Structure for storing operator data. + * @param initializeMerkleRoot - validators registration initialization merkle root. + * @param finalizeMerkleRoot - validators registration finalization merkle root. + * @param locked - defines whether operator is currently locked. + */ + struct Operator { + bytes32 initializeMerkleRoot; + bytes32 finalizeMerkleRoot; + bool locked; + } + + /** + * @dev Structure for passing information about the validator deposit data. + * @param operator - address of the operator. + * @param withdrawalCredentials - withdrawal credentials used for generating the deposit data. + * @param depositDataRoot - hash tree root of the deposit data, generated by the operator. + * @param publicKey - BLS public key of the validator, generated by the operator. + * @param signature - BLS signature of the validator, generated by the operator. + */ + struct DepositData { + address operator; + bytes32 withdrawalCredentials; + bytes32 depositDataRoot; + bytes publicKey; + bytes signature; + } + + /** + * @dev Enum to track status of the validator registration. + * @param Uninitialized - validator has not been initialized. + * @param Initialized - 1 ether deposit has been made to the ETH2 registration contract for the public key. + * @param Finalized - 31 ether deposit has been made to the ETH2 registration contract for the public key. + * @param Failed - 1 ether deposit has failed as it was assigned to the different from the protocol's withdrawal key. + */ + enum ValidatorStatus { Uninitialized, Initialized, Finalized, Failed } + + /** + * @dev Event for tracking new operators. + * @param operator - address of the operator. + * @param initializeMerkleRoot - validators initialization merkle root. + * @param initializeMerkleProofs - validators initialization merkle proofs. + * @param finalizeMerkleRoot - validators finalization merkle root. + * @param finalizeMerkleProofs - validators finalization merkle proofs. + */ + event OperatorAdded( + address indexed operator, + bytes32 indexed initializeMerkleRoot, + string initializeMerkleProofs, + bytes32 indexed finalizeMerkleRoot, + string finalizeMerkleProofs + ); + + /** + * @dev Event for tracking operator's collateral deposit. + * @param operator - address of the operator. + * @param collateral - amount deposited. + */ + event CollateralDeposited( + address indexed operator, + uint256 collateral + ); + + /** + * @dev Event for tracking operator's collateral withdrawals. + * @param operator - address of the operator. + * @param collateralRecipient - address of the collateral recipient. + * @param collateral - amount withdrawn. + */ + event CollateralWithdrawn( + address indexed operator, + address indexed collateralRecipient, + uint256 collateral + ); + + /** + * @dev Event for tracking existing operators updates. + * @param operator - address of the operator. + * @param initializeMerkleRoot - validators initialization merkle root. + * @param initializeMerkleProofs - validators initialization merkle proofs. + * @param finalizeMerkleRoot - validators finalization merkle root. + * @param finalizeMerkleProofs - validators finalization merkle proofs. + */ + event OperatorUpdated( + address indexed operator, + bytes32 indexed initializeMerkleRoot, + string initializeMerkleProofs, + bytes32 indexed finalizeMerkleRoot, + string finalizeMerkleProofs + ); + + /** + * @dev Event for tracking operators' removals. + * @param sender - address of the transaction sender. + * @param operator - address of the operator. + */ + event OperatorRemoved( + address indexed sender, + address indexed operator + ); + + /** + * @dev Event for tracking operators' slashes. + * @param operator - address of the operator. + * @param publicKey - public key of the slashed validator. + * @param refundedAmount - amount refunded to the pool. + */ + event OperatorSlashed( + address indexed operator, + bytes indexed publicKey, + uint256 refundedAmount + ); + + /** + * @dev Constructor for initializing the PoolValidators contract. + * @param _admin - address of the contract admin. + * @param _pool - address of the Pool contract. + * @param _oracles - address of the Oracles contract. + */ + function initialize(address _admin, address _pool, address _oracles) external; + + /** + * @dev Function for retrieving the operator. + * @param _operator - address of the operator to retrieve the data for. + */ + function getOperator(address _operator) external view returns (bytes32, bytes32, bool); + + /** + * @dev Function for retrieving the collateral of the operator. + * @param operator - address of the operator to retrieve the collateral for. + */ + function collaterals(address operator) external view returns (uint256); + + /** + * @dev Function for retrieving registration status of the validator. + * @param validatorId - hash of the validator public key to receive the status for. + */ + function validatorStatuses(bytes32 validatorId) external view returns (ValidatorStatus); + + /** + * @dev Function for adding new operator. + * @param _operator - address of the operator to add or update. + * @param initializeMerkleRoot - validators initialization merkle root. + * @param initializeMerkleProofs - validators initialization merkle proofs. + * @param finalizeMerkleRoot - validators finalization merkle root. + * @param finalizeMerkleProofs - validators finalization merkle proofs. + */ + function addOperator( + address _operator, + bytes32 initializeMerkleRoot, + string memory initializeMerkleProofs, + bytes32 finalizeMerkleRoot, + string memory finalizeMerkleProofs + ) external; + + /** + * @dev Function for adding operator's collateral. + * @param _operator - address of the operator to add a collateral for. + */ + function depositCollateral(address _operator) external payable; + + /** + * @dev Function for withdrawing operator's collateral. Can only be called when the operator was removed. + * @param collateralRecipient - address of the collateral recipient. + */ + function withdrawCollateral(address payable collateralRecipient) external; + + /** + * @dev Function for removing operator. Can be called either by operator or admin. + * @param _operator - address of the operator to remove. + */ + function removeOperator(address _operator) external; + + /** + * @dev Function for slashing the operator registration. + * @param depositData - deposit data of the validator to slash. + * @param merkleProof - an array of hashes to verify whether the deposit data is part of the initialize merkle root. + */ + function slashOperator(DepositData memory depositData, bytes32[] memory merkleProof) external; + + /** + * @dev Function for initializing the operator. + * @param depositData - deposit data of the validator to initialize. + * @param merkleProof - an array of hashes to verify whether the deposit data is part of the initialize merkle root. + */ + function initializeValidator(DepositData memory depositData, bytes32[] memory merkleProof) external; + + /** + * @dev Function for finalizing the operator. + * @param depositData - deposit data of the validator to finalize. + * @param merkleProof - an array of hashes to verify whether the deposit data is part of the finalize merkle root. + */ + function finalizeValidator(DepositData memory depositData, bytes32[] memory merkleProof) external; +} diff --git a/contracts/interfaces/IRevenueSharing.sol b/contracts/interfaces/IRevenueSharing.sol index 790ba70e..b759e306 100644 --- a/contracts/interfaces/IRevenueSharing.sol +++ b/contracts/interfaces/IRevenueSharing.sol @@ -23,12 +23,10 @@ interface IRevenueSharing { /** * @dev Event for tracking new accounts. * @param beneficiary - address where the reward will be transferred. - * @param claimer - address that can execute collection of the rewards. * @param revenueShare - revenue share percentage. */ event AccountAdded( address indexed beneficiary, - address indexed claimer, uint128 indexed revenueShare ); @@ -50,7 +48,7 @@ interface IRevenueSharing { */ event RevenueShareUpdated( address indexed beneficiary, - uint128 indexed revenueShare, + uint256 indexed revenueShare, uint256 reward ); @@ -88,16 +86,6 @@ interface IRevenueSharing { uint256 periodReward ); - /** - * @dev Event for tracking the claimer updates. - * @param beneficiary - address of the beneficiary. - * @param claimer - new claimer address. - */ - event ClaimerUpdated( - address indexed beneficiary, - address indexed claimer - ); - /** * @dev Function for getting the total allocated points. */ @@ -122,31 +110,18 @@ interface IRevenueSharing { */ function checkpoints(address beneficiary) external view returns (uint128, uint128, uint128, uint128); - /** - * @dev Function for retrieving beneficiary's claimer. - * @param beneficiary - address of the beneficiary account. - */ - function claimers(address beneficiary) external view returns (address); - /** * @dev Function for checking whether the beneficiary address is added. * @param beneficiary - address of the beneficiary account. */ function isAdded(address beneficiary) external view returns (bool); - /** - * @dev Function for updating the claimer. - * @param newClaimer - the new address of the claimer that can execute collection of rewards. - */ - function updateClaimer(address newClaimer) external; - /** * @dev Function for adding new account. - * @param claimer - the address of the claimer that can execute collection of rewards. * @param beneficiary - the address of the beneficiary, where the rewards are directed. * @param revenueShare - the revenue share that the account will earn (up to 10000 (100.00%)). */ - function addAccount(address claimer, address beneficiary, uint128 revenueShare) external; + function addAccount(address beneficiary, uint128 revenueShare) external; /** * @dev Function for removing account. @@ -159,7 +134,7 @@ interface IRevenueSharing { * @param beneficiary - the address of the beneficiary to update the revenue share for. * @param revenueShare - the new revenue share. */ - function updateRevenueShare(address beneficiary, uint128 revenueShare) external; + function updateRevenueShare(address beneficiary, uint256 revenueShare) external; /** * @dev Function for increasing account's contributed amount. @@ -169,14 +144,14 @@ interface IRevenueSharing { function increaseAmount(address beneficiary, uint256 amount) external; /** - * @dev Function for collecting reward. Can be called by beneficiary or claimer. + * @dev Function for collecting reward. Can be executed by anyone, rewards are directed to beneficiary. * @param beneficiary - the address of the beneficiary to collect rewards for. */ function collectReward(address beneficiary) external; /** - * @dev Function for collecting rewards. Can be called by beneficiary or claimer. - * @param beneficiaries - the list of beneficiaries to collect the rewards for. Must have the same claimer. + * @dev Function for collecting rewards for several beneficiaries in single transaction. + * @param beneficiaries - the list of beneficiaries to collect the rewards for. */ function collectRewards(address[] calldata beneficiaries) external; diff --git a/contracts/interfaces/IValidators.sol b/contracts/interfaces/IValidators.sol deleted file mode 100644 index 1f8a884f..00000000 --- a/contracts/interfaces/IValidators.sol +++ /dev/null @@ -1,48 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-only - -pragma solidity 0.7.5; - -/** - * @dev Interface of the Validators contract. - */ -interface IValidators { - /** - * @dev Constructor for initializing the Validators contract. - * @param _admin - address of the contract admin. - * @param _pool - address of the Pool contract. - * @param _solos - address of the Solos contract. - */ - function initialize(address _admin, address _pool, address _solos) external; - - /** - * @dev Function for checking whether an account has an operator role. - * @param _account - account to check. - */ - function isOperator(address _account) external view returns (bool); - - /** - * @dev Function for adding an operator role to the account. - * Can only be called by an account with an admin role. - * @param _account - account to assign an operator role to. - */ - function addOperator(address _account) external; - - /** - * @dev Function for removing an operator role from the account. - * Can only be called by an account with an admin role. - * @param _account - account to remove an operator role from. - */ - function removeOperator(address _account) external; - - /** - * @dev Function for checking whether public key was already used. - * @param _publicKey - hash of public key to check. - */ - function publicKeys(bytes32 _publicKey) external view returns (bool); - - /** - * @dev Function for registering validators. Can only be called by collectors. - * @param _validatorId - ID of the validator. - */ - function register(bytes32 _validatorId) external; -} diff --git a/contracts/mocks/MulticallMock.sol b/contracts/mocks/MulticallMock.sol index 37e35bee..e9aa84a8 100644 --- a/contracts/mocks/MulticallMock.sol +++ b/contracts/mocks/MulticallMock.sol @@ -42,7 +42,7 @@ contract MulticallMock { external { rewardEthToken.transferFrom(msg.sender, payee, rewardEthToken.balanceOf(msg.sender)); - oracles.submitRewards(oracles.currentNonce(), totalRewards, activatedValidators, signatures); + oracles.submitRewards(totalRewards, activatedValidators, signatures); } function updateTotalRewardsAndTransferRewards( @@ -53,7 +53,7 @@ contract MulticallMock { ) external { - oracles.submitRewards(oracles.currentNonce(), totalRewards, activatedValidators, signatures); + oracles.submitRewards(totalRewards, activatedValidators, signatures); rewardEthToken.transferFrom(msg.sender, payee, rewardEthToken.balanceOf(msg.sender)); } @@ -67,7 +67,7 @@ contract MulticallMock { ) external { - oracles.submitRewards(oracles.currentNonce(), oracleRewards.totalRewards, oracleRewards.activatedValidators, oracleRewards.signatures); + oracles.submitRewards(oracleRewards.totalRewards, oracleRewards.activatedValidators, oracleRewards.signatures); merkleDistributor.claim(index, account, tokens, amounts, merkleProof); } @@ -82,7 +82,7 @@ contract MulticallMock { external { merkleDistributor.claim(index, account, tokens, amounts, merkleProof); - oracles.submitRewards(oracles.currentNonce(), oracleRewards.totalRewards, oracleRewards.activatedValidators, oracleRewards.signatures); + oracles.submitRewards(oracleRewards.totalRewards, oracleRewards.activatedValidators, oracleRewards.signatures); } function claimAndUpdateMerkleRoot( @@ -96,7 +96,7 @@ contract MulticallMock { external { merkleDistributor.claim(index, account, tokens, amounts, merkleProof); - oracles.submitMerkleRoot(oracles.currentNonce(), merkleRoot.merkleRoot, merkleRoot.merkleProofs, merkleRoot.signatures); + oracles.submitMerkleRoot(merkleRoot.merkleRoot, merkleRoot.merkleProofs, merkleRoot.signatures); } function updateMerkleRootAndClaim( @@ -109,7 +109,7 @@ contract MulticallMock { ) external { - oracles.submitMerkleRoot(oracles.currentNonce(), merkleRoot.merkleRoot, merkleRoot.merkleProofs, merkleRoot.signatures); + oracles.submitMerkleRoot(merkleRoot.merkleRoot, merkleRoot.merkleProofs, merkleRoot.signatures); merkleDistributor.claim(index, account, tokens, amounts, merkleProof); } @@ -121,7 +121,7 @@ contract MulticallMock { ) external { - oracles.submitRewards(oracles.currentNonce(), totalRewards, activatedValidators, signatures); + oracles.submitRewards(totalRewards, activatedValidators, signatures); stakedEthToken.transferFrom(msg.sender, payee, stakedEthToken.balanceOf(msg.sender)); } @@ -134,7 +134,7 @@ contract MulticallMock { external { stakedEthToken.transferFrom(msg.sender, payee, stakedEthToken.balanceOf(msg.sender)); - oracles.submitRewards(oracles.currentNonce(), totalRewards, activatedValidators, signatures); + oracles.submitRewards(totalRewards, activatedValidators, signatures); } function updateTotalRewardsAndMerkleRoot( @@ -143,7 +143,7 @@ contract MulticallMock { ) external { - oracles.submitRewards(oracles.currentNonce(), oracleRewards.totalRewards, oracleRewards.activatedValidators, oracleRewards.signatures); - oracles.submitMerkleRoot(oracles.currentNonce(), merkleRoot.merkleRoot, merkleRoot.merkleProofs, merkleRoot.signatures); + oracles.submitRewards(oracleRewards.totalRewards, oracleRewards.activatedValidators, oracleRewards.signatures); + oracles.submitMerkleRoot(merkleRoot.merkleRoot, merkleRoot.merkleProofs, merkleRoot.signatures); } } diff --git a/contracts/pool/Pool.sol b/contracts/pool/Pool.sol new file mode 100644 index 00000000..2d350357 --- /dev/null +++ b/contracts/pool/Pool.sol @@ -0,0 +1,281 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +pragma solidity 0.7.5; +pragma abicoder v2; + +import "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/token/ERC20/SafeERC20Upgradeable.sol"; +import "../presets/OwnablePausableUpgradeable.sol"; +import "../interfaces/IStakedEthToken.sol"; +import "../interfaces/IDepositContract.sol"; +import "../interfaces/IPoolValidators.sol"; +import "../interfaces/IPool.sol"; +import "../interfaces/IRevenueSharing.sol"; +import "../interfaces/IPoolValidators.sol"; + +/** + * @title Pool + * + * @dev Pool contract accumulates deposits from the users, mints tokens and registers validators. + */ +contract Pool is IPool, OwnablePausableUpgradeable { + using SafeMathUpgradeable for uint256; + using SafeERC20Upgradeable for IERC20Upgradeable; + + // @dev Validator deposit amount. + uint256 public constant override VALIDATOR_TOTAL_DEPOSIT = 32 ether; + + // @dev Validator initialization deposit amount. + uint256 public constant override VALIDATOR_INIT_DEPOSIT = 1 ether; + + // @dev Total activated validators. + uint256 public override activatedValidators; + + // @dev Pool validator withdrawal credentials. + bytes32 public override withdrawalCredentials; + + // @dev Address of the ETH2 Deposit Contract (deployed by Ethereum). + IDepositContract public override validatorRegistration; + + // @dev Address of the StakedEthToken contract. + IStakedEthToken private stakedEthToken; + + // @dev Address of the PoolValidators contract. + IPoolValidators private validators; + + // @dev Address of the Oracles contract. + address private oracles; + + // @dev Maps senders to the validator index that it will be activated in. + mapping(address => mapping(uint256 => uint256)) public override activations; + + // @dev Total pending validators. + uint256 public override pendingValidators; + + // @dev Amount of deposited ETH that is not considered for the activation period. + uint256 public override minActivatingDeposit; + + // @dev Pending validators percent limit. If it's not exceeded tokens can be minted immediately. + uint256 public override pendingValidatorsLimit; + + // @dev Address of the Partners Revenue Sharing contract. + IRevenueSharing private partnersRevenueSharing; + + // @dev Address of the Operators Revenue Sharing contract. + IRevenueSharing private operatorsRevenueSharing; + + /** + * @dev See {IPool-upgrade}. + * The `initialize` must be called before upgrading in previous implementation contract: + * https://github.com/stakewise/contracts/blob/v1.3.0/contracts/collectors/Pool.sol#L55 + */ + function upgrade( + address _poolValidators, + address _oracles, + address _partnersRevenueSharing, + address _operatorsRevenueSharing + ) + external override onlyAdmin whenPaused + { + require(address(partnersRevenueSharing) == address(0), "Pool: already upgraded"); + + // set contract addresses + validators = IPoolValidators(_poolValidators); + oracles = _oracles; + partnersRevenueSharing = IRevenueSharing(_partnersRevenueSharing); + operatorsRevenueSharing = IRevenueSharing(_operatorsRevenueSharing); + } + + /** + * @dev See {IPool-setMinActivatingDeposit}. + */ + function setMinActivatingDeposit(uint256 newMinActivatingDeposit) external override onlyAdmin { + minActivatingDeposit = newMinActivatingDeposit; + emit MinActivatingDepositUpdated(newMinActivatingDeposit, msg.sender); + } + + /** + * @dev See {IPool-setPendingValidatorsLimit}. + */ + function setPendingValidatorsLimit(uint256 newPendingValidatorsLimit) external override onlyAdmin { + require(newPendingValidatorsLimit < 1e4, "Pool: invalid limit"); + pendingValidatorsLimit = newPendingValidatorsLimit; + emit PendingValidatorsLimitUpdated(newPendingValidatorsLimit, msg.sender); + } + + /** + * @dev See {IPool-setActivatedValidators}. + */ + function setActivatedValidators(uint256 newActivatedValidators) external override { + require(msg.sender == oracles || hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "Pool: access denied"); + + // subtract activated validators from pending validators + pendingValidators = pendingValidators.sub(newActivatedValidators.sub(activatedValidators)); + activatedValidators = newActivatedValidators; + emit ActivatedValidatorsUpdated(newActivatedValidators, msg.sender); + } + + /** + * @dev See {IPool-stake}. + */ + function stake() external payable override { + _stake(msg.sender, msg.value); + } + + /** + * @dev See {IPool-stakeOnBehalf}. + */ + function stakeOnBehalf(address recipient) external payable override { + _stake(recipient, msg.value); + } + + /** + * @dev Function for staking ETH. + */ + receive() external payable { + _stake(msg.sender, msg.value); + } + + /** + * @dev See {IPool-stakeWithPartner}. + */ + function stakeWithPartner(address partner) external payable override { + // stake amount + _stake(msg.sender, msg.value); + + // increase revenue sharing amount for partner + partnersRevenueSharing.increaseAmount(partner, msg.value); + } + + /** + * @dev See {IPool-stakeWithPartner}. + */ + function stakeWithPartnerOnBehalf(address partner, address recipient) external payable override { + // stake amount + _stake(recipient, msg.value); + + // increase revenue sharing amount for partner + partnersRevenueSharing.increaseAmount(partner, msg.value); + } + + function _stake(address recipient, uint256 value) internal whenNotPaused { + require(recipient != address(0), "Pool: invalid recipient"); + require(value > 0, "Pool: invalid deposit amount"); + + // mint tokens for small deposits immediately + if (value <= minActivatingDeposit) { + stakedEthToken.mint(recipient, value); + return; + } + + // mint tokens if current pending validators limit is not exceed + uint256 _pendingValidators = pendingValidators.add((address(this).balance).div(VALIDATOR_TOTAL_DEPOSIT)); + uint256 _activatedValidators = activatedValidators; // gas savings + uint256 validatorIndex = _activatedValidators.add(_pendingValidators); + if (validatorIndex.mul(1e4) <= _activatedValidators.mul(pendingValidatorsLimit.add(1e4))) { + stakedEthToken.mint(recipient, value); + } else { + // lock deposit amount until validator activated + activations[recipient][validatorIndex] = activations[recipient][validatorIndex].add(value); + emit ActivationScheduled(recipient, validatorIndex, value); + } + } + + /** + * @dev See {IPool-canActivate}. + */ + function canActivate(uint256 validatorIndex) external view override returns (bool) { + return validatorIndex.mul(1e4) <= activatedValidators.mul(pendingValidatorsLimit.add(1e4)); + } + + /** + * @dev See {IPool-activate}. + */ + function activate(address account, uint256 validatorIndex) external override whenNotPaused { + require( + validatorIndex.mul(1e4) <= activatedValidators.mul(pendingValidatorsLimit.add(1e4)), + "Pool: validator is not active yet" + ); + + uint256 amount = activations[account][validatorIndex]; + require(amount > 0, "Pool: invalid validator index"); + + delete activations[account][validatorIndex]; + stakedEthToken.mint(account, amount); + emit Activated(account, validatorIndex, amount, msg.sender); + } + + /** + * @dev See {IPool-activateMultiple}. + */ + function activateMultiple(address account, uint256[] calldata validatorIndexes) external override whenNotPaused { + uint256 toMint; + uint256 _activatedValidators = activatedValidators; + for (uint256 i = 0; i < validatorIndexes.length; i++) { + uint256 validatorIndex = validatorIndexes[i]; + require( + validatorIndex.mul(1e4) <= _activatedValidators.mul(pendingValidatorsLimit.add(1e4)), + "Pool: validator is not active yet" + ); + + uint256 amount = activations[account][validatorIndex]; + toMint = toMint.add(amount); + delete activations[account][validatorIndex]; + + emit Activated(account, validatorIndex, amount, msg.sender); + } + require(toMint > 0, "Pool: invalid validator index"); + stakedEthToken.mint(account, toMint); + } + + /** + * @dev See {IPool-initializeValidator}. + */ + function initializeValidator(IPoolValidators.DepositData memory depositData) external override whenNotPaused { + require(msg.sender == address(validators), "Pool: access denied"); + require(depositData.withdrawalCredentials == withdrawalCredentials, "Pool: invalid withdrawal credentials"); + + // initiate validator registration + validatorRegistration.deposit{value : VALIDATOR_INIT_DEPOSIT}( + depositData.publicKey, + abi.encodePacked(depositData.withdrawalCredentials), + depositData.signature, + depositData.depositDataRoot + ); + emit ValidatorInitialized(depositData.publicKey, depositData.operator); + } + + /** + * @dev See {IPool-finalizeValidator}. + */ + function finalizeValidator(IPoolValidators.DepositData memory depositData) external override whenNotPaused { + require(msg.sender == address(validators), "Pool: access denied"); + require(depositData.withdrawalCredentials == withdrawalCredentials, "Pool: invalid withdrawal credentials"); + + // update number of pending validators + pendingValidators = pendingValidators.add(1); + + // update operator's revenue sharing + if (operatorsRevenueSharing.isAdded(depositData.operator)) { + operatorsRevenueSharing.increaseAmount(depositData.operator, VALIDATOR_TOTAL_DEPOSIT); + } + + // finalize validator registration + validatorRegistration.deposit{value : VALIDATOR_TOTAL_DEPOSIT.sub(VALIDATOR_INIT_DEPOSIT)}( + depositData.publicKey, + abi.encodePacked(depositData.withdrawalCredentials), + depositData.signature, + depositData.depositDataRoot + ); + emit ValidatorRegistered(depositData.publicKey, depositData.operator); + } + + /** + * @dev See {IPool-refund}. + */ + function refund() external override payable { + require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender) || msg.sender == address(validators), "Pool: access denied"); + require(msg.value > 0, "Pool: invalid refund amount"); + emit Refunded(msg.sender, msg.value); + } +} diff --git a/contracts/collectors/PoolEscrow.sol b/contracts/pool/PoolEscrow.sol similarity index 100% rename from contracts/collectors/PoolEscrow.sol rename to contracts/pool/PoolEscrow.sol diff --git a/contracts/pool/PoolValidators.sol b/contracts/pool/PoolValidators.sol new file mode 100644 index 00000000..a8357a5f --- /dev/null +++ b/contracts/pool/PoolValidators.sol @@ -0,0 +1,277 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +pragma solidity 0.7.5; +pragma abicoder v2; + +import "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/cryptography/MerkleProofUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/AddressUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol"; +import "../presets/OwnablePausableUpgradeable.sol"; +import "../interfaces/IPoolValidators.sol"; +import "../interfaces/IPool.sol"; + +/** + * @title PoolValidators + * + * @dev PoolValidators contract keeps track of the pool validators' deposit data and onboards new operators. + */ +contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, ReentrancyGuardUpgradeable { + using AddressUpgradeable for address payable; + using SafeMathUpgradeable for uint256; + + // Maps hash of the validator public key to its registration status. + mapping(bytes32 => ValidatorStatus) public override validatorStatuses; + + // Maps operator address to its collateral deposit. + mapping(address => uint256) public override collaterals; + + // Maps operator address to its data. + mapping(address => Operator) private operators; + + // @dev Address of the Pool contract. + IPool private pool; + + // @dev Address of the Oracles contract. + address private oracles; + + /** + * @dev See {IPoolValidators-initialize}. + */ + function initialize(address _admin, address _pool, address _oracles) external override initializer { + __OwnablePausableUpgradeable_init(_admin); + pool = IPool(_pool); + oracles = _oracles; + } + + /** + * @dev See {IPoolValidators-getOperator}. + */ + function getOperator(address _operator) external view override returns (bytes32, bytes32, bool) { + Operator storage operator = operators[_operator]; + return ( + operator.initializeMerkleRoot, + operator.finalizeMerkleRoot, + operator.locked + ); + } + + /** + * @dev See {IPoolValidators-addOperator}. + */ + function addOperator( + address _operator, + bytes32 initializeMerkleRoot, + string memory initializeMerkleProofs, + bytes32 finalizeMerkleRoot, + string memory finalizeMerkleProofs + ) + external override onlyAdmin whenNotPaused + { + require(_operator != address(0), "PoolValidators: invalid operator"); + require( + initializeMerkleRoot != "" && finalizeMerkleRoot != "" && finalizeMerkleRoot != initializeMerkleRoot, + "PoolValidators: invalid merkle roots" + ); + require( + bytes(initializeMerkleProofs).length != 0 && bytes(finalizeMerkleProofs).length != 0 && + keccak256(bytes(initializeMerkleProofs)) != keccak256(bytes(finalizeMerkleProofs)), + "PoolValidators: invalid merkle proofs" + ); + + // load operator + Operator storage operator = operators[_operator]; + require(!operator.locked, "PoolValidators: operator locked"); + + // update operator + operator.initializeMerkleRoot = initializeMerkleRoot; + operator.finalizeMerkleRoot = finalizeMerkleRoot; + + emit OperatorAdded( + _operator, + initializeMerkleRoot, + initializeMerkleProofs, + finalizeMerkleRoot, + finalizeMerkleProofs + ); + } + + /** + * @dev See {IPoolValidators-depositCollateral}. + */ + function depositCollateral(address _operator) external payable override whenNotPaused { + require(_operator != address(0), "PoolValidators: invalid operator"); + require(collaterals[_operator] == 0, "PoolValidators: collateral exists"); + require(msg.value == pool.VALIDATOR_INIT_DEPOSIT(), "PoolValidators: invalid collateral"); + + // update collateral + collaterals[_operator] = msg.value; + + emit CollateralDeposited(_operator, msg.value); + } + + /** + * @dev See {IPoolValidators-withdrawCollateral}. + */ + function withdrawCollateral(address payable collateralRecipient) external override nonReentrant whenNotPaused { + require(collateralRecipient != address(0), "PoolValidators: invalid collateral recipient"); + + // load operator + Operator storage operator = operators[msg.sender]; + require(operator.initializeMerkleRoot == "", "PoolValidators: operator exists"); + + uint256 collateral = collaterals[msg.sender]; + require(collateral > 0, "PoolValidators: collateral does not exist"); + + // remove collateral + delete collaterals[msg.sender]; + + // withdraw amount + collateralRecipient.sendValue(collateral); + + emit CollateralWithdrawn(msg.sender, collateralRecipient, collateral); + } + + /** + * @dev See {IPoolValidators-removeOperator}. + */ + function removeOperator(address _operator) external override whenNotPaused { + require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender) || msg.sender == _operator, "PoolValidators: access denied"); + + Operator storage operator = operators[_operator]; + require(operator.initializeMerkleRoot != "", "PoolValidators: invalid operator"); + require(!operator.locked, "PoolValidators: operator is locked"); + + // clean up operator + delete operators[_operator]; + + emit OperatorRemoved(msg.sender, _operator); + } + + /** + * @dev See {IPoolValidators-slashOperator}. + */ + function slashOperator(DepositData memory depositData, bytes32[] memory merkleProof) external override onlyAdmin whenNotPaused { + // fetch operator + Operator storage operator = operators[depositData.operator]; + bytes32 initializeMerkleRoot = operator.initializeMerkleRoot; + require(initializeMerkleRoot != "" && operator.locked, "PoolValidators: invalid operator"); + + // check whether provided deposit data was previously approved + bytes32 node = keccak256(abi.encode( + depositData.publicKey, + depositData.withdrawalCredentials, + depositData.signature, + depositData.depositDataRoot + )); + require( + MerkleProofUpgradeable.verify(merkleProof, initializeMerkleRoot, node), + "PoolValidators: invalid merkle proof" + ); + + uint256 refundAmount = pool.VALIDATOR_INIT_DEPOSIT(); + uint256 operatorCollateral = collaterals[depositData.operator]; + require(operatorCollateral >= refundAmount, "PoolValidators: insufficient collateral"); + + // mark validator as slashed + bytes32 validatorId = keccak256(abi.encode(depositData.publicKey)); + require( + validatorStatuses[validatorId] == ValidatorStatus.Initialized, + "PoolValidators: invalid validator status" + ); + validatorStatuses[validatorId] = ValidatorStatus.Failed; + + // remove operator to prevent further validator assignments + delete operators[depositData.operator]; + + // reduce operator's collateral + collaterals[depositData.operator] = operatorCollateral.sub(refundAmount); + + // refund to pool + pool.refund{value : refundAmount}(); + emit OperatorSlashed(depositData.operator, depositData.publicKey, refundAmount); + } + + /** + * @dev See {IPoolValidators-initializeValidator}. + */ + function initializeValidator(DepositData memory depositData, bytes32[] memory merkleProof) external override whenNotPaused { + require(msg.sender == oracles, "PoolValidators: access denied"); + + // mark validator as initialized -> prevents from initializing the same validator twice + bytes32 validatorId = keccak256(abi.encode(depositData.publicKey)); + require( + validatorStatuses[validatorId] == ValidatorStatus.Uninitialized, + "PoolValidators: invalid validator status" + ); + validatorStatuses[validatorId] = ValidatorStatus.Initialized; + + // fetch operator + Operator storage operator = operators[depositData.operator]; + (bytes32 initializeMerkleRoot, bool locked) = (operator.initializeMerkleRoot, operator.locked); + require(initializeMerkleRoot != "", "PoolValidators: invalid operator"); + require( + collaterals[depositData.operator] >= pool.VALIDATOR_INIT_DEPOSIT(), + "PoolValidators: invalid operator collateral" + ); + + // check whether provided deposit data was previously approved + bytes32 node = keccak256(abi.encode( + depositData.publicKey, + depositData.withdrawalCredentials, + depositData.signature, + depositData.depositDataRoot + )); + require( + MerkleProofUpgradeable.verify(merkleProof, initializeMerkleRoot, node), + "PoolValidators: invalid merkle proof" + ); + + // lock operator -> prevents from initializing multiple validators + // for the same operator without finalizing them + require(!locked, "PoolValidators: operator already locked"); + operator.locked = true; + + // initialize validator + pool.initializeValidator(depositData); + } + + /** + * @dev See {IPoolValidators-finalizeValidator}. + */ + function finalizeValidator(DepositData memory depositData, bytes32[] memory merkleProof) external override whenNotPaused { + require(msg.sender == oracles, "PoolValidators: access denied"); + + // mark validator as finalized -> prevents from finalizing the same validator twice + bytes32 validatorId = keccak256(abi.encode(depositData.publicKey)); + require( + validatorStatuses[validatorId] == ValidatorStatus.Initialized, + "PoolValidators: invalid validator status" + ); + validatorStatuses[validatorId] = ValidatorStatus.Finalized; + + // fetch operator + Operator storage operator = operators[depositData.operator]; + (bytes32 finalizeMerkleRoot, bool locked) = (operator.finalizeMerkleRoot, operator.locked); + require(finalizeMerkleRoot != "", "PoolValidators: invalid operator"); + + // check whether provided deposit data was previously approved + bytes32 node = keccak256(abi.encode( + depositData.publicKey, + depositData.withdrawalCredentials, + depositData.signature, + depositData.depositDataRoot + )); + require( + MerkleProofUpgradeable.verify(merkleProof, finalizeMerkleRoot, node), + "PoolValidators: invalid merkle proof" + ); + + // unlock operator to be able to receive further validators + require(locked, "PoolValidators: operator not locked"); + operator.locked = false; + + // finalize validator + pool.finalizeValidator(depositData); + } +} diff --git a/deployments/index.js b/deployments/index.js index 55b26010..6753bedf 100644 --- a/deployments/index.js +++ b/deployments/index.js @@ -1,22 +1,233 @@ -const hre = require('hardhat'); -const { contracts } = require('./settings'); +const { white, green } = require('chalk'); +const { ethers, upgrades, config } = require('hardhat'); +const { contracts, contractSettings } = require('./settings'); function log(message) { - if (hre.config != null && hre.config.suppressLogs !== true) { + if (config != null && config.suppressLogs !== true) { console.log(message); } } -async function prepareContractsUpgrades() { - log('No contracts to prepare for upgrade...'); +async function deployPoolValidators() { + const PoolValidators = await ethers.getContractFactory('PoolValidators'); + const proxy = await upgrades.deployProxy(PoolValidators, [], { + initializer: false, + kind: 'transparent', + }); + await proxy.deployed(); + return proxy.address; +} + +async function initializePoolValidators( + poolValidatorsContractAddress, + oraclesContractAddress +) { + const PoolValidators = await ethers.getContractFactory('PoolValidators'); + let poolValidators = PoolValidators.attach(poolValidatorsContractAddress); + + // call initialize + return poolValidators.initialize( + contractSettings.admin, + contracts.pool, + oraclesContractAddress + ); +} + +async function deployAndInitializeOracles(poolValidatorsContractAddress) { + const Oracles = await ethers.getContractFactory('Oracles'); + const proxy = await upgrades.deployProxy( + Oracles, + [ + contractSettings.admin, + contracts.oracles, + contracts.rewardEthToken, + contracts.pool, + poolValidatorsContractAddress, + contracts.merkleDistributor, + contractSettings.syncPeriod, + ], + { + kind: 'transparent', + } + ); + await proxy.deployed(); + return proxy.address; +} + +async function deployAndInitializeRevenueSharing() { + const RevenueSharing = await ethers.getContractFactory('RevenueSharing'); + const proxy = await upgrades.deployProxy( + RevenueSharing, + [contractSettings.admin, contracts.pool, contracts.rewardEthToken], + { + kind: 'transparent', + } + ); + await proxy.deployed(); + return proxy.address; +} + +async function upgradeMerkleDistributor(oraclesContractAddress) { + const signer = await ethers.provider.getSigner(contractSettings.admin); + const MerkleDistributor = await ethers.getContractFactory( + 'MerkleDistributor', + signer + ); + let merkleDistributor = MerkleDistributor.attach(contracts.merkleDistributor); + + // pause + await merkleDistributor.pause(); + + // upgrade MerkleDistributor to new implementation + const proxy = await upgrades.upgradeProxy( + contracts.merkleDistributor, + MerkleDistributor + ); + await proxy.deployed(); + + // call upgrade + await merkleDistributor.upgrade(oraclesContractAddress); + + // unpause + return merkleDistributor.connect(signer).unpause(); +} + +async function upgradePool( + poolValidatorsContractAddress, + oraclesContractAddress, + partnersRevenueSharingContractAddress, + operatorsRevenueSharingContractAddress +) { + const signer = await ethers.provider.getSigner(contractSettings.admin); + const Pool = await ethers.getContractFactory('Pool', signer); + let pool = await Pool.attach(contracts.pool); + + // pause + await pool.pause(); + + // upgrade Pool to new implementation + const proxy = await upgrades.upgradeProxy(contracts.pool, Pool); + await proxy.deployed(); + + // call upgrade + await pool.upgrade( + poolValidatorsContractAddress, + oraclesContractAddress, + partnersRevenueSharingContractAddress, + operatorsRevenueSharingContractAddress + ); + + // unpause + return pool.unpause(); +} + +async function upgradeRewardEthToken( + oraclesContractAddress, + operatorsRevenueSharingContractAddress, + partnersRevenueSharingContractAddress +) { + const signer = await ethers.provider.getSigner(contractSettings.admin); + const RewardEthToken = await ethers.getContractFactory( + 'RewardEthToken', + signer + ); + let rewardEthToken = await RewardEthToken.attach(contracts.rewardEthToken); + + // pause + await rewardEthToken.pause(); + + // upgrade RewardEthToken to new implementation + const proxy = await upgrades.upgradeProxy( + contracts.rewardEthToken, + RewardEthToken, + { + unsafeAllowRenames: true, + } + ); + await proxy.deployed(); + + // call upgrade + await rewardEthToken.upgrade( + oraclesContractAddress, + operatorsRevenueSharingContractAddress, + partnersRevenueSharingContractAddress + ); + + return rewardEthToken.unpause(); +} + +async function deployContracts() { + const poolValidators = await deployPoolValidators(); + log(white(`Deployed Pool Validators contract: ${green(poolValidators)}`)); + + const oracles = await deployAndInitializeOracles(poolValidators); + log(white(`Deployed Oracles contract: ${green(oracles)}`)); + + await initializePoolValidators(poolValidators, oracles); + log(white('Initialized Pool Validators contract')); + + const operatorsRevenueSharing = await deployAndInitializeRevenueSharing(); + log( + white( + `Deployed Operators Revenue Sharing contract: ${green( + operatorsRevenueSharing + )}` + ) + ); + + const partnersRevenueSharing = await deployAndInitializeRevenueSharing(); + log( + white( + `Deployed Partners Revenue Sharing contract: ${green( + partnersRevenueSharing + )}` + ) + ); + + return { + poolValidators, + oracles, + operatorsRevenueSharing, + partnersRevenueSharing, + }; } async function upgradeContracts() { - log('No contracts to upgrade...'); - return contracts; + const { + poolValidators, + oracles, + partnersRevenueSharing, + operatorsRevenueSharing, + } = await deployContracts(); + + await upgradeMerkleDistributor(oracles); + log(white('Upgraded MerkleDistributor contract')); + + await upgradePool( + poolValidators, + oracles, + partnersRevenueSharing, + operatorsRevenueSharing + ); + log(white('Upgraded Pool contract')); + + await upgradeRewardEthToken( + oracles, + operatorsRevenueSharing, + partnersRevenueSharing + ); + log(white('Upgraded RewardEthToken contract')); + + return { + ...contracts, + poolValidators, + oracles, + operatorsRevenueSharing, + partnersRevenueSharing, + }; } module.exports = { - prepareContractsUpgrades, + deployContracts, upgradeContracts, }; diff --git a/deployments/settings.js b/deployments/settings.js index 01f8efb4..6cf180fb 100644 --- a/deployments/settings.js +++ b/deployments/settings.js @@ -7,7 +7,6 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { oracles: '0xE54486fa4eB45716c5725d7A46FDDe810B8E8914', pool: '0x8c1EfEcFb5c4F1099AB0460b5659342943764Df7', poolEscrow: '0x040F15C6b5Bfc5F324eCaB5864C38D4e1EEF4218', - solos: '0xcf809A020EE599034C010b387F2116237a5B22Bc', stakedEthToken: '0x221D9812823DBAb0F1fB40b0D294D9875980Ac19', rewardEthToken: '0x826f88d423440c305D9096cC1581Ae751eFCAfB0', stakeWiseToken: '0x0e2497aACec2755d831E4AFDEA25B4ef1B823855', @@ -20,17 +19,14 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { contractSettings = { cancelLockDuration: '86400', // 1 day syncPeriod: '6646', // 1 day in blocks - totalRewardsLastUpdateBlockNumber: '4821781', // total rewards last update block number validatorPrice: '10000000000000000000', // 10 DAI / month - maintainerFee: '1000', // 10%, + protocolFee: '1000', // 10%, admin: '0x1867c96601bc5fE24F685d112314B8F3Fe228D5A', - maintainer: '0x1867c96601bc5fE24F685d112314B8F3Fe228D5A', + protocolFeeRecipient: '0x1867c96601bc5fE24F685d112314B8F3Fe228D5A', VRC: '0x8c5fecdC472E27Bc447696F431E425D02dd46a8c', vestingEscrow: '0x4CDAe3f1Eaa84b88fFc97627Ef1c77F762794287', withdrawalCredentials: '0x003e294ffc37978496f1b9298d5984ad4d55d4e2d1e6a06ee6904810c7b9e0d5', - activatedValidators: '0', - pendingValidators: '1', minActivatingDeposit: '5000000000000000000', // 5 ETH pendingValidatorsLimit: '500', // 5 % }; @@ -40,7 +36,6 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { oracles: '0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514', pool: '0xC874b064f465bdD6411D45734b56fac750Cda29A', poolEscrow: '0x2296e122c1a20Fca3CAc3371357BdAd3be0dF079', - solos: '0xEadCBA8BF9ACA93F627F31fB05470F5A0686CEca', stakedEthToken: '0xFe2e637202056d30016725477c5da089Ab0A043A', rewardEthToken: '0x20BC832ca081b91433ff6c17f85701B6e92486c5', stakeWiseToken: '0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2', @@ -53,17 +48,14 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { contractSettings = { cancelLockDuration: '86400', // 1 day syncPeriod: '6646', // 1 day in blocks - totalRewardsLastUpdateBlockNumber: '12653584', // total rewards last update block number validatorPrice: '10000000000000000000', // 10 DAI / month - maintainerFee: '1000', // 10%, + protocolFee: '1000', // 10 %, admin: '0x144a98cb1CdBb23610501fE6108858D9B7D24934', - maintainer: '0xf91AA4a655B6F43243ed4C2853F3508314DaA2aB', + protocolFeeRecipient: '0xf91AA4a655B6F43243ed4C2853F3508314DaA2aB', VRC: '0x00000000219ab540356cbb839cbe05303d7705fa', vestingEscrow: '0x1E6d872CE26C8711e7D47b8E0C47aB91d95a6dF3', withdrawalCredentials: '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - activatedValidators: '770', - pendingValidators: '21', minActivatingDeposit: '32000000000000000000', // 32 ETH pendingValidatorsLimit: '500', // 5 % }; diff --git a/hardhat.config.js b/hardhat.config.js index 761a6009..a8574055 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -11,7 +11,7 @@ require('hardhat-abi-exporter'); require('@nomiclabs/hardhat-etherscan'); const GAS_PRICE = 20e9; // 20 Gwei -const BLOCK_NUMBER = 12660565; +const BLOCK_NUMBER = 12985770; const OPTIMIZER_RUNS = 5000000; const log = (...text) => console.log(gray(...['└─> [DEBUG]'].concat(text))); @@ -133,16 +133,16 @@ module.exports = { 'IDepositContract', 'IERC20Upgradeable', 'Pool', + 'PoolEscrow', + 'PoolValidators', 'RewardEthToken', - 'Solos', 'StakedEthToken', 'StakeWiseToken', - 'Validators', 'VestingEscrow', 'VestingEscrowFactory', - 'PoolEscrow', 'MerkleDrop', 'MerkleDistributor', + 'RevenueSharing', ], clear: true, flat: true, diff --git a/package.json b/package.json index 955a7c5f..606e035d 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "slither": "pip3 install --user slither-analyzer && slither .", "test": "hardhat test", "test:gas": "hardhat test --gas --optimizer", - "prepare-upgrade": "yarn compile --optimizer && npx hardhat run --no-compile scripts/prepareUpgrade.js", + "deploy-contracts": "yarn compile --optimizer && npx hardhat run --no-compile scripts/deploy.js", "upgrade-contracts": "yarn compile --optimizer && npx hardhat run --no-compile scripts/upgrade.js", "verify": "npx hardhat verify --optimizer" }, diff --git a/scripts/prepareUpgrade.js b/scripts/deploy.js similarity index 54% rename from scripts/prepareUpgrade.js rename to scripts/deploy.js index 69fd525c..e8f5d8bf 100644 --- a/scripts/prepareUpgrade.js +++ b/scripts/deploy.js @@ -1,6 +1,6 @@ -const { prepareContractsUpgrades } = require('../deployments'); +const { deployContracts } = require('../deployments'); -prepareContractsUpgrades() +deployContracts() .then(() => process.exit(0)) .catch((error) => { console.error(error); diff --git a/test/MerkleDistributor.test.js b/test/MerkleDistributor.test.js index d2732931..4d38a468 100644 --- a/test/MerkleDistributor.test.js +++ b/test/MerkleDistributor.test.js @@ -574,7 +574,6 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { it('cannot claim before merkle root update in the same block', async () => { const { index, amounts, tokens, proof } = merkleProofs[account1]; await oracles.submitRewards( - await oracles.currentNonce(), totalRewards, activatedValidators, rewardsSignatures @@ -597,7 +596,6 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { it('can claim after merkle root update in the same block', async () => { await oracles.submitRewards( - await oracles.currentNonce(), totalRewards, activatedValidators, rewardsSignatures diff --git a/test/RevenueSharing.test.js b/test/RevenueSharing.test.js index 66dd1c2a..ad2ecd36 100644 --- a/test/RevenueSharing.test.js +++ b/test/RevenueSharing.test.js @@ -22,7 +22,7 @@ const Oracles = artifacts.require('Oracles'); const RewardEthToken = artifacts.require('RewardEthToken'); const RevenueSharing = artifacts.require('RevenueSharing'); -contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { +contract('RevenueSharing', ([beneficiary, anyone, ...otherAccounts]) => { const admin = contractSettings.admin; const revenueShare = new BN(1000); let revenueSharing, oracleAccounts, pool, rewardEthToken, oracles; @@ -31,7 +31,7 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { beforeEach(async () => { await impersonateAccount(admin); - await send.ether(claimer, admin, ether('5')); + await send.ether(anyone, admin, ether('5')); const contracts = await upgradeContracts(); revenueSharing = await RevenueSharing.at(contracts.operatorsRevenueSharing); pool = await Pool.at(contracts.pool); @@ -49,8 +49,8 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { describe('addAccount', () => { it('fails to add account without admin role', async () => { await expectRevert( - revenueSharing.addAccount(claimer, beneficiary, revenueShare, { - from: claimer, + revenueSharing.addAccount(beneficiary, revenueShare, { + from: beneficiary, }), 'OwnablePausable: access denied' ); @@ -59,7 +59,7 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { it('fails to add account when paused', async () => { await revenueSharing.pause({ from: admin }); await expectRevert( - revenueSharing.addAccount(claimer, beneficiary, revenueShare, { + revenueSharing.addAccount(beneficiary, revenueShare, { from: admin, }), 'Pausable: paused' @@ -68,53 +68,36 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { it('fails to add account with invalid revenue share', async () => { await expectRevert( - revenueSharing.addAccount(claimer, beneficiary, '0', { + revenueSharing.addAccount(beneficiary, '0', { from: admin, }), 'RevenueSharing: invalid revenue share' ); await expectRevert( - revenueSharing.addAccount(claimer, beneficiary, '10001', { + revenueSharing.addAccount(beneficiary, '10001', { from: admin, }), 'RevenueSharing: invalid revenue share' ); }); - it('fails to add account with invalid claimer or beneficiary', async () => { - await expectRevert( - revenueSharing.addAccount( - constants.ZERO_ADDRESS, - beneficiary, - revenueShare, - { - from: admin, - } - ), - 'RevenueSharing: invalid claimer or beneficiary' - ); - + it('fails to add account with beneficiary', async () => { await expectRevert( - revenueSharing.addAccount( - claimer, - constants.ZERO_ADDRESS, - revenueShare, - { - from: admin, - } - ), - 'RevenueSharing: invalid claimer or beneficiary' + revenueSharing.addAccount(constants.ZERO_ADDRESS, revenueShare, { + from: admin, + }), + 'RevenueSharing: invalid beneficiary' ); }); it('fails to add account twice', async () => { - await revenueSharing.addAccount(claimer, beneficiary, revenueShare, { + await revenueSharing.addAccount(beneficiary, revenueShare, { from: admin, }); await expectRevert( - revenueSharing.addAccount(claimer, beneficiary, revenueShare, { + revenueSharing.addAccount(beneficiary, revenueShare, { from: admin, }), 'RevenueSharing: account already added' @@ -122,29 +105,22 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { }); it('admin can add new account', async () => { - let receipt = await revenueSharing.addAccount( - claimer, - beneficiary, - revenueShare, - { - from: admin, - } - ); + let receipt = await revenueSharing.addAccount(beneficiary, revenueShare, { + from: admin, + }); await expectEvent(receipt, 'AccountAdded', { beneficiary, - claimer, revenueShare, }); expect(await revenueSharing.isAdded(beneficiary)).to.equal(true); - expect(await revenueSharing.claimers(beneficiary)).to.equal(claimer); }); }); describe('removeAccount', () => { beforeEach(async () => { - await revenueSharing.addAccount(claimer, beneficiary, revenueShare, { + await revenueSharing.addAccount(beneficiary, revenueShare, { from: admin, }); }); @@ -170,7 +146,7 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { it('fails to remove not existing account', async () => { await expectRevert( - revenueSharing.removeAccount(claimer, { + revenueSharing.removeAccount(anyone, { from: admin, }), 'RevenueSharing: account is not added' @@ -188,9 +164,6 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { }); expect(await revenueSharing.isAdded(beneficiary)).to.equal(false); - expect(await revenueSharing.claimers(beneficiary)).to.equal( - constants.ZERO_ADDRESS - ); }); }); @@ -198,7 +171,7 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { let newRevenueShare = revenueShare.add(new BN(1000)); beforeEach(async () => { - await revenueSharing.addAccount(claimer, beneficiary, revenueShare, { + await revenueSharing.addAccount(beneficiary, revenueShare, { from: admin, }); }); @@ -247,7 +220,7 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { it('fails to update revenue share for not existing account', async () => { await expectRevert( - revenueSharing.updateRevenueShare(claimer, newRevenueShare, { + revenueSharing.updateRevenueShare(anyone, newRevenueShare, { from: admin, }), 'RevenueSharing: account is not added' @@ -290,7 +263,7 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { let newAmount = ether('1000'); beforeEach(async () => { - await revenueSharing.addAccount(claimer, beneficiary, revenueShare, { + await revenueSharing.addAccount(beneficiary, revenueShare, { from: admin, }); }); @@ -325,7 +298,7 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { it('fails to increase amount for not existing account', async () => { await expectRevert( - revenueSharing.increaseAmount(claimer, newAmount, { + revenueSharing.increaseAmount(anyone, newAmount, { from: admin, }), 'RevenueSharing: account is not added' @@ -367,7 +340,7 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { beforeEach(async () => { // add account and increase contributed amount - await revenueSharing.addAccount(claimer, beneficiary, revenueShare, { + await revenueSharing.addAccount(beneficiary, revenueShare, { from: admin, }); await revenueSharing.increaseAmount(beneficiary, contributedAmount, { @@ -390,15 +363,6 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { revenueCut = await rewardEthToken.balanceOf(revenueSharing.address); }); - it('fails to collect reward by not beneficiary or claimer', async () => { - await expectRevert( - revenueSharing.collectReward(beneficiary, { - from: otherAccounts[0], - }), - 'RevenueSharing: access denied' - ); - }); - it('fails to collect reward when paused', async () => { await revenueSharing.pause({ from: admin }); await expectRevert( @@ -412,8 +376,8 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { it('fails to collect multiple when paused', async () => { await revenueSharing.pause({ from: admin }); await expectRevert( - revenueSharing.collectRewards([beneficiary, claimer], { - from: claimer, + revenueSharing.collectRewards([beneficiary, anyone], { + from: beneficiary, }), 'Pausable: paused' ); @@ -421,7 +385,7 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { it('fails to collect reward for not existing account', async () => { await expectRevert( - revenueSharing.collectReward(otherAccounts[0], { + revenueSharing.collectReward(anyone, { from: beneficiary, }), 'RevenueSharing: account is not added' @@ -431,16 +395,16 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { it('does not fail with zero reward', async () => { // withdraw accumulated reward await revenueSharing.collectReward(beneficiary, { - from: claimer, + from: beneficiary, }); let receipt = await revenueSharing.collectReward(beneficiary, { - from: claimer, + from: beneficiary, }); const prevReward = await rewardEthToken.balanceOf(beneficiary); await expectEvent(receipt, 'RewardCollected', { - sender: claimer, + sender: beneficiary, beneficiary, reward: new BN(0), }); @@ -449,12 +413,12 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { ); }); - it('beneficiary or claimer can collect reward', async () => { + it('anyone can collect reward for beneficiary', async () => { let receipt = await revenueSharing.collectReward(beneficiary, { - from: claimer, + from: anyone, }); await expectEvent(receipt, 'RewardCollected', { - sender: claimer, + sender: anyone, beneficiary, }); const reward = receipt.logs[0].args.reward; @@ -465,7 +429,7 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { ); }); - it('claimer can collect rewards for multiple beneficiaries', async () => { + it('anyone can collect rewards for multiple beneficiaries', async () => { let beneficiary1 = beneficiary; let [beneficiary2, revenueShare2, contributedAmount2] = [ otherAccounts[0], @@ -474,7 +438,7 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { ]; // add another account and increase contributed amount - await revenueSharing.addAccount(claimer, beneficiary2, revenueShare2, { + await revenueSharing.addAccount(beneficiary2, revenueShare2, { from: admin, }); await revenueSharing.increaseAmount(beneficiary2, contributedAmount2, { @@ -499,16 +463,16 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { let receipt = await revenueSharing.collectRewards( [beneficiary1, beneficiary2], { - from: claimer, + from: anyone, } ); await expectEvent(receipt, 'RewardCollected', { - sender: claimer, + sender: anyone, beneficiary: beneficiary1, }); await expectEvent(receipt, 'RewardCollected', { - sender: claimer, + sender: anyone, beneficiary: beneficiary2, }); @@ -534,7 +498,7 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { it('fails to update rewards by not RewardEthToken', async () => { await expectRevert( revenueSharing.updateRewards(ether('5'), ether('1000'), { - from: otherAccounts[0], + from: anyone, }), 'RevenueSharing: access denied' ); @@ -550,61 +514,4 @@ contract('RevenueSharing', ([claimer, beneficiary, ...otherAccounts]) => { ); }); }); - - describe('updateClaimer', () => { - const newClaimer = otherAccounts[0]; - - beforeEach(async () => { - // add account and increase contributed amount - await revenueSharing.addAccount(claimer, beneficiary, revenueShare, { - from: admin, - }); - }); - - it('fails to update claimer by not beneficiary', async () => { - await expectRevert( - revenueSharing.updateClaimer(newClaimer, { - from: claimer, - }), - 'RevenueSharing: account is not added' - ); - }); - - it('fails to update claimer when paused', async () => { - await revenueSharing.pause({ from: admin }); - await expectRevert( - revenueSharing.updateClaimer(newClaimer, { - from: beneficiary, - }), - 'Pausable: paused' - ); - }); - - it('fails to update with invalid claimer', async () => { - await expectRevert( - revenueSharing.updateClaimer(constants.ZERO_ADDRESS, { - from: beneficiary, - }), - 'RevenueSharing: invalid new claimer' - ); - - await expectRevert( - revenueSharing.updateClaimer(claimer, { - from: beneficiary, - }), - 'RevenueSharing: invalid new claimer' - ); - }); - - it('beneficiary can update claimer', async () => { - let receipt = await revenueSharing.updateClaimer(newClaimer, { - from: beneficiary, - }); - await expectEvent(receipt, 'ClaimerUpdated', { - beneficiary, - claimer: newClaimer, - }); - expect(await revenueSharing.claimers(beneficiary)).to.equal(newClaimer); - }); - }); }); diff --git a/test/Validators.test.js b/test/Validators.test.js deleted file mode 100644 index c88a5689..00000000 --- a/test/Validators.test.js +++ /dev/null @@ -1,144 +0,0 @@ -const { - expectRevert, - expectEvent, - ether, - balance, - send, -} = require('@openzeppelin/test-helpers'); -const { upgradeContracts } = require('../deployments'); -const { validatorParams } = require('./pool/validatorParams'); -const { contractSettings, contracts } = require('../deployments/settings'); -const { - stopImpersonatingAccount, - impersonateAccount, - resetFork, -} = require('./utils'); - -const Pool = artifacts.require('Pool'); -const Validators = artifacts.require('Validators'); - -const validatorId = web3.utils.soliditySha3( - '0xb07ef3635f585b5baeb057a45e7337ab5ba2b1205b43fac3a46e0add8aab242b0fb35a54373ad809405ca05c9cbf34c7' -); -const validatorDeposit = ether('32'); - -contract('Validators', ([operator, anotherOperator, anyone]) => { - const admin = contractSettings.admin; - let pool, validators; - - after(async () => stopImpersonatingAccount(admin)); - - beforeEach(async () => { - await impersonateAccount(admin); - await send.ether(anyone, admin, ether('5')); - - await upgradeContracts(); - pool = await Pool.at(contracts.pool); - validators = await Validators.at(contracts.validators); - await validators.addOperator(operator, { from: admin }); - }); - - afterEach(async () => resetFork()); - - it('only collectors can register validators', async () => { - await expectRevert( - validators.register(validatorId, { - from: anyone, - }), - 'Validators: access denied' - ); - }); - - it('fails to register validator with paused contract', async () => { - await validators.pause({ from: admin }); - expect(await validators.paused()).equal(true); - let poolBalance = await balance.current(pool.address); - let depositAmount = validatorDeposit.sub(poolBalance); - await pool.addDeposit({ - from: anyone, - value: depositAmount, - }); - - await expectRevert( - pool.registerValidator(validatorParams[0], { - from: operator, - }), - 'Pausable: paused' - ); - }); - - describe('assigning operators', () => { - it('admin can assign operator role to another account', async () => { - const receipt = await validators.addOperator(anotherOperator, { - from: admin, - }); - expectEvent(receipt, 'RoleGranted', { - role: await validators.OPERATOR_ROLE(), - account: anotherOperator, - sender: admin, - }); - expect(await validators.isOperator(operator)).equal(true); - expect(await validators.isOperator(anotherOperator)).equal(true); - expect(await validators.isOperator(admin)).equal(false); - expect(await validators.isOperator(anyone)).equal(false); - }); - - it('others cannot assign operator role to an account', async () => { - await expectRevert( - validators.addOperator(anotherOperator, { from: anyone }), - 'AccessControl: sender must be an admin to grant' - ); - expect(await validators.isOperator(operator)).equal(true); - expect(await validators.isOperator(anotherOperator)).equal(false); - expect(await validators.isOperator(anyone)).equal(false); - }); - - it('operators cannot assign operator role to others', async () => { - await validators.addOperator(operator, { from: admin }); - await expectRevert( - validators.addOperator(anotherOperator, { from: operator }), - 'AccessControl: sender must be an admin to grant' - ); - expect(await validators.isOperator(operator)).equal(true); - expect(await validators.isOperator(anotherOperator)).equal(false); - }); - }); - - describe('removing operators', () => { - beforeEach(async () => { - await validators.addOperator(operator, { from: admin }); - await validators.addOperator(anotherOperator, { from: admin }); - }); - - it('anyone cannot remove operators', async () => { - await expectRevert( - validators.removeOperator(operator, { from: anyone }), - 'AccessControl: sender must be an admin to revoke' - ); - expect(await validators.isOperator(operator)).equal(true); - expect(await validators.isOperator(anotherOperator)).equal(true); - }); - - it('operator cannot remove other operators', async () => { - await expectRevert( - validators.removeOperator(anotherOperator, { from: operator }), - 'AccessControl: sender must be an admin to revoke' - ); - expect(await validators.isOperator(operator)).equal(true); - expect(await validators.isOperator(anotherOperator)).equal(true); - }); - - it('admins can remove operators', async () => { - const receipt = await validators.removeOperator(operator, { - from: admin, - }); - expectEvent(receipt, 'RoleRevoked', { - role: await validators.OPERATOR_ROLE(), - account: operator, - sender: admin, - }); - expect(await validators.isOperator(operator)).equal(false); - expect(await validators.isOperator(anotherOperator)).equal(true); - }); - }); -}); diff --git a/test/oracles/Oracles.test.js b/test/oracles/Oracles.test.js index 8057b10a..77c7950a 100644 --- a/test/oracles/Oracles.test.js +++ b/test/oracles/Oracles.test.js @@ -195,7 +195,6 @@ contract('Oracles', ([_, anyone, ...accounts]) => { await expectRevert( oracles.submitRewards( - currentNonce, newTotalRewards, newActivatedValidators, signatures, @@ -207,36 +206,9 @@ contract('Oracles', ([_, anyone, ...accounts]) => { ); }); - it('fails to submit twice', async () => { - await enableRewardsVoting({ rewardEthToken, admin, oracles }); - await oracles.submitRewards( - currentNonce, - newTotalRewards, - newActivatedValidators, - signatures, - { - from: oracleAccounts[0], - } - ); - - await expectRevert( - oracles.submitRewards( - currentNonce, - newTotalRewards, - newActivatedValidators, - signatures, - { - from: oracleAccounts[0], - } - ), - 'Oracles: invalid nonce' - ); - }); - it('fails to submit too early', async () => { await expectRevert( oracles.submitRewards( - currentNonce, newTotalRewards, newActivatedValidators, signatures, @@ -252,7 +224,6 @@ contract('Oracles', ([_, anyone, ...accounts]) => { await enableRewardsVoting({ rewardEthToken, admin, oracles }); await expectRevert( oracles.submitRewards( - currentNonce, newTotalRewards, newActivatedValidators, signatures.slice(signatures.length - 1), @@ -269,7 +240,6 @@ contract('Oracles', ([_, anyone, ...accounts]) => { signatures[0] = await web3.eth.sign(candidateId, anyone); await expectRevert( oracles.submitRewards( - currentNonce, newTotalRewards, newActivatedValidators, signatures, @@ -286,7 +256,6 @@ contract('Oracles', ([_, anyone, ...accounts]) => { signatures.push(signatures[0]); await expectRevert( oracles.submitRewards( - currentNonce, newTotalRewards, newActivatedValidators, signatures, @@ -301,7 +270,6 @@ contract('Oracles', ([_, anyone, ...accounts]) => { it('submits data with enough signatures', async () => { await enableRewardsVoting({ rewardEthToken, admin, oracles }); let receipt = await oracles.submitRewards( - currentNonce, newTotalRewards, newActivatedValidators, signatures, @@ -378,65 +346,22 @@ contract('Oracles', ([_, anyone, ...accounts]) => { expect(await oracles.paused()).equal(true); await expectRevert( - oracles.submitMerkleRoot( - currentNonce, - merkleRoot, - merkleProofs, - signatures, - { - from: oracleAccounts[0], - } - ), - 'Pausable: paused' - ); - }); - - it('fails to submit twice', async () => { - await oracles.submitMerkleRoot( - currentNonce, - merkleRoot, - merkleProofs, - signatures, - { + oracles.submitMerkleRoot(merkleRoot, merkleProofs, signatures, { from: oracleAccounts[0], - } - ); - - await expectRevert( - oracles.submitMerkleRoot( - currentNonce, - merkleRoot, - merkleProofs, - signatures, - { - from: oracleAccounts[0], - } - ), - 'Oracles: invalid nonce' + }), + 'Pausable: paused' ); }); it('fails to submit too early', async () => { - await oracles.submitMerkleRoot( - currentNonce, - merkleRoot, - merkleProofs, - signatures, - { - from: oracleAccounts[0], - } - ); + await oracles.submitMerkleRoot(merkleRoot, merkleProofs, signatures, { + from: oracleAccounts[0], + }); await expectRevert( - oracles.submitMerkleRoot( - currentNonce.add(new BN(1)), - merkleRoot, - merkleProofs, - signatures, - { - from: oracleAccounts[0], - } - ), + oracles.submitMerkleRoot(merkleRoot, merkleProofs, signatures, { + from: oracleAccounts[0], + }), 'Oracles: too early' ); }); @@ -444,7 +369,6 @@ contract('Oracles', ([_, anyone, ...accounts]) => { it('fails to submit with not enough signatures', async () => { await expectRevert( oracles.submitMerkleRoot( - currentNonce, merkleRoot, merkleProofs, signatures.slice(signatures.length - 1), @@ -459,15 +383,9 @@ contract('Oracles', ([_, anyone, ...accounts]) => { it('fails to submit with invalid signature', async () => { signatures[0] = await web3.eth.sign(candidateId, anyone); await expectRevert( - oracles.submitMerkleRoot( - currentNonce, - merkleRoot, - merkleProofs, - signatures, - { - from: oracleAccounts[0], - } - ), + oracles.submitMerkleRoot(merkleRoot, merkleProofs, signatures, { + from: oracleAccounts[0], + }), 'Oracles: invalid signer' ); }); @@ -475,22 +393,15 @@ contract('Oracles', ([_, anyone, ...accounts]) => { it('fails to submit with repeated signature', async () => { signatures.push(signatures[0]); await expectRevert( - oracles.submitMerkleRoot( - currentNonce, - merkleRoot, - merkleProofs, - signatures, - { - from: oracleAccounts[0], - } - ), + oracles.submitMerkleRoot(merkleRoot, merkleProofs, signatures, { + from: oracleAccounts[0], + }), 'Oracles: repeated signature' ); }); it('submits data with enough signatures', async () => { let receipt = await oracles.submitMerkleRoot( - currentNonce, merkleRoot, merkleProofs, signatures, diff --git a/test/pool/PoolValidators.test.js b/test/pool/PoolValidators.test.js new file mode 100644 index 00000000..874ae98e --- /dev/null +++ b/test/pool/PoolValidators.test.js @@ -0,0 +1,1096 @@ +const { + BN, + expectRevert, + expectEvent, + ether, + balance, + send, + constants, +} = require('@openzeppelin/test-helpers'); +const { keccak256, defaultAbiCoder } = require('ethers/lib/utils'); +const { upgradeContracts } = require('../../deployments'); +const { contractSettings, contracts } = require('../../deployments/settings'); +const { vrcAbi } = require('../../deployments/vrc'); +const { + initializeValidator, + finalizeValidator, + setupOracleAccounts, + stopImpersonatingAccount, + impersonateAccount, + resetFork, + checkValidatorRegistered, +} = require('../utils'); +const { + initializeData, + initializeMerkleRoot, +} = require('./initializeMerkleRoot'); +const { finalizeData, finalizeMerkleRoot } = require('./finalizeMerkleRoot'); + +const Pool = artifacts.require('Pool'); +const PoolValidators = artifacts.require('PoolValidators'); +const Oracles = artifacts.require('Oracles'); + +contract('Pool Validators', (accounts) => { + const admin = contractSettings.admin; + const validatorDeposit = ether('32'); + const initializeMerkleProofs = + 'ipfs://QmSYduvpsJp7bo3xenRK3qDdoLkzWcvVeU3U16v1n3Cb5d'; + const finalizeMerkleProofs = + 'ipfs://QmSTP443zR6oKnYVRE23RARyuuzwhhaidUiSXyRTsw3pDs'; + let pool, + validators, + vrc, + initAmount, + finalizeAmount, + oracleAccounts, + oracles; + let [operator, anyone, ...otherAccounts] = accounts; + + before(async () => { + vrc = new web3.eth.Contract(vrcAbi, contractSettings.VRC); + }); + + after(async () => stopImpersonatingAccount(admin)); + + beforeEach(async () => { + await impersonateAccount(admin); + await send.ether(anyone, admin, ether('5')); + + let upgradedContracts = await upgradeContracts(); + pool = await Pool.at(contracts.pool); + initAmount = await pool.VALIDATOR_INIT_DEPOSIT(); + finalizeAmount = (await pool.VALIDATOR_TOTAL_DEPOSIT()).sub(initAmount); + + validators = await PoolValidators.at(upgradedContracts.poolValidators); + + // collect validator deposit + let poolBalance = await balance.current(pool.address); + let depositAmount = validatorDeposit.sub(poolBalance); + await pool.stake(anyone, { + from: anyone, + value: depositAmount, + }); + + oracles = await Oracles.at(upgradedContracts.oracles); + oracleAccounts = await setupOracleAccounts({ + admin, + oracles, + accounts: otherAccounts, + }); + }); + + afterEach(async () => resetFork()); + + describe('add operator', () => { + it('fails to add with not admin privilege', async () => { + await expectRevert( + validators.addOperator( + operator, + initializeMerkleRoot, + initializeMerkleProofs, + finalizeMerkleRoot, + finalizeMerkleProofs, + { + from: anyone, + } + ), + 'OwnablePausable: access denied' + ); + }); + + it('fails to add with zero operator address', async () => { + await expectRevert( + validators.addOperator( + constants.ZERO_ADDRESS, + initializeMerkleRoot, + initializeMerkleProofs, + finalizeMerkleRoot, + finalizeMerkleProofs, + { + from: admin, + } + ), + 'PoolValidators: invalid operator' + ); + }); + + it('fails to add with invalid merkle roots', async () => { + await expectRevert( + validators.addOperator( + operator, + constants.ZERO_BYTES32, + initializeMerkleProofs, + finalizeMerkleRoot, + finalizeMerkleProofs, + { + from: admin, + } + ), + 'PoolValidators: invalid merkle roots' + ); + await expectRevert( + validators.addOperator( + operator, + initializeMerkleRoot, + initializeMerkleProofs, + constants.ZERO_BYTES32, + finalizeMerkleProofs, + { + from: admin, + } + ), + 'PoolValidators: invalid merkle roots' + ); + + // same merkle roots + await expectRevert( + validators.addOperator( + operator, + initializeMerkleRoot, + initializeMerkleProofs, + initializeMerkleRoot, + finalizeMerkleProofs, + { + from: admin, + } + ), + 'PoolValidators: invalid merkle roots' + ); + }); + + it('fails to add with invalid merkle proofs', async () => { + await expectRevert( + validators.addOperator( + operator, + initializeMerkleRoot, + '', + finalizeMerkleRoot, + finalizeMerkleProofs, + { + from: admin, + } + ), + 'PoolValidators: invalid merkle proofs' + ); + await expectRevert( + validators.addOperator( + operator, + initializeMerkleRoot, + initializeMerkleProofs, + finalizeMerkleRoot, + '', + { + from: admin, + } + ), + 'PoolValidators: invalid merkle proofs' + ); + + // same merkle roots + await expectRevert( + validators.addOperator( + operator, + initializeMerkleRoot, + initializeMerkleProofs, + finalizeMerkleRoot, + initializeMerkleProofs, + { + from: admin, + } + ), + 'PoolValidators: invalid merkle proofs' + ); + }); + + it('fails to update with locked operator', async () => { + await validators.addOperator( + operator, + initializeMerkleRoot, + initializeMerkleProofs, + finalizeMerkleRoot, + finalizeMerkleProofs, + { + from: admin, + } + ); + + await validators.depositCollateral(operator, { + value: initAmount, + from: anyone, + }); + + let { + publicKey, + signature, + withdrawalCredentials, + merkleProof, + depositDataRoot, + } = initializeData[0]; + await initializeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }); + + let initializeMerkleRoot2 = + '0x2a6d4eed3ba81bd99efdfd31333e244bb84989cfadbf9ddbf8fabd7296099bc0'; + let finalizeMerkleRoot2 = + '0xd7a7db4c225d87bb434aa5348ddc690f01c553fec86869383af30aa83b5b1d87'; + await expectRevert( + validators.addOperator( + operator, + initializeMerkleRoot2, + initializeMerkleProofs, + finalizeMerkleRoot2, + finalizeMerkleProofs, + { + from: admin, + } + ), + 'PoolValidators: operator locked' + ); + }); + + it('can update existing operator', async () => { + await validators.addOperator( + operator, + initializeMerkleRoot, + initializeMerkleProofs, + finalizeMerkleRoot, + finalizeMerkleProofs, + { + from: admin, + } + ); + + let initializeMerkleRoot2 = + '0x2a6d4eed3ba81bd99efdfd31333e244bb84989cfadbf9ddbf8fabd7296099bc0'; + let finalizeMerkleRoot2 = + '0xd7a7db4c225d87bb434aa5348ddc690f01c553fec86869383af30aa83b5b1d87'; + + let receipt = await validators.addOperator( + operator, + initializeMerkleRoot2, + initializeMerkleProofs, + finalizeMerkleRoot2, + finalizeMerkleProofs, + { + from: admin, + } + ); + + await expectEvent(receipt, 'OperatorAdded', { + operator, + initializeMerkleRoot: initializeMerkleRoot2, + initializeMerkleProofs, + finalizeMerkleRoot: finalizeMerkleRoot2, + finalizeMerkleProofs, + }); + + let _operator = await validators.getOperator(operator); + expect(_operator[0]).to.equal(initializeMerkleRoot2); + expect(_operator[1]).to.equal(finalizeMerkleRoot2); + expect(_operator[2]).to.equal(false); + }); + + it('can add new operator', async () => { + let receipt = await validators.addOperator( + operator, + initializeMerkleRoot, + initializeMerkleProofs, + finalizeMerkleRoot, + finalizeMerkleProofs, + { + from: admin, + } + ); + + await expectEvent(receipt, 'OperatorAdded', { + operator, + initializeMerkleRoot, + initializeMerkleProofs, + finalizeMerkleRoot, + finalizeMerkleProofs, + }); + + let _operator = await validators.getOperator(operator); + expect(_operator[0]).to.equal(initializeMerkleRoot); + expect(_operator[1]).to.equal(finalizeMerkleRoot); + expect(_operator[2]).to.equal(false); + }); + }); + + describe('remove operator', () => { + beforeEach(async () => { + await validators.addOperator( + operator, + initializeMerkleRoot, + initializeMerkleProofs, + finalizeMerkleRoot, + finalizeMerkleProofs, + { + from: admin, + } + ); + }); + + it('fails to remove by user other than admin and operator', async () => { + await expectRevert( + validators.removeOperator(operator, { + from: anyone, + }), + 'PoolValidators: access denied' + ); + }); + + it('fails to remove not existing operator', async () => { + await expectRevert( + validators.removeOperator(anyone, { + from: admin, + }), + 'PoolValidators: invalid operator' + ); + }); + + it('fails to remove locked operator', async () => { + await validators.depositCollateral(operator, { + value: initAmount, + from: anyone, + }); + + let { + publicKey, + signature, + withdrawalCredentials, + merkleProof, + depositDataRoot, + } = initializeData[0]; + await initializeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }); + + await expectRevert( + validators.removeOperator(operator, { + from: admin, + }), + 'PoolValidators: operator is locked' + ); + }); + + it('operator or admin can remove operator', async () => { + let receipt = await validators.removeOperator(operator, { + from: admin, + }); + + await expectEvent(receipt, 'OperatorRemoved', { + sender: admin, + operator, + }); + + let _operator = await validators.getOperator(operator); + expect(_operator[0]).to.equal(constants.ZERO_BYTES32); + expect(_operator[1]).to.equal(constants.ZERO_BYTES32); + expect(_operator[2]).to.equal(false); + }); + }); + + describe('deposit collateral', () => { + it('fails to deposit with zero operator address', async () => { + await expectRevert( + validators.depositCollateral(constants.ZERO_ADDRESS, { + value: initAmount, + from: anyone, + }), + 'PoolValidators: invalid operator' + ); + }); + + it('fails to deposit when collateral exists', async () => { + await validators.depositCollateral(operator, { + value: initAmount, + from: anyone, + }); + await expectRevert( + validators.depositCollateral(operator, { + value: initAmount, + from: anyone, + }), + 'PoolValidators: collateral exists' + ); + }); + + it('fails to deposit with invalid collateral value', async () => { + await expectRevert( + validators.depositCollateral(operator, { + value: initAmount.sub(new BN(1)), + from: anyone, + }), + 'PoolValidators: invalid collateral' + ); + }); + + it('anyone can deposit collateral', async () => { + let receipt = await validators.depositCollateral(operator, { + value: initAmount, + from: anyone, + }); + + await expectEvent(receipt, 'CollateralDeposited', { + operator, + collateral: initAmount, + }); + + let collateral = await validators.collaterals(operator); + expect(collateral).to.bignumber.equal(initAmount); + }); + }); + + describe('withdraw collateral', () => { + const collateralRecipient = otherAccounts[0]; + beforeEach(async () => { + await validators.depositCollateral(operator, { + value: initAmount, + from: anyone, + }); + }); + + it('fails to withdraw with zero recipient address', async () => { + await expectRevert( + validators.withdrawCollateral(constants.ZERO_ADDRESS, { + from: operator, + }), + 'PoolValidators: invalid collateral recipient' + ); + }); + + it('fails to withdraw for the existing operator', async () => { + await validators.addOperator( + operator, + initializeMerkleRoot, + initializeMerkleProofs, + finalizeMerkleRoot, + finalizeMerkleProofs, + { + from: admin, + } + ); + await expectRevert( + validators.withdrawCollateral(collateralRecipient, { + from: operator, + }), + 'PoolValidators: operator exists' + ); + }); + + it('fails to withdraw twice', async () => { + await validators.withdrawCollateral(collateralRecipient, { + from: operator, + }); + await expectRevert( + validators.withdrawCollateral(collateralRecipient, { + from: operator, + }), + 'PoolValidators: collateral does not exist' + ); + }); + + it('operator can withdraw collateral', async () => { + let currentBalance = await balance.current(collateralRecipient); + let receipt = await validators.withdrawCollateral(collateralRecipient, { + from: operator, + }); + + await expectEvent(receipt, 'CollateralWithdrawn', { + operator, + collateralRecipient, + collateral: initAmount, + }); + + let collateral = await validators.collaterals(operator); + expect(collateral).to.bignumber.equal(new BN(0)); + expect(await balance.current(collateralRecipient)).to.bignumber.equal( + currentBalance.add(initAmount) + ); + }); + }); + + describe('slash operator', () => { + let { + publicKey, + signature, + withdrawalCredentials, + merkleProof, + depositDataRoot, + } = initializeData[0]; + beforeEach(async () => { + await validators.addOperator( + operator, + initializeMerkleRoot, + initializeMerkleProofs, + finalizeMerkleRoot, + finalizeMerkleProofs, + { + from: admin, + } + ); + await validators.depositCollateral(operator, { + value: initAmount, + from: anyone, + }); + }); + + it('fails to slash by user other than admin', async () => { + await expectRevert( + validators.slashOperator( + { + operator, + withdrawalCredentials, + depositDataRoot, + publicKey, + signature, + }, + merkleProof, + { + from: anyone, + } + ), + 'OwnablePausable: access denied' + ); + }); + + it('fails to slash not locked operator', async () => { + await expectRevert( + validators.slashOperator( + { + operator, + withdrawalCredentials, + depositDataRoot, + publicKey, + signature, + }, + merkleProof, + { + from: admin, + } + ), + 'PoolValidators: invalid operator' + ); + }); + + it('fails to slash not added operator', async () => { + await expectRevert( + validators.slashOperator( + { + operator: anyone, + withdrawalCredentials, + depositDataRoot, + publicKey, + signature, + }, + merkleProof, + { + from: admin, + } + ), + 'PoolValidators: invalid operator' + ); + }); + + it('fails to slash operator with invalid deposit data', async () => { + await initializeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }); + await expectRevert( + validators.slashOperator( + { + operator, + withdrawalCredentials, + depositDataRoot: constants.ZERO_BYTES32, + publicKey, + signature, + }, + merkleProof, + { + from: admin, + } + ), + 'PoolValidators: invalid merkle proof' + ); + }); + + it('fails to slash operator with invalid validator status', async () => { + await initializeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }); + await expectRevert( + validators.slashOperator( + { + operator, + withdrawalCredentials: initializeData[1].withdrawalCredentials, + depositDataRoot: initializeData[1].depositDataRoot, + publicKey: initializeData[1].publicKey, + signature: initializeData[1].signature, + }, + initializeData[1].merkleProof, + { + from: admin, + } + ), + 'PoolValidators: invalid validator status' + ); + }); + + it('admin can slash operator', async () => { + let poolBalance = await balance.current(pool.address); + await initializeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }); + expect(await balance.current(pool.address)).to.bignumber.equal( + poolBalance.sub(initAmount) + ); + + let receipt = await validators.slashOperator( + { + operator, + withdrawalCredentials, + depositDataRoot, + publicKey, + signature, + }, + merkleProof, + { + from: admin, + } + ); + + await expectEvent(receipt, 'OperatorSlashed', { + operator, + publicKey: keccak256(publicKey), + refundedAmount: initAmount, + }); + + let _operator = await validators.getOperator(operator); + expect(_operator[0]).to.equal(constants.ZERO_BYTES32); + expect(_operator[1]).to.equal(constants.ZERO_BYTES32); + expect(_operator[2]).to.equal(false); + expect(await balance.current(pool.address)).to.bignumber.equal( + poolBalance + ); + }); + }); + + describe('initialize validator', () => { + let { + publicKey, + signature, + withdrawalCredentials, + merkleProof, + depositDataRoot, + } = initializeData[0]; + + beforeEach(async () => { + await validators.addOperator( + operator, + initializeMerkleRoot, + initializeMerkleProofs, + finalizeMerkleRoot, + finalizeMerkleProofs, + { + from: admin, + } + ); + }); + + it('fails to initialize validator by not oracles', async () => { + await expectRevert( + validators.initializeValidator( + { + operator, + withdrawalCredentials, + depositDataRoot, + publicKey, + signature, + }, + merkleProof, + { + from: anyone, + } + ), + 'PoolValidators: access denied' + ); + }); + + it('fails to initialize twice', async () => { + await validators.depositCollateral(operator, { + value: initAmount, + from: anyone, + }); + await initializeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }); + + await expectRevert( + initializeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }), + 'PoolValidators: invalid validator status' + ); + }); + + it('fails to initialize without collateral', async () => { + await expectRevert( + initializeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }), + 'PoolValidators: invalid operator collateral' + ); + }); + + it('fails to initialize for invalid operator', async () => { + await expectRevert( + initializeValidator({ + operator: anyone, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }), + 'PoolValidators: invalid operator' + ); + }); + + it('fails to initialize for invalid deposit data', async () => { + await validators.depositCollateral(operator, { + value: initAmount, + from: anyone, + }); + await expectRevert( + initializeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot: constants.ZERO_BYTES32, + oracles, + oracleAccounts, + withdrawalCredentials, + }), + 'PoolValidators: invalid merkle proof' + ); + }); + + it('fails to initialize for already locked operator', async () => { + await validators.depositCollateral(operator, { + value: initAmount, + from: anyone, + }); + await initializeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }); + + await expectRevert( + initializeValidator({ + operator, + merkleProof: initializeData[1].merkleProof, + signature: initializeData[1].signature, + publicKey: initializeData[1].publicKey, + withdrawalCredentials: initializeData[1].withdrawalCredentials, + depositDataRoot: initializeData[1].depositDataRoot, + oracles, + oracleAccounts, + }), + 'PoolValidators: operator already locked' + ); + }); + + it('oracles can initialize validator', async () => { + await validators.depositCollateral(operator, { + value: initAmount, + from: anyone, + }); + + let poolBalance = await balance.current(pool.address); + let receipt = await initializeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }); + + await expectEvent.inTransaction( + receipt.tx, + Pool, + 'ValidatorInitialized', + { + operator, + publicKey: keccak256(publicKey), + } + ); + expect( + await validators.validatorStatuses( + keccak256(defaultAbiCoder.encode(['bytes'], [publicKey])) + ) + ).to.bignumber.equal(new BN('1')); + let _operator = await validators.getOperator(operator); + expect(_operator[2]).to.equal(true); + expect(await balance.current(pool.address)).to.bignumber.equal( + poolBalance.sub(initAmount) + ); + }); + }); + + describe('finalize validator', () => { + let { + publicKey, + signature, + withdrawalCredentials, + merkleProof, + depositDataRoot, + } = finalizeData[0]; + + beforeEach(async () => { + await validators.addOperator( + operator, + initializeMerkleRoot, + initializeMerkleProofs, + finalizeMerkleRoot, + finalizeMerkleProofs, + { + from: admin, + } + ); + + await validators.depositCollateral(operator, { + value: initAmount, + from: anyone, + }); + + let { + publicKey, + signature, + withdrawalCredentials, + merkleProof, + depositDataRoot, + } = initializeData[0]; + await initializeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }); + }); + + it('fails to finalize validator by not oracles', async () => { + await expectRevert( + validators.finalizeValidator( + { + operator, + withdrawalCredentials, + depositDataRoot, + publicKey, + signature, + }, + merkleProof, + { + from: anyone, + } + ), + 'PoolValidators: access denied' + ); + }); + + it('fails to finalize twice', async () => { + await finalizeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }); + + await expectRevert( + finalizeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }), + 'PoolValidators: invalid validator status' + ); + }); + + it('fails to finalize not initialized validator', async () => { + let { + publicKey, + signature, + withdrawalCredentials, + merkleProof, + depositDataRoot, + } = finalizeData[1]; + + await expectRevert( + finalizeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }), + 'PoolValidators: invalid validator status' + ); + }); + + it('fails to finalize for invalid operator', async () => { + await expectRevert( + finalizeValidator({ + operator: anyone, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }), + 'PoolValidators: invalid operator' + ); + }); + + it('fails to finalize for invalid deposit data', async () => { + await expectRevert( + finalizeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot: constants.ZERO_BYTES32, + oracles, + oracleAccounts, + withdrawalCredentials, + }), + 'PoolValidators: invalid merkle proof' + ); + }); + + it('oracles can finalize validator', async () => { + let poolBalance = await balance.current(pool.address); + let receipt = await finalizeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }); + + await expectEvent.inTransaction(receipt.tx, Pool, 'ValidatorRegistered', { + operator, + publicKey: keccak256(publicKey), + }); + expect( + await validators.validatorStatuses( + keccak256(defaultAbiCoder.encode(['bytes'], [publicKey])) + ) + ).to.bignumber.equal(new BN('2')); + + let _operator = await validators.getOperator(operator); + expect(_operator[2]).to.equal(false); + expect(await balance.current(pool.address)).to.bignumber.equal( + poolBalance.sub(finalizeAmount) + ); + await checkValidatorRegistered({ + vrc, + operator, + transaction: receipt.tx, + pubKey: publicKey, + withdrawalCredentials, + signature, + validatorDepositAmount: finalizeAmount, + }); + }); + }); +}); diff --git a/test/pool/finalizeMerkleRoot.js b/test/pool/finalizeMerkleRoot.js new file mode 100644 index 00000000..0a8d6ff3 --- /dev/null +++ b/test/pool/finalizeMerkleRoot.js @@ -0,0 +1,166 @@ +const finalizeMerkleRoot = + '0xd7bad7a134e43c228f1bb6b0a895aecf41332a6eb2d0a048d9b160b13f453c9d'; + +const finalizeData = [ + { + publicKey: + '0xb96969dea0a510be05f2abb406344e4576b9597fe29053a8ecdb2ab0cbb4b991859f297f43d7e0e9ab1f909466190544', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0xa80e86d3385f9aee2cf6106ed6e7747eefe138ffe792a62d917c181f213d4af1', + signature: + '0xa08107595c5143ddec5ad1aa63bb2cb7e4ea2dac16d44ccc7513e4c10cfd50fbbbc0900e1112576c0b5078d1b1d1509f033b0c68ac040f6e919e78127ce0e68fbafe6747470d45b52d08939d26a16834282460cd3048e7d0118f201e54187f9a', + merkleProof: [ + '0x3ddd7bb3a18efa5a8b41acc1ef4d38d584c944b98a97f508cf7e95fb0e393c81', + '0xbd20f23721f8fc13fbe344d09c1e6980e321355c19a96bca0d07e7fb5320e5a4', + '0xec80a84ffca5b0a30de986d9001bd49887f1ea6a8de410d7b702672614a1f1e8', + '0xba394c7277955115f0f5029e4b0161b9aae615c1da40da9002164448095a95fd', + ], + }, + { + publicKey: + '0x82a1c1e8fefa9b330d8720e2f7ae2946b6c222d5a386dc07edc6e45e950fb697d20f0d082290a0401c409d312582f19a', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0x02381caab2d2950175240df5b08d39cd467c43241bd31e5fcbec751ff2921794', + signature: + '0x840218561235e4a3fa5199ce9f14c466059cdcf0e86a3326f5b889775a540b232f454cd3f9654eef0da3ee0748c44913156ff261c1a9cb8efd7ca870558dc61746258d83072386dbcb8acd1015f537562ab27d1cfc9e36a1559b875954db3c46', + merkleProof: [ + '0x1b265da452369a48f021e0f651f7cfac6832a44b62e2496eece7fc1263469a94', + '0xc4371cf32b7ce68ad0c939f0f7dd77545ce00aba713ab5d7fcc4bafb0b423737', + '0xec80a84ffca5b0a30de986d9001bd49887f1ea6a8de410d7b702672614a1f1e8', + '0xba394c7277955115f0f5029e4b0161b9aae615c1da40da9002164448095a95fd', + ], + }, + { + publicKey: + '0xb9e286101e44fb424047d332a5f81120310fa67e39d5c647156eebdf0fe07b4d1f6a5aafc4f40e8b707a8ef727469bc3', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0x506bed7fa7ba855d737c63070123b53efc294d367d512f3e98866d136b76226c', + signature: + '0xb6f15b10ff6dc20070c34e4777186ae1dc9b083969d1d612a376ebf913a2467813a92f83fc2a8c8c9a4a03a56fe5df361197f3c8962195c1ade78ccd1f3cb60579bbe57d14e935e6f14b1a25d26f4ad482dacd2628d346eae6bf24732f1170ea', + merkleProof: [ + '0xd721914b33cf5e7444215733d5352074a3f14f3c5771022d395d5115849af01f', + '0x93d9212248bc6f0b057b7b3ebac014908286155742c21b800c1b684db2aafcb8', + ], + }, + { + publicKey: + '0x87b54d1fbe23dba1dbbfe5236569b13a6e9e852e2620fc846625360a7f3f8a96c6763f8f73db2ccc21e76591a87f838e', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0xbda2cb877878294a180b1b4843e2de7fe47ef4bb00d6663974a83a7f53e7c503', + signature: + '0xa3256b4a0c8e87dddbf7fd599b1135e9de5c3e9e2db4002328564a2f042ec305279f4b550a189989c326acbe3ba7b7e30c27451ef4c77fbabb7af5672d306f268043dc74d9f623fd06c7b0eb579d353f1b162e1ab1527fd7c086a25cc2f681fd', + merkleProof: [ + '0x8434e8bed125b88faaba19e0459b8dc37ac2d48a26d55899aa42bf28161f58ef', + '0xc254adb685eb48f9b49ff77fd763d0ceddb59e41820dc2d0a21172e2514a1995', + '0x6456a2c65f6e70616952241b769ad5860a06d93fb4dff0341c9dd3e3fa5cdc9c', + '0xba394c7277955115f0f5029e4b0161b9aae615c1da40da9002164448095a95fd', + ], + }, + { + publicKey: + '0x8e44d45b2656a4a84b788866bbbf8274c12f52a36d47c1fc03f9988b11fe11a8cd4e03be207106feeee135b7b6c66aad', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0x9a37a3df36cadbfadf3e7f7efc2433a45d88be6a66cba3933ab6d2b158aa772b', + signature: + '0x8d3ba5b8d7c13b3b03421476e87966355c483e6dd97da0c26e195d13e7c74dd52db3bb5999d073a4fa74d79872ce907c01125d8b7c7999e5ee2ffb7e3ad3bac06cf63f230b72a06673620ed2bea767c917a6c00dedfcae67fe3a462f3667d7ba', + merkleProof: [ + '0x9c8003f4ac520a588092034a7030ea5b9c0db4745360f86e1902682aa60f0344', + '0xf874f50abe4824031bcd7e2e30fd84b1b881aaab4dea950d5f1625d3d1d35065', + '0x6456a2c65f6e70616952241b769ad5860a06d93fb4dff0341c9dd3e3fa5cdc9c', + '0xba394c7277955115f0f5029e4b0161b9aae615c1da40da9002164448095a95fd', + ], + }, + { + publicKey: + '0xafbcd1d40bd1f265342f23d4db678807959e8c4b3575ba479693265b33c3083bfd62cb5ecdf88d54e59d330f3dc5fb01', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0x79af5a40ccd500c5e32e65cd5badd2d1ed1f35d03cc7fadd04054879b0453287', + signature: + '0xb254d367bb819d984e1fab671aed1b918802f49667e3511ce6f09935861aa409bc8b5b36b90ea928b02da1dee25a53a417fdd947b71f2c26abcafc41f6e89dc4aec409f28412996c9885b6d0779172242820db246209e2b4e8dd9b6cd8390e32', + merkleProof: [ + '0x71e06273d214525b525df506f94ee67b665d4536b3ab29804ffc0a622fbb989d', + '0xbd20f23721f8fc13fbe344d09c1e6980e321355c19a96bca0d07e7fb5320e5a4', + '0xec80a84ffca5b0a30de986d9001bd49887f1ea6a8de410d7b702672614a1f1e8', + '0xba394c7277955115f0f5029e4b0161b9aae615c1da40da9002164448095a95fd', + ], + }, + { + publicKey: + '0xa3f82c068ca69cb9696f3b99eed131884c9f6bd9eb6b395c9a7c187d83627e7f859cecb60f8ee7c5789bcea7e557a853', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0x380deff8bfded3ce6a842ca56c5d99c307371a81c403d31656a8ae69b4f37070', + signature: + '0xa8270f9728ae68795a6f4d4e067e53e535993fff23e5b520b78a9d7a64e2060363691b33697648455dae963c50a63f0004cfda05dc08212b13fe330fe5a8651b9f62339288556766395768fe845e71a15e9f22358018a920758c012a0299ff82', + merkleProof: [ + '0x7b053294a407998f97e71db1a00735cd52aa59233da3908b7680532123229434', + '0xc254adb685eb48f9b49ff77fd763d0ceddb59e41820dc2d0a21172e2514a1995', + '0x6456a2c65f6e70616952241b769ad5860a06d93fb4dff0341c9dd3e3fa5cdc9c', + '0xba394c7277955115f0f5029e4b0161b9aae615c1da40da9002164448095a95fd', + ], + }, + { + publicKey: + '0x94b00c20f4c00bd754502b3436e4e9e6da0d81edaede9da04112cbed90beb554a31c94e3157875fb64dc1e0dbefb9ce2', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0x97dbc5d0891126427519b8ae3f04ce2afc23e618ae10c95d21987d10c34926eb', + signature: + '0xb219c3a60be6275586fb824cf2cf1c976a7d340a82b57a078f2636aa009dce5b9844b4513bd5e95f2813dccfda0100890fdaf1cf38055f480789b1bd0fb5c9e30e9bd4965ea28ec44ae91f151d8c473eae577e047e0ff63045b65b9c8e3e2c54', + merkleProof: [ + '0xc66dd01cb1289694b7cf0f79deba8e4665ea6ded9a0d12aabaa7e1ea6c05a2d4', + '0x93d9212248bc6f0b057b7b3ebac014908286155742c21b800c1b684db2aafcb8', + ], + }, + { + publicKey: + '0x85ff74a6384eb7852c3c4b855053e25bbb75e90897a474382cbc6568574c2393ec0995a059d82f22db6dd711ee6d2556', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0xc1e7816c7a29814018c2573af8f3a4bbba3e7a4261e689f86a235af65231795b', + signature: + '0x8d3ca532136ef7eccd82abc708d2d415e99a86fbc69ac489fe5065fa6d73dcf3b7f96f64acd3625cad1cc593d3485e90191db46bdcc7903bf83c75ef36e3767c1f443ebd652e93d91aef9099eb637278764f185ea2e2ac757307305e520fbdb3', + merkleProof: [ + '0x05610ea5ffbe515526c922bb2fde54e9733b44451282b04e2e35b918b701206b', + '0xc4371cf32b7ce68ad0c939f0f7dd77545ce00aba713ab5d7fcc4bafb0b423737', + '0xec80a84ffca5b0a30de986d9001bd49887f1ea6a8de410d7b702672614a1f1e8', + '0xba394c7277955115f0f5029e4b0161b9aae615c1da40da9002164448095a95fd', + ], + }, + { + publicKey: + '0xa101956aa020ce896aa606b8dff7a91e0ec2429cdf2b62db8230612ecb7058bd733a644f8a607b6f050e179e4a881ff1', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0xf041bc4977be3c420272127431f25b5b28d43793087cc06e48b2e66a005b95ee', + signature: + '0xb2fde3069c8ae6f34e3927f5fd1e6a2634a1659145021d835bdfd2c3cc211718cb60dbddd470c85f1bb956ed9fa728930175f560618ab34fc6c077857548099ba188d5aa585e6cca9fe4d2cc50cfad78c7d15e7d124c08d1f81a1e47f474799d', + merkleProof: [ + '0x8a54181dce16329ed32c7f92439e31880333231527536163940b0cbd68d799a7', + '0xf874f50abe4824031bcd7e2e30fd84b1b881aaab4dea950d5f1625d3d1d35065', + '0x6456a2c65f6e70616952241b769ad5860a06d93fb4dff0341c9dd3e3fa5cdc9c', + '0xba394c7277955115f0f5029e4b0161b9aae615c1da40da9002164448095a95fd', + ], + }, +]; + +module.exports = { + finalizeData, + finalizeMerkleRoot, +}; diff --git a/test/pool/initializeMerkleRoot.js b/test/pool/initializeMerkleRoot.js new file mode 100644 index 00000000..3a03c341 --- /dev/null +++ b/test/pool/initializeMerkleRoot.js @@ -0,0 +1,166 @@ +const initializeMerkleRoot = + '0xf42fe3b48cc5e9bff7e2777cfe4981a28b5b3c7cd604e6abeb3e7bc46efdad4a'; + +const initializeData = [ + { + publicKey: + '0xb96969dea0a510be05f2abb406344e4576b9597fe29053a8ecdb2ab0cbb4b991859f297f43d7e0e9ab1f909466190544', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0x54d3673931628f06f64ca1bdc20b88338097d42bbec1032a4085ecf2cc6bbe4a', + signature: + '0x8933a4b8ce2e563e8f1ee335edde2c7d706f234363874939fc536bc144471a450c4da4f0e4e13edeb16c9cb739776ae7012ec4bfd265fd37a0bfaf3e45eec8bfcce873fc0e0ee22593dee4a4fa66f67bd75b4a59b3f458419c5deae8d68ff787', + merkleProof: [ + '0x0d50f81c690ec6ce2195c0fd17e7b12bcc193d08dfaeb290902c49baf260c7e0', + '0x71edb70330fe30fd386d48bddd88b92b5e1ca23a4638e227624777cfe943da18', + '0x409236559f2addf924723f13fdf3e6867ef4e5c87bf11896a159ca0c2b9ecccc', + '0x7d6711df91f76ae4361bb1e7b90070ed43b026418cdd9e73adc651a91ec040a1', + ], + }, + { + publicKey: + '0x82a1c1e8fefa9b330d8720e2f7ae2946b6c222d5a386dc07edc6e45e950fb697d20f0d082290a0401c409d312582f19a', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0x02d3e148895dc7ccfe7607532f37a24ff517315d44e4a75b50544455e029f547', + signature: + '0x8562de4ea7ae13f4ab31a70a3b57a9fe48b948807ab054118442899f28190e7a680cfb5755e9dca19d7c46ddd2e94c8e0fd3dd083c83b8cf7d56a3293ce01d56fa97cac7d6a309e1aa55e18c2cfc2138917f34bc47493b40c92ffd6630544307', + merkleProof: [ + '0xbd484d0623ae33a4513d34f02bbe1b195d928955cc6e42bd53d9b7bcee3c11be', + '0x8488179b936bfc7270a95b441ff36cf5ebb237ed814f1b67f367d6f9e26dbc06', + '0x307b1d09a6f5d0639a787fcf3f7b3d311f15ccaf20d4d255f2a3569abed4faa3', + '0x7d6711df91f76ae4361bb1e7b90070ed43b026418cdd9e73adc651a91ec040a1', + ], + }, + { + publicKey: + '0xb9e286101e44fb424047d332a5f81120310fa67e39d5c647156eebdf0fe07b4d1f6a5aafc4f40e8b707a8ef727469bc3', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0xf53b8cda810a665de32068bd503d061c04d6f5c3cb79aaa692062b9406d96c53', + signature: + '0xace5fa8291b94149b7141adc65952ca56196e2c43ff347c093d4cd02e4f1af0b7ca71f7fd5708d317cda0c7cba4a0e19112efcb768ab35af2e5fc0035feae62e7bd0b66cb9b3895f8659cf4f79b3a9f680872d6ca2ea3dd36730369fb1ad1a8a', + merkleProof: [ + '0xdbc7634a30af542e808ba9d255aa9314e3ff8ba9e6c54bf1a896ce02c3fd518f', + '0xf9d82b6415020d5762a00be524008b3eec1d230cf1e72a03dc416acc2f4fee70', + ], + }, + { + publicKey: + '0x87b54d1fbe23dba1dbbfe5236569b13a6e9e852e2620fc846625360a7f3f8a96c6763f8f73db2ccc21e76591a87f838e', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0x159e9eca1c7e72c33d7a2361cdadd3ac4ec2a4befa64492b332c2b7fca40458f', + signature: + '0xa5707105530a461c1632ef7a7847d8262cd4f26ad603e267825a998c448ac393a48fab406a1b8bab07a0dce021c273a305d0328b17bdc853111baad5112977a3e95a2f91fb7d1b143fa0022e07e62da9e7175abea68b15a211de1c8db5d1cc75', + merkleProof: [ + '0x07a08a7e18fe8e7f284f8270b6c3ae1f780d8643d312fda3b92ed62fb8e9a3d0', + '0xbfa04224f38f3f07c150ed0eb056d7d612d081e46954a3adf591039667abbaa1', + '0x409236559f2addf924723f13fdf3e6867ef4e5c87bf11896a159ca0c2b9ecccc', + '0x7d6711df91f76ae4361bb1e7b90070ed43b026418cdd9e73adc651a91ec040a1', + ], + }, + { + publicKey: + '0x8e44d45b2656a4a84b788866bbbf8274c12f52a36d47c1fc03f9988b11fe11a8cd4e03be207106feeee135b7b6c66aad', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0xa3bb4549fee8c577f121d17dcbab52fbaaa7342a8d7861575973c05408f9561d', + signature: + '0x9056037a087cf28892996e3e33b73f5554a6bcfc6688a79eb23aba93691d12dfe76e0cd6ca867f10adaba1d9f1539c73175829f8746141e864875e27bba37950f179075421112f33334c0bff8b3c64daf05bb2ffe60f9fb53a65f934c3889328', + merkleProof: [ + '0x124a3ce13fbc9d422794b234ff30a854b32a3d175ba4910aa57916a88791df39', + '0x71edb70330fe30fd386d48bddd88b92b5e1ca23a4638e227624777cfe943da18', + '0x409236559f2addf924723f13fdf3e6867ef4e5c87bf11896a159ca0c2b9ecccc', + '0x7d6711df91f76ae4361bb1e7b90070ed43b026418cdd9e73adc651a91ec040a1', + ], + }, + { + publicKey: + '0xafbcd1d40bd1f265342f23d4db678807959e8c4b3575ba479693265b33c3083bfd62cb5ecdf88d54e59d330f3dc5fb01', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0x30dba0d02692edc331c52bf221c81ce183f2750460a98ecfd4f50e9fecdaf82d', + signature: + '0x96f286db9a99b443aa7beb409a0896e3c4b724e9500970d6ffe3a1313c585c48a1fe4971a2b0aa849cb1a697acea137c080e4f7c4e488209061e44a0605f2448561ebb3c0f5d0c4c12873105e1a73c9fe550c2473a5085e1c0e96ed11b6430e3', + merkleProof: [ + '0x0989582502b4c9f40a0ca6e8006480a95dbdeb6da9668c3b0ae122b9f886d131', + '0xbfa04224f38f3f07c150ed0eb056d7d612d081e46954a3adf591039667abbaa1', + '0x409236559f2addf924723f13fdf3e6867ef4e5c87bf11896a159ca0c2b9ecccc', + '0x7d6711df91f76ae4361bb1e7b90070ed43b026418cdd9e73adc651a91ec040a1', + ], + }, + { + publicKey: + '0xa3f82c068ca69cb9696f3b99eed131884c9f6bd9eb6b395c9a7c187d83627e7f859cecb60f8ee7c5789bcea7e557a853', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0x62596a996f3e157131067db8e894689981059db15f441da0bd3348bf9c95700c', + signature: + '0x83e34d4907ac0e83a37492a943be7bca1cacbfb5801e51c67caddfffa2dc6ffb26337fc905bab9ee40365561d4531849036d01cf4ed4733f125b3ed56fe9335ef5d5ce5b0ae58bdb209231519f464891e359f8152ce98f1dbc5f98a3524488f9', + merkleProof: [ + '0xdf9a7186d319700dcf564b4f9ca1006b815d4bd03f096b61c042f6f65740f91c', + '0xf9d82b6415020d5762a00be524008b3eec1d230cf1e72a03dc416acc2f4fee70', + ], + }, + { + publicKey: + '0x94b00c20f4c00bd754502b3436e4e9e6da0d81edaede9da04112cbed90beb554a31c94e3157875fb64dc1e0dbefb9ce2', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0x6f89a72c64b998bc89bddd29f1d50a05b43a674b1084fdc2ca3f3f9f622497ce', + signature: + '0x904eead56c2fb5e9023e62759bacafef0869ba906978e3084fb3ad7c09073bbc3ddcd249f1eaad2b83d1f2fc3ca3af450d28f6f63405eb4b93336bbf5b883bba0c14f0a7d2e5aa18c9bd856d71bc590412be51bc38f53762ad741e3273404ded', + merkleProof: [ + '0x4205d651e6b9494b709014f5bc720d544161086418cd588cc9c7f3b76e1900de', + '0xb963f6a68457b6d5c8a8faa228b9d812e8429907a50f2cd2fbf5b68875a37379', + '0x307b1d09a6f5d0639a787fcf3f7b3d311f15ccaf20d4d255f2a3569abed4faa3', + '0x7d6711df91f76ae4361bb1e7b90070ed43b026418cdd9e73adc651a91ec040a1', + ], + }, + { + publicKey: + '0x85ff74a6384eb7852c3c4b855053e25bbb75e90897a474382cbc6568574c2393ec0995a059d82f22db6dd711ee6d2556', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0xb0ec80ea15586a41427fae095729b1750fd53affcd5987b52f5b8a798946243a', + signature: + '0x9996c3aea1cd7a63fe932164b823e90a1ca43b7627e123df2a9f07cdb82bb60796b579b21be8d99ba95323a93025270b17c18257c07b66caddd0835b8af674ce161c045d98974469bcca31aebcdcdf466427d51d3da75156a74a44b80e31f12a', + merkleProof: [ + '0x44de26ad0dabfcdd46d6716780bb1a44b04b0e9af5a5fcec567e14cb917171c5', + '0xb963f6a68457b6d5c8a8faa228b9d812e8429907a50f2cd2fbf5b68875a37379', + '0x307b1d09a6f5d0639a787fcf3f7b3d311f15ccaf20d4d255f2a3569abed4faa3', + '0x7d6711df91f76ae4361bb1e7b90070ed43b026418cdd9e73adc651a91ec040a1', + ], + }, + { + publicKey: + '0xa101956aa020ce896aa606b8dff7a91e0ec2429cdf2b62db8230612ecb7058bd733a644f8a607b6f050e179e4a881ff1', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + depositDataRoot: + '0x1a850e672c25d06eb7535ef910d3dd70e9f8262f512685c2f76241e1883a500f', + signature: + '0xa2b3fdf97a9a0171a5869289d6b4d62006d754148234dbccf1ecb75e2db01f38933b9e9bec315a3a08f0af476edec75a0d6b9ef7a6979e0f4244f7e0af3d97f013603f920c59b15232e22fe9867da53b4473e7c4c7616de665075d5d9becb003', + merkleProof: [ + '0xa46d6a464ae9cd95edaae1ed5b0aaa9b23f24d43a2aa4e6ea94882fb6bfb15cf', + '0x8488179b936bfc7270a95b441ff36cf5ebb237ed814f1b67f367d6f9e26dbc06', + '0x307b1d09a6f5d0639a787fcf3f7b3d311f15ccaf20d4d255f2a3569abed4faa3', + '0x7d6711df91f76ae4361bb1e7b90070ed43b026418cdd9e73adc651a91ec040a1', + ], + }, +]; + +module.exports = { + initializeData, + initializeMerkleRoot, +}; diff --git a/test/pool/registerValidator.test.js b/test/pool/registerValidator.test.js deleted file mode 100644 index 2a401d46..00000000 --- a/test/pool/registerValidator.test.js +++ /dev/null @@ -1,167 +0,0 @@ -const { - BN, - expectRevert, - expectEvent, - ether, - balance, - send, -} = require('@openzeppelin/test-helpers'); -const { upgradeContracts } = require('../../deployments'); -const { contractSettings, contracts } = require('../../deployments/settings'); -const { vrcAbi } = require('../../deployments/vrc'); -const { - checkCollectorBalance, - checkValidatorRegistered, - stopImpersonatingAccount, - impersonateAccount, - resetFork, -} = require('../utils'); -const { validatorParams } = require('./validatorParams'); - -const Pool = artifacts.require('Pool'); -const Validators = artifacts.require('Validators'); - -const validatorDeposit = ether('32'); -const withdrawalCredentials = - '0x0072ea0cf49536e3c66c787f705186df9a4378083753ae9536d65b3ad7fcddc4'; -const validator = validatorParams[0]; - -contract('Pool (register validator)', ([operator, sender, other]) => { - const admin = contractSettings.admin; - let pool, vrc; - - before(async () => { - vrc = new web3.eth.Contract(vrcAbi, contractSettings.VRC); - }); - - after(async () => stopImpersonatingAccount(admin)); - - beforeEach(async () => { - await impersonateAccount(admin); - await send.ether(other, admin, ether('5')); - await upgradeContracts(); - - pool = await Pool.at(contracts.pool); - let validators = await Validators.at(contracts.validators); - await validators.addOperator(operator, { from: admin }); - - // collect validator deposit - let poolBalance = await balance.current(pool.address); - let depositAmount = validatorDeposit.sub(poolBalance); - await pool.addDeposit({ - from: sender, - value: depositAmount, - }); - }); - - afterEach(async () => resetFork()); - - it('fails to register validator with callers other than operator', async () => { - await expectRevert( - pool.registerValidator(validator, { - from: other, - }), - 'Pool: access denied' - ); - }); - - it('fails to register validator with paused pool', async () => { - await pool.pause({ from: admin }); - expect(await pool.paused()).equal(true); - - await expectRevert( - pool.registerValidator(validator, { - from: other, - }), - 'Pausable: paused' - ); - }); - - it('fails to register validator with used public key', async () => { - await pool.setWithdrawalCredentials(withdrawalCredentials, { - from: admin, - }); - - // create new deposit - await pool.addDeposit({ - from: sender, - value: validatorDeposit, - }); - - // Register 1 validator - await pool.registerValidator(validator, { - from: operator, - }); - - // Register 2 validator with the same validator public key - await expectRevert( - pool.registerValidator(validator, { - from: operator, - }), - 'Validators: invalid public key' - ); - await checkCollectorBalance(pool, validatorDeposit); - }); - - it('fails to register validator when validator deposit amount is not collect', async () => { - await pool.setWithdrawalCredentials(withdrawalCredentials, { - from: admin, - }); - - // Register 1 validator - await pool.registerValidator(validator, { - from: operator, - }); - - await expectRevert.unspecified( - pool.registerValidator(validatorParams[1], { - from: operator, - }) - ); - - await checkCollectorBalance(pool, new BN(0)); - }); - - it('registers validator', async () => { - await pool.setWithdrawalCredentials(withdrawalCredentials, { - from: admin, - }); - - // one validator is already created - let totalAmount = validatorDeposit; - - for (let i = 1; i < validatorParams.length; i++) { - await pool.addDeposit({ - from: sender, - value: validatorDeposit, - }); - totalAmount = totalAmount.add(validatorDeposit); - } - - // check balance increased correctly - await checkCollectorBalance(pool, totalAmount); - - // register validators - for (let i = 0; i < validatorParams.length; i++) { - const receipt = await pool.registerValidator(validatorParams[i], { - from: operator, - }); - await expectEvent(receipt, 'ValidatorRegistered', { - publicKey: validatorParams[i].publicKey, - operator, - }); - totalAmount = totalAmount.sub(validatorDeposit); - await checkValidatorRegistered({ - vrc, - operator, - transaction: receipt.tx, - pubKey: validatorParams[i].publicKey, - withdrawalCredentials, - signature: validatorParams[i].signature, - }); - } - - // check balance empty - await checkCollectorBalance(pool); - }); -}); diff --git a/test/pool/settings.test.js b/test/pool/settings.test.js index 9de7d33c..7d9dd616 100644 --- a/test/pool/settings.test.js +++ b/test/pool/settings.test.js @@ -4,7 +4,6 @@ const { ether, expectRevert, expectEvent, - BN, } = require('@openzeppelin/test-helpers'); const { stopImpersonatingAccount, @@ -12,41 +11,37 @@ const { resetFork, setActivatedValidators, setupOracleAccounts, + registerValidator, } = require('../utils'); -const { validatorParams } = require('./validatorParams'); const { upgradeContracts } = require('../../deployments'); const { contractSettings, contracts } = require('../../deployments/settings'); const Pool = artifacts.require('Pool'); const Oracles = artifacts.require('Oracles'); -const Validators = artifacts.require('Validators'); +const PoolValidators = artifacts.require('PoolValidators'); const RewardEthToken = artifacts.require('RewardEthToken'); -const withdrawalCredentials = - '0x0072ea0cf49536e3c66c787f705186df9a4378083753ae9536d65b3ad7fcddc4'; - contract('Pool (settings)', ([operator, anyone, ...otherAccounts]) => { const admin = contractSettings.admin; - let pool, oracles, oracleAccounts, rewardEthToken; + let pool, oracles, oracleAccounts, rewardEthToken, validators; after(async () => stopImpersonatingAccount(admin)); beforeEach(async () => { await impersonateAccount(admin); await send.ether(anyone, admin, ether('5')); - let upgradedContracts = await upgradeContracts(); - pool = await Pool.at(contracts.pool); - let validators = await Validators.at(contracts.validators); - await validators.addOperator(operator, { from: admin }); + let upgradedContracts = await upgradeContracts(); + pool = await Pool.at(contracts.pool); + validators = await PoolValidators.at(upgradedContracts.poolValidators); oracles = await Oracles.at(upgradedContracts.oracles); + rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); oracleAccounts = await setupOracleAccounts({ - oracles, admin, + oracles, accounts: otherAccounts, }); - rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); }); afterEach(async () => resetFork()); @@ -124,9 +119,11 @@ contract('Pool (settings)', ([operator, anyone, ...otherAccounts]) => { }); it('admin can override activated validators', async () => { - let activatedValidators = new BN( - contractSettings.activatedValidators - ).add(new BN(contractSettings.pendingValidators)); + let activatedValidators = await pool.activatedValidators(); + activatedValidators = activatedValidators.add( + await pool.pendingValidators() + ); + let receipt = await pool.setActivatedValidators(activatedValidators, { from: admin, }); @@ -139,20 +136,23 @@ contract('Pool (settings)', ([operator, anyone, ...otherAccounts]) => { }); it('oracles contract can set activated validators', async () => { - await pool.setWithdrawalCredentials(withdrawalCredentials, { - from: admin, - }); - await pool.addDeposit({ + await pool.stake(anyone, { from: anyone, value: ether('32'), }); - await pool.registerValidator(validatorParams[0], { - from: operator, + await registerValidator({ + admin, + validators, + operator, + oracles, + oracleAccounts, }); - let activatedValidators = new BN(contractSettings.activatedValidators) - .add(new BN(contractSettings.pendingValidators)) - .add(new BN(1)); + let activatedValidators = await pool.activatedValidators(); + activatedValidators = activatedValidators.add( + await pool.pendingValidators() + ); + let receipt = await setActivatedValidators({ admin, pool, @@ -167,7 +167,7 @@ contract('Pool (settings)', ([operator, anyone, ...otherAccounts]) => { 'ActivatedValidatorsUpdated', { activatedValidators, - sender: contracts.oracles, + sender: oracles.address, } ); expect(await pool.activatedValidators()).to.bignumber.equal( @@ -175,31 +175,4 @@ contract('Pool (settings)', ([operator, anyone, ...otherAccounts]) => { ); }); }); - - describe('withdrawal credentials', () => { - const withdrawalCredentials = - '0x0072ea0cf49536e3c66c787f705186df9a4378083753ae9536d65b3ad7fcddc4'; - - it('not admin fails to update withdrawal credentials', async () => { - await expectRevert( - pool.setWithdrawalCredentials(withdrawalCredentials, { - from: anyone, - }), - 'OwnablePausable: access denied' - ); - }); - - it('admin can update withdrawal credentials', async () => { - let receipt = await pool.setWithdrawalCredentials(withdrawalCredentials, { - from: admin, - }); - - await expectEvent(receipt, 'WithdrawalCredentialsUpdated', { - withdrawalCredentials, - }); - expect(await pool.withdrawalCredentials()).to.equal( - withdrawalCredentials - ); - }); - }); }); diff --git a/test/pool/addDeposit.test.js b/test/pool/stake.test.js similarity index 57% rename from test/pool/addDeposit.test.js rename to test/pool/stake.test.js index 9f536e4f..5dc7a602 100644 --- a/test/pool/addDeposit.test.js +++ b/test/pool/stake.test.js @@ -5,6 +5,7 @@ const { send, expectRevert, expectEvent, + constants, BN, } = require('@openzeppelin/test-helpers'); const { @@ -12,23 +13,29 @@ const { impersonateAccount, resetFork, getDepositAmount, + registerValidator, + setupOracleAccounts, } = require('../utils'); const { upgradeContracts } = require('../../deployments'); const { contractSettings, contracts } = require('../../deployments/settings'); -const { checkCollectorBalance, checkStakedEthToken } = require('../utils'); -const { validatorParams } = require('./validatorParams'); +const { checkStakedEthToken } = require('../utils'); +const { initializeData } = require('./initializeMerkleRoot'); const Pool = artifacts.require('Pool'); const StakedEthToken = artifacts.require('StakedEthToken'); -const Validators = artifacts.require('Validators'); +const PoolValidators = artifacts.require('PoolValidators'); +const RevenueSharing = artifacts.require('RevenueSharing'); +const Oracles = artifacts.require('Oracles'); -const withdrawalCredentials = - '0x0072ea0cf49536e3c66c787f705186df9a4378083753ae9536d65b3ad7fcddc4'; - -contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { +contract('Pool (stake)', (accounts) => { const admin = contractSettings.admin; + let [sender1, sender2, sender3, operator, ...otherAccounts] = accounts; let pool, stakedEthToken, + validators, + partnersRevenueSharing, + oracles, + oracleAccounts, totalSupply, poolBalance, activatedValidators, @@ -37,37 +44,55 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { after(async () => stopImpersonatingAccount(admin)); beforeEach(async () => { - // reset contract settings - activatedValidators = new BN(contractSettings.activatedValidators); - pendingValidators = new BN(contractSettings.pendingValidators); - await impersonateAccount(admin); await send.ether(sender3, admin, ether('5')); - await upgradeContracts(); + let upgradedContracts = await upgradeContracts(); pool = await Pool.at(contracts.pool); stakedEthToken = await StakedEthToken.at(contracts.stakedEthToken); + validators = await PoolValidators.at(upgradedContracts.poolValidators); + partnersRevenueSharing = await RevenueSharing.at( + upgradedContracts.partnersRevenueSharing + ); + oracles = await Oracles.at(upgradedContracts.oracles); + oracleAccounts = await setupOracleAccounts({ + admin, + oracles, + accounts: otherAccounts, + }); totalSupply = await stakedEthToken.totalSupply(); poolBalance = await balance.current(pool.address); + activatedValidators = await pool.activatedValidators(); + pendingValidators = await pool.pendingValidators(); }); afterEach(async () => resetFork()); - describe('adding deposit', () => { - it('fails to add a deposit with zero amount', async () => { + describe('stake', () => { + it('fails to stake with zero amount', async () => { await expectRevert( - pool.addDeposit({ from: sender1, value: ether('0') }), + pool.stake(sender1, { from: sender1, value: ether('0') }), 'Pool: invalid deposit amount' ); }); - it('fails to add a deposit to paused pool', async () => { + it('fails to stake with zero address', async () => { + await expectRevert( + pool.stake(constants.ZERO_ADDRESS, { + from: sender1, + value: ether('0'), + }), + 'Pool: invalid recipient' + ); + }); + + it('fails to stake in paused pool', async () => { await pool.pause({ from: admin }); expect(await pool.paused()).equal(true); await expectRevert( - pool.addDeposit({ + pool.stake({ from: sender1, value: ether('1'), }), @@ -83,7 +108,7 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { totalSupply = totalSupply.add(depositAmount1); poolBalance = poolBalance.add(depositAmount1); - await pool.addDeposit({ + await pool.stake({ from: sender1, value: depositAmount1, }); @@ -101,7 +126,7 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { totalSupply = totalSupply.add(depositAmount2); poolBalance = poolBalance.add(depositAmount2); - await pool.addDeposit({ + await pool.stake({ from: sender2, value: depositAmount2, }); @@ -113,7 +138,9 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { }); // check contract balance - await checkCollectorBalance(pool, poolBalance); + expect(await balance.current(pool.address)).to.be.bignumber.equal( + poolBalance + ); }); it('places deposit of user to the activation queue with exceeded pending validators limit', async () => { @@ -128,7 +155,7 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { .add(new BN(2)); // check deposit amount placed in activation queue - let receipt = await pool.addDeposit({ + let receipt = await pool.stake({ from: sender1, value: depositAmount, }); @@ -142,7 +169,9 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { ).to.bignumber.equal(depositAmount); // check contract balance - await checkCollectorBalance(pool, poolBalance); + expect(await balance.current(pool.address)).to.be.bignumber.equal( + poolBalance + ); expect(await stakedEthToken.totalSupply()).to.bignumber.equal( totalSupply ); @@ -161,7 +190,7 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { totalSupply = totalSupply.add(depositAmount); // check deposit amount added immediately - await pool.addDeposit({ + await pool.stake({ from: sender1, value: depositAmount, }); @@ -176,7 +205,153 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { ).to.bignumber.equal(new BN(0)); // check contract balance - await checkCollectorBalance(pool, poolBalance); + expect(await balance.current(pool.address)).to.be.bignumber.equal( + poolBalance + ); + }); + + it('can stake to different recipient address', async () => { + let amount = ether('1'); + totalSupply = totalSupply.add(amount); + + let receipt = await pool.stakeOnBehalf(sender2, { + from: sender1, + value: amount, + }); + await expectEvent.inTransaction(receipt.tx, StakedEthToken, 'Transfer', { + from: constants.ZERO_ADDRESS, + to: sender2, + value: amount, + }); + await checkStakedEthToken({ + stakedEthToken, + totalSupply, + account: sender2, + balance: amount, + }); + await checkStakedEthToken({ + stakedEthToken, + totalSupply, + account: sender1, + balance: new BN(0), + }); + }); + + it('can stake without recipient address', async () => { + let amount = ether('1'); + totalSupply = totalSupply.add(amount); + + let receipt = await pool.stake({ + from: sender1, + value: amount, + }); + await expectEvent.inTransaction(receipt.tx, StakedEthToken, 'Transfer', { + from: constants.ZERO_ADDRESS, + to: sender1, + value: amount, + }); + await checkStakedEthToken({ + stakedEthToken, + totalSupply, + account: sender1, + balance: amount, + }); + }); + + describe('staking with partner', () => { + const partner = otherAccounts[0]; + const revenueShare = new BN(1000); + + beforeEach(async () => { + await partnersRevenueSharing.addAccount(partner, revenueShare, { + from: admin, + }); + }); + + it('fails to stake with invalid partner', async () => { + await expectRevert( + pool.stakeWithPartner(sender1, { + from: sender1, + value: ether('1'), + }), + 'RevenueSharing: account is not added' + ); + }); + + it('can stake with partner', async () => { + let amount = ether('1'); + totalSupply = totalSupply.add(amount); + + let prevTotalPoints = await partnersRevenueSharing.totalPoints(); + let receipt = await pool.stakeWithPartner(partner, { + from: sender1, + value: amount, + }); + await expectEvent.inTransaction( + receipt.tx, + StakedEthToken, + 'Transfer', + { + from: constants.ZERO_ADDRESS, + to: sender1, + value: amount, + } + ); + await checkStakedEthToken({ + stakedEthToken, + totalSupply, + account: sender1, + balance: amount, + }); + + await expectEvent.inTransaction( + receipt.tx, + RevenueSharing, + 'AmountIncreased', + { + beneficiary: partner, + amount: amount, + reward: new BN(0), + } + ); + + let points = revenueShare.mul(amount); + expect( + (await partnersRevenueSharing.checkpoints(partner)).amount + ).to.bignumber.equal(amount); + expect( + await partnersRevenueSharing.pointsOf(partner) + ).to.bignumber.equal(points); + expect(await partnersRevenueSharing.totalPoints()).to.bignumber.equal( + prevTotalPoints.add(points) + ); + }); + + it('can stake with partner and different recipient', async () => { + let amount = ether('1'); + totalSupply = totalSupply.add(amount); + + let receipt = await pool.stakeWithPartnerOnBehalf(partner, sender2, { + from: sender1, + value: amount, + }); + await expectEvent.inTransaction( + receipt.tx, + StakedEthToken, + 'Transfer', + { + from: constants.ZERO_ADDRESS, + to: sender2, + value: amount, + } + ); + await checkStakedEthToken({ + stakedEthToken, + totalSupply, + account: sender2, + balance: amount, + }); + }); }); }); @@ -188,7 +363,7 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { await pool.setMinActivatingDeposit(ether('0.01'), { from: admin }); depositAmount = ether('32'); - await pool.addDeposit({ + await pool.stake(sender1, { from: sender1, value: depositAmount, }); @@ -196,13 +371,12 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { .add(pendingValidators) .add(new BN(1)); - let validators = await Validators.at(contracts.validators); - await validators.addOperator(operator, { from: admin }); - await pool.setWithdrawalCredentials(withdrawalCredentials, { - from: admin, - }); - await pool.registerValidator(validatorParams[0], { - from: operator, + await registerValidator({ + admin, + validators, + oracles, + oracleAccounts, + operator, }); }); @@ -279,7 +453,9 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { }); // check contract balance - await checkCollectorBalance(pool, poolBalance); + expect(await balance.current(pool.address)).to.be.bignumber.equal( + poolBalance + ); }); }); @@ -291,7 +467,7 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { await pool.setMinActivatingDeposit(ether('0.01'), { from: admin }); depositAmount = ether('32'); - await pool.addDeposit({ + await pool.stake({ from: sender3, value: depositAmount, }); @@ -299,7 +475,7 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { .add(pendingValidators) .add(new BN(1)); - await pool.addDeposit({ + await pool.stake({ from: sender3, value: depositAmount, }); @@ -307,16 +483,21 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { .add(pendingValidators) .add(new BN(2)); - let validators = await Validators.at(contracts.validators); - await validators.addOperator(operator, { from: admin }); - await pool.setWithdrawalCredentials(withdrawalCredentials, { - from: admin, - }); - await pool.registerValidator(validatorParams[0], { - from: operator, - }); - await pool.registerValidator(validatorParams[1], { - from: operator, + await registerValidator({ + admin, + validators, + oracles, + oracleAccounts, + operator, + depositDataIndex: 0, + }); + await registerValidator({ + admin, + validators, + oracles, + oracleAccounts, + operator, + depositDataIndex: 1, }); }); @@ -409,7 +590,58 @@ contract('Pool (add deposit)', ([sender1, sender2, sender3, operator]) => { }); // check contract balance - await checkCollectorBalance(pool, poolBalance); + expect(await balance.current(pool.address)).to.be.bignumber.equal( + poolBalance + ); }); }); + + it('only PoolValidators contract can initialize new validators', async () => { + const { publicKey, signature, withdrawalCredentials, depositDataRoot } = + initializeData[0]; + await expectRevert( + pool.initializeValidator( + { + operator, + withdrawalCredentials, + depositDataRoot, + publicKey, + signature, + }, + { + from: sender1, + } + ), + 'Pool: access denied' + ); + }); + + it('only PoolValidators contract can finalize new validators', async () => { + const { publicKey, signature, withdrawalCredentials, depositDataRoot } = + initializeData[0]; + await expectRevert( + pool.finalizeValidator( + { + operator, + withdrawalCredentials, + depositDataRoot, + publicKey, + signature, + }, + { + from: sender1, + } + ), + 'Pool: access denied' + ); + }); + + it('only PoolValidators contract can refund', async () => { + await expectRevert( + pool.refund({ + from: sender1, + }), + 'Pool: access denied' + ); + }); }); diff --git a/test/pool/upgrading.test.js b/test/pool/upgrading.test.js index 8dd80b30..257f9542 100644 --- a/test/pool/upgrading.test.js +++ b/test/pool/upgrading.test.js @@ -1,4 +1,3 @@ -const { expect } = require('chai'); const { expectRevert, send, ether } = require('@openzeppelin/test-helpers'); const { stopImpersonatingAccount, @@ -12,22 +11,24 @@ const Pool = artifacts.require('Pool'); contract('Pool (upgrading)', ([sender]) => { const admin = contractSettings.admin; - let pool; + let pool, + poolValidators, + oracles, + partnersRevenueSharing, + operatorsRevenueSharing; after(async () => stopImpersonatingAccount(admin)); beforeEach(async () => { await impersonateAccount(admin); await send.ether(sender, admin, ether('5')); - await upgradeContracts(); + ({ + poolValidators, + oracles, + partnersRevenueSharing, + operatorsRevenueSharing, + } = await upgradeContracts()); pool = await Pool.at(contracts.pool); - - expect(await pool.activatedValidators()).to.bignumber.equal( - contractSettings.activatedValidators - ); - expect(await pool.pendingValidatorsLimit()).to.bignumber.equal( - contractSettings.pendingValidatorsLimit - ); }); afterEach(async () => resetFork()); @@ -35,11 +36,10 @@ contract('Pool (upgrading)', ([sender]) => { it('fails to upgrade with not admin privilege', async () => { await expectRevert( pool.upgrade( - contracts.oracles, - contractSettings.activatedValidators, - contractSettings.pendingValidators, - contractSettings.minActivatingDeposit, - contractSettings.pendingValidatorsLimit, + poolValidators, + oracles, + partnersRevenueSharing, + operatorsRevenueSharing, { from: sender } ), 'OwnablePausable: access denied' @@ -49,11 +49,10 @@ contract('Pool (upgrading)', ([sender]) => { it('fails to upgrade when not paused', async () => { await expectRevert( pool.upgrade( - contracts.oracles, - contractSettings.activatedValidators, - contractSettings.pendingValidators, - contractSettings.minActivatingDeposit, - contractSettings.pendingValidatorsLimit, + poolValidators, + oracles, + partnersRevenueSharing, + operatorsRevenueSharing, { from: admin } ), 'Pausable: not paused' @@ -64,11 +63,10 @@ contract('Pool (upgrading)', ([sender]) => { await pool.pause({ from: admin }); await expectRevert( pool.upgrade( - contracts.oracles, - contractSettings.activatedValidators, - contractSettings.pendingValidators, - contractSettings.minActivatingDeposit, - contractSettings.pendingValidatorsLimit, + poolValidators, + oracles, + partnersRevenueSharing, + operatorsRevenueSharing, { from: admin } ), 'Pool: already upgraded' diff --git a/test/pool/validatorParams.js b/test/pool/validatorParams.js deleted file mode 100644 index db90cba7..00000000 --- a/test/pool/validatorParams.js +++ /dev/null @@ -1,94 +0,0 @@ -const validatorParams = [ - { - publicKey: - '0xa5a341b7b6b3a7b0f274b665722c5c482cd4b80701312ecdb829dd5073e7f024ea71002a6721bd596d327d4a8bf87fe9', - signature: - '0xab99c43070ed99e26098b642a5ba56d64044b3fafdee841eef0a5a45a69ad196d6caa80f35174a57cc484ac346335dc80de9d58059ca148e77c320b66c1d4aad38862593b3d7cd5981a146ff081fbe1dda038f1a8de73595049d7cf22ac2781c', - depositDataRoot: - '0x13ea126f312aaa1b2b49f5a4807e9ea21a300b3dab40ff8323e159af9166acf4', - }, - { - publicKey: - '0xb3e0896caab475e0cb8cd8ac1a52880559b73e59e98de06c9e24f855dcaf8d7634c83645e4b693606ef11a045b23a3be', - signature: - '0x97581e9bab91ea0da809a31520bd664c03565a73bf86d6bb7803c9bec2d349b80e88b718f277240337edead3e003d5460101dc9191c1970dae0ac632ffcf78f31433bdf507f99fc6f10afcbfe8272aeb2dbb2923e537f313419da6d2d6ff3678', - depositDataRoot: - '0x1155f061ca0684ac5f271306ad3b212b4e8b704a0507c245639efee995d1954d', - }, - { - publicKey: - '0x992c0fc7922a60a51ddd7daa3adedbe0f0e0290127f8f601fcb9aa4bc3a367046631c3b029496662a5131045f6968a66', - signature: - '0xb93c1dc1f86285203dd4845813dc4596f60f9c1b047c3559a304a994fc9b9ba8b56461793a5cdef25d5f2fff65029d1203a6eefd58fb713810b715739688a2dd485381eed4c1db74ec10154ec9f4c9d0abc5419c75f7d24a11475108428c86ca', - depositDataRoot: - '0xa40c59dcd0fb12a0deec5d96f26472fb40b4d1ad12598db6962f5ea0df838d36', - }, - { - publicKey: - '0x8bb161b4ac08fae331a082851d2777439f95f8d68da282a78c288016f66e05025734d38f997953f86689d5a0be6e5f1f', - signature: - '0x94aa489f2fcfb520bd0b2a7ae98900250021b7a5cf8a7970165c3ba7d12fef72e1cb3044839f4b0bedf619bec8b99249100359c16820146d5ee9b7b5fb9b1ce8364f01e789da94f8b2667a648de31f05602e5d273368292a37856c6d9a81b675', - depositDataRoot: - '0xc3ed9752697d3b5da2a154c1e4ec9c2af8ef52a3b7e416c6e5a6df1242826ca3', - }, - { - publicKey: - '0xb22b95a3e2c5d950ceea9f7acaac6499c25f2244eb50c0859e03769986f77ebbf761b3d94868f1a7fc334b2d5a6afe49', - signature: - '0xa7fe9e26883dd457b91e55aae930ebe7220078b51452eeb05ff9e32c300f5005216e46a23bd9e7554926bdec342d9a0c035d3719b23c252f858a1d36e105296f28abdd5e0a3d7afdd7c994f4ceddf8e5ded86a64750ecc986390a205b2964ff7', - depositDataRoot: - '0xfcc28476f842d7a84f15297f188fce25eb1f13cc55f7c45770ea0e895e7e7891', - }, - { - publicKey: - '0xb25c9fa462da03fc6375cd57d81d8fc54f05a9512f4c553e515016abd89c379c72f183c7d688b2780cf367d41b71e160', - signature: - '0xa0fb194ea502d58a093e77ac8fc733eb9109e0d15bcaab7614d34d10b6153d95101a07a0ea560d21483da39bbb52a5a90cdab07bb1145076fcbc8b3c6aa77ed98fd184865c17316d615162c8b57497727bb0f6fb3cfae6c1644906c27212065e', - depositDataRoot: - '0x2bef74e78af9b3f53994acc29e6ccb86bed0720295a86f26723fd84d80769b8c', - }, - { - publicKey: - '0x970a4b03ea759a2e73293111e9a9bb27b6061b7f627ce0da9abd64d4dc59d6dd99ba6839fb39da8d2c4dc2171242fc43', - signature: - '0x8b63f69f2b46f335d16ab8ca4c5149ed6ec98fd576682801a63b69619465548d1267e06eae486d1c6d0075eada7ec69c012a68f530e68f4cca07575157c49d8de3fa5fb80747bf75699dd379da4863e8e300c875b03516a1c7e09b8a185a3220', - depositDataRoot: - '0xfd78caa5fec5f4a6ac7b899b367773514bbb5ddab321baec37de358cbf3f29c3', - }, - { - publicKey: - '0xb74bff094ccc7a09e42f9a3027db981a3beb649442019c3fb086efa84174e725f11e60d199cb0db00fdcae59929f687d', - signature: - '0xb0e8e7d377a8face914a7fd1a394d72c4d8ea33eac818a39c7489fb7eeb5e2e754fc752cced569de271e1329513d18900d4e5534aca795389ab4bdd978996ffb1381154e7232c6919efb1a7e6cdf29744b37cadb4935345099a0534f11c08942', - depositDataRoot: - '0xab12e4e9fd9e9c5db8aa6bfdbcfee1bbe51b1e2905df516955b989f2c4a0f631', - }, - { - publicKey: - '0x821bc505f04fed9e1084c6ce0b234239732482e11b0945ff0bd239415971c4acf40f758e45dd0ad5bc752084a391ca9e', - signature: - '0x819228438eab188d7def38f48551a07980b8bf969e97d7933fccbfaf59400cc6d61c87732659edafe9b61253155caf3b0db549b4d0f828d23d2ba642aa5aa009b26079d4b66831de11b5c1e2cb70cc340c159f5d3963b8c0991cc54ab23232d0', - depositDataRoot: - '0xb15967eb1e2cb2173422e1cee218ff48bb844b72de39fe64f0f8755e9e58cdec', - }, - { - publicKey: - '0xb0bed2fbbaf58907a4976e3db8ceb25436e6fb24ef6eb4351950fa402decd39d1b83c9cafe820d7f3751ad30202cf5dd', - signature: - '0xb730c7110892c763b603ccf0e7269ed2092d26e7a62d3ec8c1c630050505eb890ff9a8a5d00f0a5622fe4ace91e78059049201c3b552c212eeb8ab336412d79d0815b62f2a6add17c95b284b0b9b37c3a55bb96dbbb878d1e476d83f49cb62c5', - depositDataRoot: - '0x34a6c81083474e077933395b512d47bf7a376d862de1c2d41e9aac8ad25c973e', - }, - { - publicKey: - '0x8ab8f23b742af7c4af58da98ed3c2147f792952ff26236755ae1c0ffc16eea7ac0c44a867c3d19232794ae6fcf19720b', - signature: - '0x87a5645ed6931977d1d255517d1bc5b9f907eec41db6b9e50052e5dd6d7ee59c53bc27d67085fe1d98e0b605a5d4ae7f15a55eaf756ef5e5612aac59ba44e56c4d61b1f69d617e57e213ad10852156df59f64e3313afd9eed1db41131a2e85b6', - depositDataRoot: - '0xf9cb80db174fe97a6e20f53778a110ecd93105654bc12c216b5b72fd2d6c25cb', - }, -]; - -module.exports = { - validatorParams, -}; diff --git a/test/utils.js b/test/utils.js index 44b4285b..a8fc72cd 100644 --- a/test/utils.js +++ b/test/utils.js @@ -1,7 +1,21 @@ -const hre = require('hardhat'); -const { expectEvent, constants, time } = require('@openzeppelin/test-helpers'); const { expect } = require('chai'); -const { BN, ether, balance } = require('@openzeppelin/test-helpers'); +const hre = require('hardhat'); +const { hexlify, keccak256, defaultAbiCoder } = require('ethers/lib/utils'); +const { + BN, + ether, + expectEvent, + constants, + time, +} = require('@openzeppelin/test-helpers'); +const { + initializeMerkleRoot, + initializeData, +} = require('./pool/initializeMerkleRoot'); +const { + finalizeMerkleRoot, + finalizeData, +} = require('./pool/finalizeMerkleRoot'); function getDepositAmount({ min = new BN('1'), max = ether('1000') } = {}) { return ether(Math.random().toFixed(8)) @@ -10,55 +24,6 @@ function getDepositAmount({ min = new BN('1'), max = ether('1000') } = {}) { .add(min); } -async function checkSolo({ - solos, - soloId, - withdrawalCredentials = constants.ZERO_BYTES32, - amount = new BN(0), -} = {}) { - let solo = await solos.solos(soloId); - expect(solo.amount).to.bignumber.equal(amount); - expect(solo.withdrawalCredentials).equal(withdrawalCredentials); -} - -async function checkCollectorBalance( - collectorContract, - correctBalance = new BN(0) -) { - expect( - await balance.current(collectorContract.address) - ).to.be.bignumber.equal(correctBalance); -} - -async function checkSoloDepositAdded({ - receipt, - solos, - sender, - withdrawalCredentials, - addedAmount, - totalAmount, -}) { - let soloId = web3.utils.soliditySha3( - solos.address, - sender, - withdrawalCredentials - ); - - expectEvent(receipt, 'DepositAdded', { - soloId, - sender: sender, - amount: addedAmount, - withdrawalCredentials, - }); - - await checkSolo({ - solos, - soloId, - withdrawalCredentials, - amount: totalAmount, - }); -} - async function checkValidatorRegistered({ vrc, transaction, @@ -119,17 +84,6 @@ async function checkRewardEthToken({ } } -async function getOracleAccounts({ oracles }) { - let oracleAccounts = []; - let oracleRole = await oracles.ORACLE_ROLE(); - for (let i = 0; i < (await oracles.getRoleMemberCount(oracleRole)); i++) { - let oracle = await oracles.getRoleMember(oracleRole, i); - await impersonateAccount(oracle); - oracleAccounts.push(oracle); - } - return oracleAccounts; -} - async function setActivatedValidators({ admin, rewardEthToken, @@ -143,29 +97,54 @@ async function setActivatedValidators({ return; } - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo(lastUpdateBlockNumber.add(new BN(newSyncPeriod))); + await enableRewardsVoting({ rewardEthToken, oracles, admin }); let totalRewards = await rewardEthToken.totalRewards(); let nonce = await oracles.currentNonce(); - let receipt; + + let encoded = defaultAbiCoder.encode( + ['uint256', 'uint256', 'uint256'], + [nonce.toString(), totalRewards.toString(), activatedValidators.toString()] + ); + let candidateId = hexlify(keccak256(encoded)); + + // prepare signatures + let signatures = []; for (let i = 0; i < oracleAccounts.length; i++) { - receipt = await oracles.voteForRewards( - nonce, - totalRewards, - activatedValidators, - { - from: oracleAccounts[i], - } - ); - if ((await pool.activatedValidators()).eq(activatedValidators)) { - return receipt; + await impersonateAccount(oracleAccounts[i]); + let signature = await web3.eth.sign(candidateId, oracleAccounts[i]); + signatures.push(signature); + } + + // update activated validators + let receipt = await oracles.submitRewards( + totalRewards, + activatedValidators, + signatures, + { + from: oracleAccounts[0], } + ); + + expect(await pool.activatedValidators()).to.bignumber.equal( + activatedValidators + ); + + return receipt; +} + +async function enableRewardsVoting({ rewardEthToken, oracles, admin }) { + if (await oracles.isRewardsVoting()) { + return; } + let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); + let latestBlock = await time.latestBlock(); + await oracles.setSyncPeriod( + latestBlock.sub(lastUpdateBlockNumber).sub(new BN(1)), + { + from: admin, + } + ); } async function setTotalRewards({ @@ -179,30 +158,37 @@ async function setTotalRewards({ if ((await rewardEthToken.totalSupply()).eq(totalRewards)) { return; } + await enableRewardsVoting({ rewardEthToken, oracles, admin }); - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo(lastUpdateBlockNumber.add(new BN(newSyncPeriod))); - + // calculate candidate ID let activatedValidators = await pool.activatedValidators(); let nonce = await oracles.currentNonce(); - let receipt; + let encoded = defaultAbiCoder.encode( + ['uint256', 'uint256', 'uint256'], + [nonce.toString(), totalRewards.toString(), activatedValidators.toString()] + ); + let candidateId = hexlify(keccak256(encoded)); + + // prepare signatures + let signatures = []; for (let i = 0; i < oracleAccounts.length; i++) { - receipt = await oracles.voteForRewards( - nonce, - totalRewards, - activatedValidators, - { - from: oracleAccounts[i], - } - ); - if ((await rewardEthToken.totalSupply()).eq(totalRewards)) { - return receipt; - } + await impersonateAccount(oracleAccounts[i]); + let signature = await web3.eth.sign(candidateId, oracleAccounts[i]); + signatures.push(signature); } + + // update total rewards + let receipt = await oracles.submitRewards( + totalRewards, + activatedValidators, + signatures, + { + from: oracleAccounts[0], + } + ); + expect(await rewardEthToken.totalSupply()).to.bignumber.equal(totalRewards); + + return receipt; } async function setMerkleRoot({ @@ -217,15 +203,164 @@ async function setMerkleRoot({ } let nonce = await oracles.currentNonce(); - let receipt; + let encoded = defaultAbiCoder.encode( + ['uint256', 'bytes32', 'string'], + [nonce.toString(), merkleRoot, merkleProofs] + ); + let candidateId = hexlify(keccak256(encoded)); + + // prepare signatures + let signatures = []; for (let i = 0; i < oracleAccounts.length; i++) { - receipt = await oracles.voteForMerkleRoot(nonce, merkleRoot, merkleProofs, { - from: oracleAccounts[i], - }); - if ((await merkleDistributor.merkleRoot()) === merkleRoot) { - return receipt; + await impersonateAccount(oracleAccounts[i]); + let signature = await web3.eth.sign(candidateId, oracleAccounts[i]); + signatures.push(signature); + } + + // update merkle root + return oracles.submitMerkleRoot(merkleRoot, merkleProofs, signatures, { + from: oracleAccounts[0], + }); +} + +async function initializeValidator({ + operator, + merkleProof, + signature, + publicKey, + withdrawalCredentials, + depositDataRoot, + oracles, + oracleAccounts, +}) { + let nonce = await oracles.currentNonce(); + let encoded = defaultAbiCoder.encode( + ['uint256', 'bytes', 'address'], + [nonce.toString(), publicKey, operator] + ); + let candidateId = hexlify(keccak256(encoded)); + + // prepare signatures + let signatures = []; + for (let i = 0; i < oracleAccounts.length; i++) { + await impersonateAccount(oracleAccounts[i]); + let sig = await web3.eth.sign(candidateId, oracleAccounts[i]); + signatures.push(sig); + } + + // initialize validator + return oracles.initializeValidator( + { operator, withdrawalCredentials, depositDataRoot, publicKey, signature }, + merkleProof, + signatures, + { + from: oracleAccounts[0], + } + ); +} + +async function finalizeValidator({ + operator, + merkleProof, + signature, + publicKey, + withdrawalCredentials, + depositDataRoot, + oracles, + oracleAccounts, +}) { + let nonce = await oracles.currentNonce(); + let encoded = defaultAbiCoder.encode( + ['uint256', 'bytes', 'address'], + [nonce.toString(), publicKey, operator] + ); + let candidateId = hexlify(keccak256(encoded)); + + // prepare signatures + let signatures = []; + for (let i = 0; i < oracleAccounts.length; i++) { + await impersonateAccount(oracleAccounts[i]); + let sig = await web3.eth.sign(candidateId, oracleAccounts[i]); + signatures.push(sig); + } + + // finalize validator + return oracles.finalizeValidator( + { operator, withdrawalCredentials, depositDataRoot, publicKey, signature }, + merkleProof, + signatures, + { + from: oracleAccounts[0], } + ); +} + +async function registerValidator({ + admin, + validators, + operator, + oracles, + oracleAccounts, + initializeMerkleProofs = 'ipfs://QmSYduvpsJp7bo3xenRK3qDdoLkzWcvVeU3U16v1n3Cb5d', + finalizeMerkleProofs = 'ipfs://QmSTP443zR6oKnYVRE23RARyuuzwhhaidUiSXyRTsw3pDs', + initAmount = ether('1'), + depositDataIndex = 0, +}) { + if ((await validators.getOperator(operator))[2] !== constants.ZERO_BYTES32) { + await validators.addOperator( + operator, + initializeMerkleRoot, + initializeMerkleProofs, + finalizeMerkleRoot, + finalizeMerkleProofs, + { + from: admin, + } + ); + } + + if ((await validators.collaterals(operator)).lt(initAmount)) { + await validators.depositCollateral(operator, { + value: initAmount, + from: operator, + }); } + + let { + publicKey, + signature, + withdrawalCredentials, + merkleProof, + depositDataRoot, + } = initializeData[depositDataIndex]; + await initializeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }); + + ({ + publicKey, + signature, + withdrawalCredentials, + merkleProof, + depositDataRoot, + } = finalizeData[depositDataIndex]); + await finalizeValidator({ + operator, + merkleProof, + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + }); } async function impersonateAccount(account) { @@ -256,10 +391,30 @@ async function resetFork() { }); } +async function setupOracleAccounts({ admin, oracles, accounts }) { + let oracleRole = await oracles.ORACLE_ROLE(); + const totalOracles = ( + await oracles.getRoleMemberCount(oracleRole) + ).toNumber(); + + // remove oracles + for (let i = 0; i < totalOracles; i++) { + let oldOracle = await oracles.getRoleMember(oracleRole, 0); + await oracles.removeOracle(oldOracle, { from: admin }); + } + + // add oracles + let oracleAccounts = []; + for (let i = 0; i < totalOracles; i++) { + let newOracle = accounts[i]; + await oracles.addOracle(newOracle, { from: admin }); + oracleAccounts.push(newOracle); + } + + return oracleAccounts; +} + module.exports = { - checkCollectorBalance, - checkSolo, - checkSoloDepositAdded, checkValidatorRegistered, getDepositAmount, checkStakedEthToken, @@ -270,5 +425,9 @@ module.exports = { setActivatedValidators, setTotalRewards, setMerkleRoot, - getOracleAccounts, + setupOracleAccounts, + enableRewardsVoting, + initializeValidator, + finalizeValidator, + registerValidator, }; From de713a17cf902a8453df1a66439cafe2ed20f5b1 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Mon, 16 Aug 2021 18:29:46 +0300 Subject: [PATCH 07/55] Add sender to vote submit event --- abi/Oracles.json | 24 ++++++++++++++++++++++++ contracts/Oracles.sol | 8 ++++---- contracts/interfaces/IOracles.sol | 8 ++++++++ contracts/interfaces/IPool.sol | 4 ++-- contracts/pool/Pool.sol | 12 +++++------- contracts/tokens/RewardEthToken.sol | 2 +- 6 files changed, 44 insertions(+), 14 deletions(-) diff --git a/abi/Oracles.json b/abi/Oracles.json index b94459e3..6b02901f 100644 --- a/abi/Oracles.json +++ b/abi/Oracles.json @@ -2,6 +2,12 @@ { "anonymous": false, "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, { "indexed": true, "internalType": "address", @@ -33,6 +39,12 @@ { "anonymous": false, "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, { "indexed": true, "internalType": "address", @@ -64,6 +76,12 @@ { "anonymous": false, "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, { "indexed": true, "internalType": "address", @@ -108,6 +126,12 @@ { "anonymous": false, "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, { "indexed": true, "internalType": "address", diff --git a/contracts/Oracles.sol b/contracts/Oracles.sol index c9af6a30..a99fc6f6 100644 --- a/contracts/Oracles.sol +++ b/contracts/Oracles.sol @@ -172,7 +172,7 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { require(signedOracles[j] != signer, "Oracles: repeated signature"); } signedOracles[i] = signer; - emit RewardsVoteSubmitted(signer, _nonce, totalRewards, activatedValidators); + emit RewardsVoteSubmitted(msg.sender, signer, _nonce, totalRewards, activatedValidators); } // increment nonce for future signatures @@ -220,7 +220,7 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { require(signedOracles[j] != signer, "Oracles: repeated signature"); } signedOracles[i] = signer; - emit MerkleRootVoteSubmitted(signer, _nonce, merkleRoot, merkleProofs); + emit MerkleRootVoteSubmitted(msg.sender, signer, _nonce, merkleRoot, merkleProofs); } // increment nonce for future signatures @@ -262,7 +262,7 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { require(signedOracles[j] != signer, "Oracles: repeated signature"); } signedOracles[i] = signer; - emit InitializeValidatorVoteSubmitted(signer, depositData.operator, depositData.publicKey, _nonce); + emit InitializeValidatorVoteSubmitted(msg.sender, signer, depositData.operator, depositData.publicKey, _nonce); } // increment nonce for future signatures @@ -304,7 +304,7 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { require(signedOracles[j] != signer, "Oracles: repeated signature"); } signedOracles[i] = signer; - emit FinalizeValidatorVoteSubmitted(signer, depositData.operator, depositData.publicKey, _nonce); + emit FinalizeValidatorVoteSubmitted(msg.sender, signer, depositData.operator, depositData.publicKey, _nonce); } // increment nonce for future signatures diff --git a/contracts/interfaces/IOracles.sol b/contracts/interfaces/IOracles.sol index f63d43f9..a3f86b2d 100644 --- a/contracts/interfaces/IOracles.sol +++ b/contracts/interfaces/IOracles.sol @@ -11,12 +11,14 @@ pragma abicoder v2; interface IOracles { /** * @dev Event for tracking oracle rewards votes. + * @param sender - address of the transaction sender. * @param oracle - address of the account which submitted vote. * @param nonce - current nonce. * @param totalRewards - submitted value of total rewards. * @param activatedValidators - submitted amount of activated validators. */ event RewardsVoteSubmitted( + address indexed sender, address indexed oracle, uint256 nonce, uint256 totalRewards, @@ -25,12 +27,14 @@ interface IOracles { /** * @dev Event for tracking oracle merkle root votes. + * @param sender - address of the transaction sender. * @param oracle - address of the account which submitted vote. * @param nonce - current nonce. * @param merkleRoot - new merkle root. * @param merkleProofs - link to the merkle proofs. */ event MerkleRootVoteSubmitted( + address indexed sender, address indexed oracle, uint256 nonce, bytes32 indexed merkleRoot, @@ -46,12 +50,14 @@ interface IOracles { /** * @dev Event for tracking validator initialization votes. + * @param sender - address of the transaction sender. * @param signer - address of the signed oracle. * @param operator - address of the operator the vote was sent for. * @param publicKey - public key of the validator the vote was sent for. * @param nonce - validator initialization nonce. */ event InitializeValidatorVoteSubmitted( + address indexed sender, address indexed signer, address indexed operator, bytes publicKey, @@ -60,12 +66,14 @@ interface IOracles { /** * @dev Event for tracking validator finalization votes. + * @param sender - address of the transaction sender. * @param signer - address of the signed oracle. * @param operator - address of the operator the vote was sent for. * @param publicKey - public key of the validator the vote was sent for. * @param nonce - validator finalization nonce. */ event FinalizeValidatorVoteSubmitted( + address indexed sender, address indexed signer, address indexed operator, bytes publicKey, diff --git a/contracts/interfaces/IPool.sol b/contracts/interfaces/IPool.sol index 886756db..817abab8 100644 --- a/contracts/interfaces/IPool.sol +++ b/contracts/interfaces/IPool.sol @@ -95,7 +95,7 @@ interface IPool { function VALIDATOR_INIT_DEPOSIT() external view returns (uint256); /** - * @dev Function for getting the total amount of pending validators. + * @dev Function for retrieving the total amount of pending validators. */ function pendingValidators() external view returns (uint256); @@ -105,7 +105,7 @@ interface IPool { function activatedValidators() external view returns (uint256); /** - * @dev Function for getting the withdrawal credentials used to + * @dev Function for retrieving the withdrawal credentials used to * initiate pool validators withdrawal from the beacon chain. */ function withdrawalCredentials() external view returns (bytes32); diff --git a/contracts/pool/Pool.sol b/contracts/pool/Pool.sol index 2d350357..e15e9b43 100644 --- a/contracts/pool/Pool.sol +++ b/contracts/pool/Pool.sol @@ -4,7 +4,6 @@ pragma solidity 0.7.5; pragma abicoder v2; import "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/token/ERC20/SafeERC20Upgradeable.sol"; import "../presets/OwnablePausableUpgradeable.sol"; import "../interfaces/IStakedEthToken.sol"; import "../interfaces/IDepositContract.sol"; @@ -20,12 +19,11 @@ import "../interfaces/IPoolValidators.sol"; */ contract Pool is IPool, OwnablePausableUpgradeable { using SafeMathUpgradeable for uint256; - using SafeERC20Upgradeable for IERC20Upgradeable; // @dev Validator deposit amount. uint256 public constant override VALIDATOR_TOTAL_DEPOSIT = 32 ether; - // @dev Validator initialization deposit amount. + // @dev Validator initialization amount. uint256 public constant override VALIDATOR_INIT_DEPOSIT = 1 ether; // @dev Total activated validators. @@ -66,8 +64,8 @@ contract Pool is IPool, OwnablePausableUpgradeable { /** * @dev See {IPool-upgrade}. - * The `initialize` must be called before upgrading in previous implementation contract: - * https://github.com/stakewise/contracts/blob/v1.3.0/contracts/collectors/Pool.sol#L55 + * The `initialize` function must be defined if deploying contract + * for the first time that will initialize the state variables above. */ function upgrade( address _poolValidators, @@ -130,7 +128,7 @@ contract Pool is IPool, OwnablePausableUpgradeable { } /** - * @dev Function for staking ETH. + * @dev Function for staking ETH using transfer. */ receive() external payable { _stake(msg.sender, msg.value); @@ -148,7 +146,7 @@ contract Pool is IPool, OwnablePausableUpgradeable { } /** - * @dev See {IPool-stakeWithPartner}. + * @dev See {IPool-stakeWithPartnerOnBehalf}. */ function stakeWithPartnerOnBehalf(address partner, address recipient) external payable override { // stake amount diff --git a/contracts/tokens/RewardEthToken.sol b/contracts/tokens/RewardEthToken.sol index 8d5d4875..04de86bf 100644 --- a/contracts/tokens/RewardEthToken.sol +++ b/contracts/tokens/RewardEthToken.sol @@ -62,7 +62,7 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per * @dev See {IRewardEthToken-upgrade}. */ function upgrade(address _oracles, address _operatorsRevenueSharing, address _partnersRevenueSharing) external override onlyAdmin whenPaused { - require(address(oracles) == 0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514, "RewardEthToken: already upgraded"); + require(address(operatorsRevenueSharing) == address(0), "RewardEthToken: already upgraded"); oracles = _oracles; operatorsRevenueSharing = IRevenueSharing(_operatorsRevenueSharing); partnersRevenueSharing = IRevenueSharing(_partnersRevenueSharing); From a990805db7f032bda97f30fa33263b82c4d013b1 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Mon, 16 Aug 2021 19:36:19 +0300 Subject: [PATCH 08/55] Fix solhint warning --- contracts/interfaces/IPool.sol | 2 ++ 1 file changed, 2 insertions(+) diff --git a/contracts/interfaces/IPool.sol b/contracts/interfaces/IPool.sol index 817abab8..5233b666 100644 --- a/contracts/interfaces/IPool.sol +++ b/contracts/interfaces/IPool.sol @@ -87,11 +87,13 @@ interface IPool { /** * @dev Function for getting the total validator deposit. */ + // solhint-disable-next-line func-name-mixedcase function VALIDATOR_TOTAL_DEPOSIT() external view returns (uint256); /** * @dev Function for getting the initial validator deposit. */ + // solhint-disable-next-line func-name-mixedcase function VALIDATOR_INIT_DEPOSIT() external view returns (uint256); /** From 5c79b4942d718747825fb9ae440ef25f0071ec3d Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 24 Aug 2021 16:46:33 +0300 Subject: [PATCH 09/55] Remove syncPeriod, split nonces in Oracles --- abi/Oracles.json | 142 ++++++++++++++++-------------- contracts/Oracles.sol | 112 +++++++++++------------ contracts/interfaces/IOracles.sol | 67 +++++++------- deployments/index.js | 3 +- deployments/settings.js | 28 +++++- test/oracles/Oracles.test.js | 109 +++++++++-------------- test/oracles/upgrading.test.js | 9 +- test/utils.js | 33 ++----- 8 files changed, 244 insertions(+), 259 deletions(-) diff --git a/abi/Oracles.json b/abi/Oracles.json index 6b02901f..59a2570d 100644 --- a/abi/Oracles.json +++ b/abi/Oracles.json @@ -110,6 +110,44 @@ "name": "MerkleRootVoteSubmitted", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oracle", + "type": "address" + }, + { + "indexed": false, + "internalType": "string", + "name": "rewardVotesSource", + "type": "string" + }, + { + "indexed": false, + "internalType": "string", + "name": "validatorVotesSource", + "type": "string" + } + ], + "name": "OracleAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "oracle", + "type": "address" + } + ], + "name": "OracleRemoved", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -235,25 +273,6 @@ "name": "RoleRevoked", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "syncPeriod", - "type": "uint256" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "SyncPeriodUpdated", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -323,8 +342,18 @@ "inputs": [ { "internalType": "address", - "name": "_account", + "name": "account", "type": "address" + }, + { + "internalType": "string", + "name": "rewardVotesSource", + "type": "string" + }, + { + "internalType": "string", + "name": "validatorVotesSource", + "type": "string" } ], "name": "addOracle", @@ -347,7 +376,20 @@ }, { "inputs": [], - "name": "currentNonce", + "name": "currentRewardsNonce", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "currentValidatorsNonce", "outputs": [ { "internalType": "uint256", @@ -516,12 +558,12 @@ "inputs": [ { "internalType": "address", - "name": "_admin", + "name": "admin", "type": "address" }, { "internalType": "address", - "name": "_prevOracles", + "name": "prevOracles", "type": "address" }, { @@ -545,9 +587,14 @@ "type": "address" }, { - "internalType": "uint256", - "name": "_syncPeriod", - "type": "uint256" + "internalType": "string[]", + "name": "rewardVotesSources", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "validatorVotesSources", + "type": "string[]" } ], "name": "initialize", @@ -641,7 +688,7 @@ "inputs": [ { "internalType": "address", - "name": "_account", + "name": "account", "type": "address" } ], @@ -675,19 +722,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "isRewardsVoting", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "pause", @@ -725,7 +759,7 @@ "inputs": [ { "internalType": "address", - "name": "_account", + "name": "account", "type": "address" } ], @@ -783,19 +817,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_syncPeriod", - "type": "uint256" - } - ], - "name": "setSyncPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -842,19 +863,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [], - "name": "syncPeriod", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "unpause", diff --git a/contracts/Oracles.sol b/contracts/Oracles.sol index a99fc6f6..1f01035a 100644 --- a/contracts/Oracles.sol +++ b/contracts/Oracles.sol @@ -26,6 +26,13 @@ interface IAccessControlUpgradeable { function getRoleMember(bytes32 role, uint256 index) external view returns (address); } +interface IPrevOracles { + /** + * @dev Function for retrieving current rewards nonce. + */ + function currentNonce() external view returns (uint256); +} + /** * @title Oracles * @@ -38,8 +45,11 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { bytes32 public constant ORACLE_ROLE = keccak256("ORACLE_ROLE"); - // @dev Nonce is used to protect from submitting the same vote several times. - CountersUpgradeable.Counter private nonce; + // @dev Rewards nonce is used to protect from submitting the same rewards vote several times. + CountersUpgradeable.Counter private rewardsNonce; + + // @dev Validators nonce is used to protect from submitting the same validator vote several times. + CountersUpgradeable.Counter private validatorsNonce; // @dev Address of the RewardEthToken contract. IRewardEthToken private rewardEthToken; @@ -53,82 +63,77 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { // @dev Address of the MerkleDistributor contract. IMerkleDistributor private merkleDistributor; - // @dev Defines how often oracles submit data (in blocks). - uint256 public override syncPeriod; - /** * @dev See {IOracles-initialize}. */ function initialize( - address _admin, - address _prevOracles, + address admin, + address prevOracles, address _rewardEthToken, address _pool, address _poolValidators, address _merkleDistributor, - uint256 _syncPeriod + string[] memory rewardVotesSources, + string[] memory validatorVotesSources ) external override initializer { - __OwnablePausableUpgradeable_init(_admin); + __OwnablePausableUpgradeable_init(admin); // migrate data from previous Oracles contract - nonce._value = IOracles(_prevOracles).currentNonce(); - uint256 oraclesCount = IAccessControlUpgradeable(_prevOracles).getRoleMemberCount(ORACLE_ROLE); + rewardsNonce._value = IPrevOracles(prevOracles).currentNonce(); + uint256 oraclesCount = IAccessControlUpgradeable(prevOracles).getRoleMemberCount(ORACLE_ROLE); + require( + oraclesCount == rewardVotesSources.length && oraclesCount == validatorVotesSources.length, + "Oracles: invalid length of votes sources" + ); for(uint256 i = 0; i < oraclesCount; i++) { - address oracle = IAccessControlUpgradeable(_prevOracles).getRoleMember(ORACLE_ROLE, i); + address oracle = IAccessControlUpgradeable(prevOracles).getRoleMember(ORACLE_ROLE, i); _setupRole(ORACLE_ROLE, oracle); + emit OracleAdded(oracle, rewardVotesSources[i], validatorVotesSources[i]); } rewardEthToken = IRewardEthToken(_rewardEthToken); pool = IPool(_pool); poolValidators = IPoolValidators(_poolValidators); merkleDistributor = IMerkleDistributor(_merkleDistributor); - syncPeriod = _syncPeriod; } /** - * @dev See {IOracles-currentNonce}. + * @dev See {IOracles-currentRewardsNonce}. */ - function currentNonce() external override view returns (uint256) { - return nonce.current(); + function currentRewardsNonce() external override view returns (uint256) { + return rewardsNonce.current(); } /** - * @dev See {IOracles-isOracle}. + * @dev See {IOracles-currentValidatorsNonce}. */ - function isOracle(address _account) external override view returns (bool) { - return hasRole(ORACLE_ROLE, _account); + function currentValidatorsNonce() external override view returns (uint256) { + return validatorsNonce.current(); } /** - * @dev See {IOracles-addOracle}. - */ - function addOracle(address _account) external override { - grantRole(ORACLE_ROLE, _account); - } - - /** - * @dev See {IOracles-removeOracle}. + * @dev See {IOracles-isOracle}. */ - function removeOracle(address _account) external override { - revokeRole(ORACLE_ROLE, _account); + function isOracle(address account) external override view returns (bool) { + return hasRole(ORACLE_ROLE, account); } /** - * @dev See {IOracles-setSyncPeriod}. + * @dev See {IOracles-addOracle}. */ - function setSyncPeriod(uint256 _syncPeriod) external override onlyAdmin { - require(!isRewardsVoting(), "Oracles: cannot update during voting"); - syncPeriod = _syncPeriod; - emit SyncPeriodUpdated(_syncPeriod, msg.sender); + function addOracle(address account, string memory rewardVotesSource, string memory validatorVotesSource) external override { + grantRole(ORACLE_ROLE, account); + emit OracleAdded(account, rewardVotesSource, validatorVotesSource); } /** - * @dev See {IOracles-isRewardsVoting}. + * @dev See {IOracles-removeOracle}. */ - function isRewardsVoting() public override view returns (bool) { - return rewardEthToken.lastUpdateBlockNumber().add(syncPeriod) < block.number; + function removeOracle(address account) external override { + revokeRole(ORACLE_ROLE, account); + emit OracleRemoved(account); } /** @@ -149,16 +154,15 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { ) external override whenNotPaused { - require(isRewardsVoting(), "Oracles: too early"); require( signatures.length.mul(3) > getRoleMemberCount(ORACLE_ROLE).mul(2), "Oracles: invalid number of signatures" ); // calculate candidate ID hash - uint256 _nonce = nonce.current(); + uint256 nonce = rewardsNonce.current(); bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( - keccak256(abi.encode(_nonce, totalRewards, activatedValidators)) + keccak256(abi.encode(nonce, totalRewards, activatedValidators)) ); // check signatures and calculate number of submitted oracle votes @@ -172,11 +176,11 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { require(signedOracles[j] != signer, "Oracles: repeated signature"); } signedOracles[i] = signer; - emit RewardsVoteSubmitted(msg.sender, signer, _nonce, totalRewards, activatedValidators); + emit RewardsVoteSubmitted(msg.sender, signer, nonce, totalRewards, activatedValidators); } // increment nonce for future signatures - nonce.increment(); + rewardsNonce.increment(); // update total rewards rewardEthToken.updateTotalRewards(totalRewards); @@ -204,9 +208,9 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { ); // calculate candidate ID hash - uint256 _nonce = nonce.current(); + uint256 nonce = rewardsNonce.current(); bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( - keccak256(abi.encode(_nonce, merkleRoot, merkleProofs)) + keccak256(abi.encode(nonce, merkleRoot, merkleProofs)) ); // check signatures and calculate number of submitted oracle votes @@ -220,11 +224,11 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { require(signedOracles[j] != signer, "Oracles: repeated signature"); } signedOracles[i] = signer; - emit MerkleRootVoteSubmitted(msg.sender, signer, _nonce, merkleRoot, merkleProofs); + emit MerkleRootVoteSubmitted(msg.sender, signer, nonce, merkleRoot, merkleProofs); } // increment nonce for future signatures - nonce.increment(); + rewardsNonce.increment(); // update merkle root merkleDistributor.setMerkleRoot(merkleRoot, merkleProofs); @@ -246,9 +250,9 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { ); // calculate candidate ID hash - uint256 _nonce = nonce.current(); + uint256 nonce = validatorsNonce.current(); bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( - keccak256(abi.encode(_nonce, depositData.publicKey, depositData.operator)) + keccak256(abi.encode(nonce, depositData.publicKey, depositData.operator)) ); // check signatures and calculate number of submitted oracle votes @@ -262,11 +266,11 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { require(signedOracles[j] != signer, "Oracles: repeated signature"); } signedOracles[i] = signer; - emit InitializeValidatorVoteSubmitted(msg.sender, signer, depositData.operator, depositData.publicKey, _nonce); + emit InitializeValidatorVoteSubmitted(msg.sender, signer, depositData.operator, depositData.publicKey, nonce); } // increment nonce for future signatures - nonce.increment(); + validatorsNonce.increment(); // initialize validator poolValidators.initializeValidator(depositData, merkleProof); @@ -288,9 +292,9 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { ); // calculate candidate ID hash - uint256 _nonce = nonce.current(); + uint256 nonce = validatorsNonce.current(); bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( - keccak256(abi.encode(_nonce, depositData.publicKey, depositData.operator)) + keccak256(abi.encode(nonce, depositData.publicKey, depositData.operator)) ); // check signatures and calculate number of submitted oracle votes @@ -304,11 +308,11 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { require(signedOracles[j] != signer, "Oracles: repeated signature"); } signedOracles[i] = signer; - emit FinalizeValidatorVoteSubmitted(msg.sender, signer, depositData.operator, depositData.publicKey, _nonce); + emit FinalizeValidatorVoteSubmitted(msg.sender, signer, depositData.operator, depositData.publicKey, nonce); } // increment nonce for future signatures - nonce.increment(); + validatorsNonce.increment(); // finalize validator poolValidators.finalizeValidator(depositData, merkleProof); diff --git a/contracts/interfaces/IOracles.sol b/contracts/interfaces/IOracles.sol index a3f86b2d..8a5f822d 100644 --- a/contracts/interfaces/IOracles.sol +++ b/contracts/interfaces/IOracles.sol @@ -41,13 +41,6 @@ interface IOracles { string merkleProofs ); - /** - * @dev Event for tracking changes of oracles' sync periods. - * @param syncPeriod - new sync period in blocks. - * @param sender - address of the transaction sender. - */ - event SyncPeriodUpdated(uint256 syncPeriod, address indexed sender); - /** * @dev Event for tracking validator initialization votes. * @param sender - address of the transaction sender. @@ -81,40 +74,46 @@ interface IOracles { ); /** - * @dev Function for retrieving oracles sync period (in blocks). + * @dev Event for tracking new or updates oracles. + * @param oracle - address of new or updated oracle. + * @param rewardVotesSource - the new or updated source from where the votes for the rewards can be fetched. + * @param validatorVotesSource - the new or updated source from where the votes for the validators can be fetched. */ - function syncPeriod() external view returns (uint256); + event OracleAdded(address indexed oracle, string rewardVotesSource, string validatorVotesSource); + + /** + * @dev Event for tracking removed oracles. + * @param oracle - address of removed oracle. + */ + event OracleRemoved(address indexed oracle); /** * @dev Constructor for initializing the Oracles contract. - * @param _admin - address of the contract admin. - * @param _prevOracles - address of the previous Oracles contract. + * @param admin - address of the contract admin. + * @param prevOracles - address of the previous Oracles contract. * @param _rewardEthToken - address of the RewardEthToken contract. * @param _pool - address of the Pool contract. * @param _poolValidators - address of the PoolValidators contract. * @param _merkleDistributor - address of the MerkleDistributor contract. - * @param _syncPeriod - oracles sync period (in blocks). + * @param rewardVotesSources - array of reward votes sources that correspond to the oracle addresses. + * @param validatorVotesSources - array of validator votes sources that correspond to the oracle addresses. */ function initialize( - address _admin, - address _prevOracles, + address admin, + address prevOracles, address _rewardEthToken, address _pool, address _poolValidators, address _merkleDistributor, - uint256 _syncPeriod + string[] memory rewardVotesSources, + string[] memory validatorVotesSources ) external; /** * @dev Function for checking whether an account has an oracle role. - * @param _account - account to check. + * @param account - account to check. */ - function isOracle(address _account) external view returns (bool); - - /** - * @dev Function for checking whether the oracles are currently voting for new total rewards. - */ - function isRewardsVoting() external view returns (bool); + function isOracle(address account) external view returns (bool); /** * @dev Function for checking whether the oracles are currently voting for new merkle root. @@ -122,30 +121,30 @@ interface IOracles { function isMerkleRootVoting() external view returns (bool); /** - * @dev Function for retrieving current nonce. + * @dev Function for retrieving current rewards nonce. */ - function currentNonce() external view returns (uint256); + function currentRewardsNonce() external view returns (uint256); /** - * @dev Function for adding an oracle role to the account. - * Can only be called by an account with an admin role. - * @param _account - account to assign an oracle role to. + * @dev Function for retrieving current validators nonce. */ - function addOracle(address _account) external; + function currentValidatorsNonce() external view returns (uint256); /** - * @dev Function for removing an oracle role from the account. + * @dev Function for adding an oracle role to the account. * Can only be called by an account with an admin role. - * @param _account - account to remove an oracle role from. + * @param account - account to assign an oracle role to. + * @param rewardVotesSource - source where the votes for new reward will be published by oracle. + * @param validatorVotesSource - source where the votes for new validator will be published by oracle. */ - function removeOracle(address _account) external; + function addOracle(address account, string memory rewardVotesSource, string memory validatorVotesSource) external; /** - * @dev Function for updating oracles sync period. The number of blocks after they will submit the off-chain data. + * @dev Function for removing an oracle role from the account. * Can only be called by an account with an admin role. - * @param _syncPeriod - new sync period. + * @param account - account to remove an oracle role from. */ - function setSyncPeriod(uint256 _syncPeriod) external; + function removeOracle(address account) external; /** * @dev Function for submitting oracle vote for total rewards. diff --git a/deployments/index.js b/deployments/index.js index 6753bedf..6b229af0 100644 --- a/deployments/index.js +++ b/deployments/index.js @@ -44,7 +44,8 @@ async function deployAndInitializeOracles(poolValidatorsContractAddress) { contracts.pool, poolValidatorsContractAddress, contracts.merkleDistributor, - contractSettings.syncPeriod, + contractSettings.rewardVotesSources, + contractSettings.validatorVotesSources, ], { kind: 'transparent', diff --git a/deployments/settings.js b/deployments/settings.js index 6cf180fb..194762c3 100644 --- a/deployments/settings.js +++ b/deployments/settings.js @@ -18,7 +18,6 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { contractSettings = { cancelLockDuration: '86400', // 1 day - syncPeriod: '6646', // 1 day in blocks validatorPrice: '10000000000000000000', // 10 DAI / month protocolFee: '1000', // 10%, admin: '0x1867c96601bc5fE24F685d112314B8F3Fe228D5A', @@ -29,6 +28,19 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { '0x003e294ffc37978496f1b9298d5984ad4d55d4e2d1e6a06ee6904810c7b9e0d5', minActivatingDeposit: '5000000000000000000', // 5 ETH pendingValidatorsLimit: '500', // 5 % + // TODO: update with real sources for oracles + rewardVotesSources: [ + 'example1.com', + 'example2.com', + 'example3.com', + 'example4.com', + ], + validatorVotesSources: [ + 'example5.com', + 'example6.com', + 'example7.com', + 'example8.com', + ], }; } else { contracts = { @@ -47,7 +59,6 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { contractSettings = { cancelLockDuration: '86400', // 1 day - syncPeriod: '6646', // 1 day in blocks validatorPrice: '10000000000000000000', // 10 DAI / month protocolFee: '1000', // 10 %, admin: '0x144a98cb1CdBb23610501fE6108858D9B7D24934', @@ -58,6 +69,19 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', minActivatingDeposit: '32000000000000000000', // 32 ETH pendingValidatorsLimit: '500', // 5 % + // TODO: update with real sources for oracles + rewardVotesSources: [ + 'example1.com', + 'example2.com', + 'example3.com', + 'example4.com', + ], + validatorVotesSources: [ + 'example5.com', + 'example6.com', + 'example7.com', + 'example8.com', + ], }; } diff --git a/test/oracles/Oracles.test.js b/test/oracles/Oracles.test.js index 77c7950a..9062c106 100644 --- a/test/oracles/Oracles.test.js +++ b/test/oracles/Oracles.test.js @@ -13,7 +13,6 @@ const { resetFork, setupOracleAccounts, setTotalRewards, - enableRewardsVoting, } = require('../utils'); const { contractSettings, contracts } = require('../../deployments/settings'); const { upgradeContracts } = require('../../deployments'); @@ -28,6 +27,8 @@ contract('Oracles', ([_, anyone, ...accounts]) => { let admin = contractSettings.admin; let oracles, rewardEthToken, pool, merkleDistributor; let [oracle, anotherOracle] = accounts; + let rewardVotesSource = 'example10.com'; + let validatorVotesSource = 'example10.com'; after(async () => stopImpersonatingAccount(admin)); @@ -47,14 +48,24 @@ contract('Oracles', ([_, anyone, ...accounts]) => { describe('assigning', () => { it('admin can assign oracle role to another account', async () => { - const receipt = await oracles.addOracle(oracle, { - from: admin, - }); + const receipt = await oracles.addOracle( + oracle, + rewardVotesSource, + validatorVotesSource, + { + from: admin, + } + ); expectEvent(receipt, 'RoleGranted', { role: await oracles.ORACLE_ROLE(), account: oracle, sender: admin, }); + expectEvent(receipt, 'OracleAdded', { + oracle, + rewardVotesSource, + validatorVotesSource, + }); expect(await oracles.isOracle(oracle)).equal(true); expect(await oracles.isOracle(admin)).equal(false); expect(await oracles.isOracle(anyone)).equal(false); @@ -62,7 +73,9 @@ contract('Oracles', ([_, anyone, ...accounts]) => { it('others cannot assign oracle role to an account', async () => { await expectRevert( - oracles.addOracle(oracle, { from: anyone }), + oracles.addOracle(oracle, rewardVotesSource, validatorVotesSource, { + from: anyone, + }), 'AccessControl: sender must be an admin to grant' ); expect(await oracles.isOracle(oracle)).equal(false); @@ -70,9 +83,16 @@ contract('Oracles', ([_, anyone, ...accounts]) => { }); it('oracles cannot assign oracle role to others', async () => { - await oracles.addOracle(oracle, { from: admin }); + await oracles.addOracle(oracle, rewardVotesSource, validatorVotesSource, { + from: admin, + }); await expectRevert( - oracles.addOracle(anotherOracle, { from: oracle }), + oracles.addOracle( + anotherOracle, + rewardVotesSource, + validatorVotesSource, + { from: oracle } + ), 'AccessControl: sender must be an admin to grant' ); expect(await oracles.isOracle(oracle)).equal(true); @@ -82,8 +102,15 @@ contract('Oracles', ([_, anyone, ...accounts]) => { describe('removing', () => { beforeEach(async () => { - await oracles.addOracle(oracle, { from: admin }); - await oracles.addOracle(anotherOracle, { from: admin }); + await oracles.addOracle(oracle, rewardVotesSource, validatorVotesSource, { + from: admin, + }); + await oracles.addOracle( + anotherOracle, + rewardVotesSource, + validatorVotesSource, + { from: admin } + ); }); it('anyone cannot remove oracles', async () => { @@ -118,43 +145,6 @@ contract('Oracles', ([_, anyone, ...accounts]) => { }); }); - describe('oracles sync period', () => { - it('admin user can update sync period', async () => { - let newSyncPeriod = new BN('700'); - const receipt = await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - expectEvent(receipt, 'SyncPeriodUpdated', { - syncPeriod: newSyncPeriod, - sender: admin, - }); - expect(await oracles.syncPeriod()).bignumber.equal(newSyncPeriod); - }); - - it('anyone cannot update oracles sync period', async () => { - let newSyncPeriod = new BN('700'); - await expectRevert( - oracles.setSyncPeriod(newSyncPeriod, { - from: anyone, - }), - 'OwnablePausable: access denied' - ); - expect(await oracles.syncPeriod()).bignumber.equal( - new BN(contractSettings.syncPeriod) - ); - }); - - it('cannot update oracles sync period when voting for rewards', async () => { - await enableRewardsVoting({ rewardEthToken, admin, oracles }); - await expectRevert( - oracles.setSyncPeriod(new BN('900'), { - from: admin, - }), - 'Oracles: cannot update during voting' - ); - }); - }); - describe('rewards voting', () => { let prevTotalRewards, newTotalRewards, @@ -168,7 +158,7 @@ contract('Oracles', ([_, anyone, ...accounts]) => { oracleAccounts = await setupOracleAccounts({ oracles, accounts, admin }); prevTotalRewards = await rewardEthToken.totalRewards(); newTotalRewards = prevTotalRewards.add(ether('10')); - currentNonce = await oracles.currentNonce(); + currentNonce = await oracles.currentRewardsNonce(); newActivatedValidators = (await pool.activatedValidators()).add( await pool.pendingValidators() ); @@ -206,22 +196,7 @@ contract('Oracles', ([_, anyone, ...accounts]) => { ); }); - it('fails to submit too early', async () => { - await expectRevert( - oracles.submitRewards( - newTotalRewards, - newActivatedValidators, - signatures, - { - from: oracleAccounts[0], - } - ), - 'Oracles: too early' - ); - }); - it('fails to submit with not enough signatures', async () => { - await enableRewardsVoting({ rewardEthToken, admin, oracles }); await expectRevert( oracles.submitRewards( newTotalRewards, @@ -236,7 +211,6 @@ contract('Oracles', ([_, anyone, ...accounts]) => { }); it('fails to submit with invalid signature', async () => { - await enableRewardsVoting({ rewardEthToken, admin, oracles }); signatures[0] = await web3.eth.sign(candidateId, anyone); await expectRevert( oracles.submitRewards( @@ -252,7 +226,6 @@ contract('Oracles', ([_, anyone, ...accounts]) => { }); it('fails to submit with repeated signature', async () => { - await enableRewardsVoting({ rewardEthToken, admin, oracles }); signatures.push(signatures[0]); await expectRevert( oracles.submitRewards( @@ -268,7 +241,6 @@ contract('Oracles', ([_, anyone, ...accounts]) => { }); it('submits data with enough signatures', async () => { - await enableRewardsVoting({ rewardEthToken, admin, oracles }); let receipt = await oracles.submitRewards( newTotalRewards, newActivatedValidators, @@ -315,7 +287,6 @@ contract('Oracles', ([_, anyone, ...accounts]) => { let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); oracleAccounts = await setupOracleAccounts({ oracles, accounts, admin }); await setTotalRewards({ - admin, rewardEthToken, oracles, oracleAccounts, @@ -323,7 +294,7 @@ contract('Oracles', ([_, anyone, ...accounts]) => { totalRewards, }); - currentNonce = await oracles.currentNonce(); + currentNonce = await oracles.currentRewardsNonce(); let encoded = defaultAbiCoder.encode( ['uint256', 'bytes32', 'string'], @@ -444,7 +415,7 @@ contract('Oracles', ([_, anyone, ...accounts]) => { let activatedValidators = await pool.activatedValidators(); // create rewards signatures - let currentNonce = await oracles.currentNonce(); + let currentNonce = await oracles.currentRewardsNonce(); let encoded = defaultAbiCoder.encode( ['uint256', 'uint256', 'uint256'], [ @@ -460,7 +431,7 @@ contract('Oracles', ([_, anyone, ...accounts]) => { ]; // create merkle root signatures - currentNonce = await oracles.currentNonce(); + currentNonce = await oracles.currentRewardsNonce(); encoded = defaultAbiCoder.encode( ['uint256', 'bytes32', 'string'], [currentNonce.toString(), merkleRoot, merkleProofs] diff --git a/test/oracles/upgrading.test.js b/test/oracles/upgrading.test.js index d0744de8..37be642c 100644 --- a/test/oracles/upgrading.test.js +++ b/test/oracles/upgrading.test.js @@ -8,6 +8,7 @@ const { } = require('../utils'); const Oracles = artifacts.require('Oracles'); +const PrevOracles = artifacts.require('IPrevOracles'); contract('Oracles (upgrading)', ([anyone]) => { let admin = contractSettings.admin; @@ -25,16 +26,14 @@ contract('Oracles (upgrading)', ([anyone]) => { afterEach(async () => resetFork()); it('initializes with values from previous contract', async () => { - let prevOracles = await Oracles.at(contracts.oracles); + let prevOracles = await PrevOracles.at(contracts.oracles); expect(await prevOracles.currentNonce()).to.bignumber.equal( - await oracles.currentNonce() + await oracles.currentRewardsNonce() ); + prevOracles = await Oracles.at(contracts.oracles); let oraclesRole = await oracles.ORACLE_ROLE(); let totalOracles = await oracles.getRoleMemberCount(oraclesRole); - expect(await oracles.syncPeriod()).to.bignumber.equal( - contractSettings.syncPeriod - ); expect(totalOracles).to.bignumber.equal( await prevOracles.getRoleMemberCount(oraclesRole) ); diff --git a/test/utils.js b/test/utils.js index a8fc72cd..29f54c00 100644 --- a/test/utils.js +++ b/test/utils.js @@ -85,7 +85,6 @@ async function checkRewardEthToken({ } async function setActivatedValidators({ - admin, rewardEthToken, oracles, oracleAccounts, @@ -97,10 +96,8 @@ async function setActivatedValidators({ return; } - await enableRewardsVoting({ rewardEthToken, oracles, admin }); - let totalRewards = await rewardEthToken.totalRewards(); - let nonce = await oracles.currentNonce(); + let nonce = await oracles.currentRewardsNonce(); let encoded = defaultAbiCoder.encode( ['uint256', 'uint256', 'uint256'], @@ -133,22 +130,7 @@ async function setActivatedValidators({ return receipt; } -async function enableRewardsVoting({ rewardEthToken, oracles, admin }) { - if (await oracles.isRewardsVoting()) { - return; - } - let lastUpdateBlockNumber = await rewardEthToken.lastUpdateBlockNumber(); - let latestBlock = await time.latestBlock(); - await oracles.setSyncPeriod( - latestBlock.sub(lastUpdateBlockNumber).sub(new BN(1)), - { - from: admin, - } - ); -} - async function setTotalRewards({ - admin, rewardEthToken, oracles, oracleAccounts, @@ -158,11 +140,9 @@ async function setTotalRewards({ if ((await rewardEthToken.totalSupply()).eq(totalRewards)) { return; } - await enableRewardsVoting({ rewardEthToken, oracles, admin }); - // calculate candidate ID let activatedValidators = await pool.activatedValidators(); - let nonce = await oracles.currentNonce(); + let nonce = await oracles.currentRewardsNonce(); let encoded = defaultAbiCoder.encode( ['uint256', 'uint256', 'uint256'], [nonce.toString(), totalRewards.toString(), activatedValidators.toString()] @@ -202,7 +182,7 @@ async function setMerkleRoot({ return; } - let nonce = await oracles.currentNonce(); + let nonce = await oracles.currentRewardsNonce(); let encoded = defaultAbiCoder.encode( ['uint256', 'bytes32', 'string'], [nonce.toString(), merkleRoot, merkleProofs] @@ -233,7 +213,7 @@ async function initializeValidator({ oracles, oracleAccounts, }) { - let nonce = await oracles.currentNonce(); + let nonce = await oracles.currentValidatorsNonce(); let encoded = defaultAbiCoder.encode( ['uint256', 'bytes', 'address'], [nonce.toString(), publicKey, operator] @@ -269,7 +249,7 @@ async function finalizeValidator({ oracles, oracleAccounts, }) { - let nonce = await oracles.currentNonce(); + let nonce = await oracles.currentValidatorsNonce(); let encoded = defaultAbiCoder.encode( ['uint256', 'bytes', 'address'], [nonce.toString(), publicKey, operator] @@ -407,7 +387,7 @@ async function setupOracleAccounts({ admin, oracles, accounts }) { let oracleAccounts = []; for (let i = 0; i < totalOracles; i++) { let newOracle = accounts[i]; - await oracles.addOracle(newOracle, { from: admin }); + await oracles.addOracle(newOracle, 'example12.com', { from: admin }); oracleAccounts.push(newOracle); } @@ -426,7 +406,6 @@ module.exports = { setTotalRewards, setMerkleRoot, setupOracleAccounts, - enableRewardsVoting, initializeValidator, finalizeValidator, registerValidator, From a140a7f7316d9515c8bc0bcc06da8346aaad7332 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 24 Aug 2021 16:49:40 +0300 Subject: [PATCH 10/55] Fix event indexing for Pool --- abi/Pool.json | 8 ++++---- contracts/interfaces/IPool.sol | 4 ++-- contracts/pool/Pool.sol | 6 ++++-- test/pool/settings.test.js | 3 +-- test/pool/stake.test.js | 6 +++--- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/abi/Pool.json b/abi/Pool.json index 1eba1ac3..844580ff 100644 --- a/abi/Pool.json +++ b/abi/Pool.json @@ -236,13 +236,13 @@ "anonymous": false, "inputs": [ { - "indexed": true, + "indexed": false, "internalType": "bytes", "name": "publicKey", "type": "bytes" }, { - "indexed": true, + "indexed": false, "internalType": "address", "name": "operator", "type": "address" @@ -255,13 +255,13 @@ "anonymous": false, "inputs": [ { - "indexed": true, + "indexed": false, "internalType": "bytes", "name": "publicKey", "type": "bytes" }, { - "indexed": true, + "indexed": false, "internalType": "address", "name": "operator", "type": "address" diff --git a/contracts/interfaces/IPool.sol b/contracts/interfaces/IPool.sol index 5233b666..3d467f22 100644 --- a/contracts/interfaces/IPool.sol +++ b/contracts/interfaces/IPool.sol @@ -15,14 +15,14 @@ interface IPool { * @param publicKey - validator public key. * @param operator - address of the validator operator. */ - event ValidatorInitialized(bytes indexed publicKey, address indexed operator); + event ValidatorInitialized(bytes publicKey, address operator); /** * @dev Event for tracking registered validators. * @param publicKey - validator public key. * @param operator - address of the validator operator. */ - event ValidatorRegistered(bytes indexed publicKey, address indexed operator); + event ValidatorRegistered(bytes publicKey, address operator); /** * @dev Event for tracking refunds. diff --git a/contracts/pool/Pool.sol b/contracts/pool/Pool.sol index e15e9b43..fdf17599 100644 --- a/contracts/pool/Pool.sol +++ b/contracts/pool/Pool.sol @@ -233,6 +233,8 @@ contract Pool is IPool, OwnablePausableUpgradeable { require(msg.sender == address(validators), "Pool: access denied"); require(depositData.withdrawalCredentials == withdrawalCredentials, "Pool: invalid withdrawal credentials"); + emit ValidatorInitialized(depositData.publicKey, depositData.operator); + // initiate validator registration validatorRegistration.deposit{value : VALIDATOR_INIT_DEPOSIT}( depositData.publicKey, @@ -240,7 +242,6 @@ contract Pool is IPool, OwnablePausableUpgradeable { depositData.signature, depositData.depositDataRoot ); - emit ValidatorInitialized(depositData.publicKey, depositData.operator); } /** @@ -258,6 +259,8 @@ contract Pool is IPool, OwnablePausableUpgradeable { operatorsRevenueSharing.increaseAmount(depositData.operator, VALIDATOR_TOTAL_DEPOSIT); } + emit ValidatorRegistered(depositData.publicKey, depositData.operator); + // finalize validator registration validatorRegistration.deposit{value : VALIDATOR_TOTAL_DEPOSIT.sub(VALIDATOR_INIT_DEPOSIT)}( depositData.publicKey, @@ -265,7 +268,6 @@ contract Pool is IPool, OwnablePausableUpgradeable { depositData.signature, depositData.depositDataRoot ); - emit ValidatorRegistered(depositData.publicKey, depositData.operator); } /** diff --git a/test/pool/settings.test.js b/test/pool/settings.test.js index 7d9dd616..80243325 100644 --- a/test/pool/settings.test.js +++ b/test/pool/settings.test.js @@ -136,7 +136,7 @@ contract('Pool (settings)', ([operator, anyone, ...otherAccounts]) => { }); it('oracles contract can set activated validators', async () => { - await pool.stake(anyone, { + await pool.stake({ from: anyone, value: ether('32'), }); @@ -154,7 +154,6 @@ contract('Pool (settings)', ([operator, anyone, ...otherAccounts]) => { ); let receipt = await setActivatedValidators({ - admin, pool, rewardEthToken, activatedValidators, diff --git a/test/pool/stake.test.js b/test/pool/stake.test.js index 5dc7a602..2887ef86 100644 --- a/test/pool/stake.test.js +++ b/test/pool/stake.test.js @@ -72,14 +72,14 @@ contract('Pool (stake)', (accounts) => { describe('stake', () => { it('fails to stake with zero amount', async () => { await expectRevert( - pool.stake(sender1, { from: sender1, value: ether('0') }), + pool.stake({ from: sender1, value: ether('0') }), 'Pool: invalid deposit amount' ); }); it('fails to stake with zero address', async () => { await expectRevert( - pool.stake(constants.ZERO_ADDRESS, { + pool.stakeOnBehalf(constants.ZERO_ADDRESS, { from: sender1, value: ether('0'), }), @@ -363,7 +363,7 @@ contract('Pool (stake)', (accounts) => { await pool.setMinActivatingDeposit(ether('0.01'), { from: admin }); depositAmount = ether('32'); - await pool.stake(sender1, { + await pool.stake({ from: sender1, value: depositAmount, }); From dcf8a32e2e8b6b180f7593222de0a69fecf25b1b Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 24 Aug 2021 16:51:10 +0300 Subject: [PATCH 11/55] Fix indexing for events in PoolValidators --- abi/PoolValidators.json | 39 +----------------------- contracts/interfaces/IPoolValidators.sol | 18 +---------- test/pool/PoolValidators.test.js | 8 ++--- 3 files changed, 6 insertions(+), 59 deletions(-) diff --git a/abi/PoolValidators.json b/abi/PoolValidators.json index 58d4f66f..b18b982c 100644 --- a/abi/PoolValidators.json +++ b/abi/PoolValidators.json @@ -109,7 +109,7 @@ "type": "address" }, { - "indexed": true, + "indexed": false, "internalType": "bytes", "name": "publicKey", "type": "bytes" @@ -124,43 +124,6 @@ "name": "OperatorSlashed", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "initializeMerkleRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "string", - "name": "initializeMerkleProofs", - "type": "string" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "finalizeMerkleRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "string", - "name": "finalizeMerkleProofs", - "type": "string" - } - ], - "name": "OperatorUpdated", - "type": "event" - }, { "anonymous": false, "inputs": [ diff --git a/contracts/interfaces/IPoolValidators.sol b/contracts/interfaces/IPoolValidators.sol index a92bc3c6..595115ad 100644 --- a/contracts/interfaces/IPoolValidators.sol +++ b/contracts/interfaces/IPoolValidators.sol @@ -82,22 +82,6 @@ interface IPoolValidators { uint256 collateral ); - /** - * @dev Event for tracking existing operators updates. - * @param operator - address of the operator. - * @param initializeMerkleRoot - validators initialization merkle root. - * @param initializeMerkleProofs - validators initialization merkle proofs. - * @param finalizeMerkleRoot - validators finalization merkle root. - * @param finalizeMerkleProofs - validators finalization merkle proofs. - */ - event OperatorUpdated( - address indexed operator, - bytes32 indexed initializeMerkleRoot, - string initializeMerkleProofs, - bytes32 indexed finalizeMerkleRoot, - string finalizeMerkleProofs - ); - /** * @dev Event for tracking operators' removals. * @param sender - address of the transaction sender. @@ -116,7 +100,7 @@ interface IPoolValidators { */ event OperatorSlashed( address indexed operator, - bytes indexed publicKey, + bytes publicKey, uint256 refundedAmount ); diff --git a/test/pool/PoolValidators.test.js b/test/pool/PoolValidators.test.js index 874ae98e..6fae0156 100644 --- a/test/pool/PoolValidators.test.js +++ b/test/pool/PoolValidators.test.js @@ -66,7 +66,7 @@ contract('Pool Validators', (accounts) => { // collect validator deposit let poolBalance = await balance.current(pool.address); let depositAmount = validatorDeposit.sub(poolBalance); - await pool.stake(anyone, { + await pool.stake({ from: anyone, value: depositAmount, }); @@ -698,7 +698,7 @@ contract('Pool Validators', (accounts) => { await expectEvent(receipt, 'OperatorSlashed', { operator, - publicKey: keccak256(publicKey), + publicKey, refundedAmount: initAmount, }); @@ -891,7 +891,7 @@ contract('Pool Validators', (accounts) => { 'ValidatorInitialized', { operator, - publicKey: keccak256(publicKey), + publicKey, } ); expect( @@ -1069,7 +1069,7 @@ contract('Pool Validators', (accounts) => { await expectEvent.inTransaction(receipt.tx, Pool, 'ValidatorRegistered', { operator, - publicKey: keccak256(publicKey), + publicKey, }); expect( await validators.validatorStatuses( From fd31a9ba70f17a60544f2386a2383a02418c991a Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 24 Aug 2021 16:56:30 +0300 Subject: [PATCH 12/55] Add rewardPerPoint to RevenueSharing event, reduce the multiplier for decimals --- abi/RevenueSharing.json | 6 ++++++ contracts/RevenueSharing.sol | 7 ++++--- contracts/interfaces/IRevenueSharing.sol | 4 +++- test/RevenueSharing.test.js | 4 +--- 4 files changed, 14 insertions(+), 7 deletions(-) diff --git a/abi/RevenueSharing.json b/abi/RevenueSharing.json index 1713da0e..285ba851 100644 --- a/abi/RevenueSharing.json +++ b/abi/RevenueSharing.json @@ -139,6 +139,12 @@ "internalType": "uint256", "name": "periodReward", "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "rewardPerPoint", + "type": "uint256" } ], "name": "RewardsUpdated", diff --git a/contracts/RevenueSharing.sol b/contracts/RevenueSharing.sol index c093b007..f922ff61 100644 --- a/contracts/RevenueSharing.sol +++ b/contracts/RevenueSharing.sol @@ -281,9 +281,10 @@ contract RevenueSharing is IRevenueSharing, OwnablePausableUpgradeable { uint256 periodReward = totalReward.mul(_totalPoints).div(totalStaked.mul(1e4)); // update reward per point - rewardPerPoint = prevRewardPerPoint.add(periodReward.mul(1e31).div(_totalPoints)).toUint128(); + uint256 newRewardPerPoint = prevRewardPerPoint.add(periodReward.mul(1e22).div(_totalPoints)); + rewardPerPoint = newRewardPerPoint.toUint128(); - emit RewardsUpdated(msg.sender, periodReward); + emit RewardsUpdated(msg.sender, periodReward, newRewardPerPoint); return periodReward; } @@ -296,7 +297,7 @@ contract RevenueSharing is IRevenueSharing, OwnablePausableUpgradeable { internal pure returns (uint256 newReward) { if (newRewardPerPoint > prevRewardPerPoint) { - newReward = points.mul(newRewardPerPoint.sub(prevRewardPerPoint)).div(1e31); + newReward = points.mul(newRewardPerPoint.sub(prevRewardPerPoint)).div(1e22); } if (prevReward > 0) { diff --git a/contracts/interfaces/IRevenueSharing.sol b/contracts/interfaces/IRevenueSharing.sol index b759e306..e8bd2fed 100644 --- a/contracts/interfaces/IRevenueSharing.sol +++ b/contracts/interfaces/IRevenueSharing.sol @@ -80,10 +80,12 @@ interface IRevenueSharing { * @dev Event for tracking total rewards update. * @param sender - address of the transaction sender. * @param periodReward - period reward. + * @param rewardPerPoint - new reward per point. */ event RewardsUpdated( address indexed sender, - uint256 periodReward + uint256 periodReward, + uint256 rewardPerPoint ); /** diff --git a/test/RevenueSharing.test.js b/test/RevenueSharing.test.js index ad2ecd36..453482d2 100644 --- a/test/RevenueSharing.test.js +++ b/test/RevenueSharing.test.js @@ -353,7 +353,6 @@ contract('RevenueSharing', ([beneficiary, anyone, ...otherAccounts]) => { periodReward ); await setTotalRewards({ - admin, rewardEthToken, oracles, oracleAccounts, @@ -423,7 +422,7 @@ contract('RevenueSharing', ([beneficiary, anyone, ...otherAccounts]) => { }); const reward = receipt.logs[0].args.reward; expect(reward).to.bignumber.greaterThan(new BN(0)); - expect(reward).to.bignumber.equal(revenueCut); + expect(reward.sub(revenueCut)).to.bignumber.lessThan(new BN(10e8)); expect(await revenueSharing.rewardOf(beneficiary)).to.bignumber.equal( new BN(0) ); @@ -451,7 +450,6 @@ contract('RevenueSharing', ([beneficiary, anyone, ...otherAccounts]) => { periodReward ); await setTotalRewards({ - admin, rewardEthToken, oracles, oracleAccounts, From 4348320660f3bb06e83ffb8fdc5c3552d7db386e Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 24 Aug 2021 17:03:26 +0300 Subject: [PATCH 13/55] Revert multiplying by 1e27 --- contracts/tokens/RewardEthToken.sol | 4 ++-- test/MerkleDistributor.test.js | 23 ++++------------------- test/tokens/RewardEthToken.test.js | 21 ++++++--------------- test/tokens/StakedEthToken.test.js | 12 +++--------- test/tokens/toggleRewards.test.js | 11 ++++------- test/utils.js | 4 +++- 6 files changed, 22 insertions(+), 53 deletions(-) diff --git a/contracts/tokens/RewardEthToken.sol b/contracts/tokens/RewardEthToken.sol index 04de86bf..194ebbec 100644 --- a/contracts/tokens/RewardEthToken.sol +++ b/contracts/tokens/RewardEthToken.sol @@ -197,7 +197,7 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per ) internal pure returns (uint256) { - return currentReward.add(stakedEthAmount.mul(periodRewardPerToken).div(1e27)); + return currentReward.add(stakedEthAmount.mul(periodRewardPerToken).div(1e18)); } /** @@ -226,7 +226,7 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per uint256 protocolReward = periodRewards.mul(protocolFee).div(1e4); uint256 prevRewardPerToken = rewardPerToken; uint256 totalStaked = stakedEthToken.totalDeposits(); - uint256 newRewardPerToken = prevRewardPerToken.add(periodRewards.sub(protocolReward).mul(1e27).div(totalStaked)); + uint256 newRewardPerToken = prevRewardPerToken.add(periodRewards.sub(protocolReward).mul(1e18).div(totalStaked)); uint128 newRewardPerToken128 = newRewardPerToken.toUint128(); // store previous distributor rewards for period reward calculation diff --git a/test/MerkleDistributor.test.js b/test/MerkleDistributor.test.js index 4d38a468..4fb7cef3 100644 --- a/test/MerkleDistributor.test.js +++ b/test/MerkleDistributor.test.js @@ -6,7 +6,6 @@ const { send, BN, constants, - time, } = require('@openzeppelin/test-helpers'); const { upgradeContracts } = require('../deployments'); const { contractSettings, contracts } = require('../deployments/settings'); @@ -226,7 +225,6 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { // new rewards arrive let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); await setTotalRewards({ - admin, rewardEthToken, oracles, oracleAccounts, @@ -306,7 +304,7 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { await pool.setMinActivatingDeposit(constants.MAX_UINT256, { from: admin, }); - await pool.stake(anyone, { + await pool.stake({ from: anyone, value: ether('1000'), }); @@ -325,7 +323,6 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { ); await setTotalRewards({ - admin, rewardEthToken, oracles, oracleAccounts, @@ -361,7 +358,7 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { await pool.setMinActivatingDeposit(constants.MAX_UINT256, { from: admin, }); - await pool.stake(anyone, { + await pool.stake({ from: anyone, value: ether('1000'), }); @@ -369,7 +366,6 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { from: admin, }); await setTotalRewards({ - admin, rewardEthToken, oracles, oracleAccounts, @@ -473,18 +469,7 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { merkleDistributor.address ); - // wait for rewards voting time - let newSyncPeriod = new BN('700'); - await oracles.setSyncPeriod(newSyncPeriod, { - from: admin, - }); - let lastUpdateBlockNumber = - await rewardEthToken.lastUpdateBlockNumber(); - await time.advanceBlockTo( - lastUpdateBlockNumber.add(new BN(newSyncPeriod)) - ); - - await pool.stake(anyone, { + await pool.stake({ from: anyone, value: ether('1000'), }); @@ -502,7 +487,7 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { activatedValidators = await pool.activatedValidators(); // create rewards signature - let currentNonce = await oracles.currentNonce(); + let currentNonce = await oracles.currentRewardsNonce(); let encoded = defaultAbiCoder.encode( ['uint256', 'uint256', 'uint256'], [ diff --git a/test/tokens/RewardEthToken.test.js b/test/tokens/RewardEthToken.test.js index 651a8d17..80b62bfc 100644 --- a/test/tokens/RewardEthToken.test.js +++ b/test/tokens/RewardEthToken.test.js @@ -17,7 +17,6 @@ const { checkRewardEthToken, setTotalRewards, setupOracleAccounts, - enableRewardsVoting, } = require('../utils'); const StakedEthToken = artifacts.require('StakedEthToken'); @@ -158,7 +157,6 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { let prevTotalRewards = await rewardEthToken.totalRewards(); let newTotalRewards = prevTotalRewards.add(ether('10')); let receipt = await setTotalRewards({ - admin, rewardEthToken, oracles, pool, @@ -195,7 +193,6 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { let prevTotalRewards = await rewardEthToken.totalRewards(); let newTotalRewards = prevTotalRewards.add(ether('10')); let receipt = await setTotalRewards({ - admin, rewardEthToken, oracles, pool, @@ -231,14 +228,14 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { partnersRevenueSharing, ]) { // add accounts - await revenueSharing.addAccount(claimer, beneficiary1, revenueShare1, { + await revenueSharing.addAccount(beneficiary1, revenueShare1, { from: admin, }); await revenueSharing.increaseAmount(beneficiary1, contributedAmount1, { from: admin, }); - await revenueSharing.addAccount(claimer, beneficiary2, revenueShare2, { + await revenueSharing.addAccount(beneficiary2, revenueShare2, { from: admin, }); await revenueSharing.increaseAmount(beneficiary2, contributedAmount2, { @@ -255,7 +252,6 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { protocolFeeRecipient ); await setTotalRewards({ - admin, rewardEthToken, oracles, oracleAccounts, @@ -341,18 +337,17 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { await pool.setMinActivatingDeposit(stakedAmount2.add(ether('1')), { from: admin, }); - await pool.stake(sender1, { + await pool.stake({ from: sender1, value: stakedAmount1, }); - await pool.stake(sender2, { + await pool.stake({ from: sender2, value: stakedAmount2, }); totalSupply = (await rewardEthToken.totalSupply()).add(ether('10')); await setTotalRewards({ - admin, totalRewards: totalSupply, rewardEthToken, pool, @@ -503,12 +498,10 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { from: sender1, }); - // wait for rewards voting time - await enableRewardsVoting({ rewardEthToken, admin, oracles }); let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); let activatedValidators = await pool.activatedValidators(); - let currentNonce = await oracles.currentNonce(); + let currentNonce = await oracles.currentRewardsNonce(); let encoded = defaultAbiCoder.encode( ['uint256', 'uint256', 'uint256'], [ @@ -554,12 +547,10 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { from: sender1, }); - // wait for rewards voting time - await enableRewardsVoting({ rewardEthToken, admin, oracles }); let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); let activatedValidators = await pool.activatedValidators(); - let currentNonce = await oracles.currentNonce(); + let currentNonce = await oracles.currentRewardsNonce(); let encoded = defaultAbiCoder.encode( ['uint256', 'uint256', 'uint256'], [ diff --git a/test/tokens/StakedEthToken.test.js b/test/tokens/StakedEthToken.test.js index 42546b34..f266e1cb 100644 --- a/test/tokens/StakedEthToken.test.js +++ b/test/tokens/StakedEthToken.test.js @@ -15,7 +15,6 @@ const { checkStakedEthToken, setupOracleAccounts, setTotalRewards, - enableRewardsVoting, } = require('../utils'); const { upgradeContracts } = require('../../deployments'); const { contractSettings, contracts } = require('../../deployments/settings'); @@ -56,7 +55,7 @@ contract('StakedEthToken', (accounts) => { rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); - let currentNonce = await oracles.currentNonce(); + let currentNonce = await oracles.currentRewardsNonce(); activatedValidators = await pool.activatedValidators(); let encoded = defaultAbiCoder.encode( ['uint256', 'uint256', 'uint256'], @@ -97,7 +96,7 @@ contract('StakedEthToken', (accounts) => { let prevPrincipal = await stakedEthToken.distributorPrincipal(); await stakedEthToken.toggleRewards(sender1, true, { from: admin }); let amount = ether('10'); - let receipt = await pool.stake(sender1, { + let receipt = await pool.stake({ from: sender1, value: amount, }); @@ -120,7 +119,7 @@ contract('StakedEthToken', (accounts) => { await pool.setMinActivatingDeposit(value.add(ether('1')), { from: admin, }); - await pool.stake(sender1, { + await pool.stake({ from: sender1, value, }); @@ -244,7 +243,6 @@ contract('StakedEthToken', (accounts) => { it('preserves rewards during sETH2 transfer', async () => { let totalRewards = (await rewardEthToken.totalSupply()).add(ether('10')); await setTotalRewards({ - admin, totalRewards, rewardEthToken, pool, @@ -393,8 +391,6 @@ contract('StakedEthToken', (accounts) => { from: sender1, }); - // wait for rewards voting time - await enableRewardsVoting({ rewardEthToken, admin, oracles }); await expectRevert( multicallMock.updateTotalRewardsAndTransferStakedEth( totalRewards, @@ -429,8 +425,6 @@ contract('StakedEthToken', (accounts) => { from: sender1, }); - // wait for rewards voting time - await enableRewardsVoting({ rewardEthToken, admin, oracles }); let receipt = await multicallMock.transferStakedEthAndUpdateTotalRewards( totalRewards, activatedValidators, diff --git a/test/tokens/toggleRewards.test.js b/test/tokens/toggleRewards.test.js index 46bc7311..2fabdeb7 100644 --- a/test/tokens/toggleRewards.test.js +++ b/test/tokens/toggleRewards.test.js @@ -82,7 +82,7 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { let deposit = ether('5'); // mint sETH2 for disabled account - await pool.stake(account, { + await pool.stake({ from: account, value: deposit, }); @@ -127,7 +127,7 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { let deposit = ether('5'); // mint sETH2 for disabled account - await pool.stake(account, { + await pool.stake({ from: account, value: deposit, }); @@ -147,7 +147,7 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { ).to.be.bignumber.equal(distributorReward); // mint sETH2 for normal account - await pool.stake(anyone, { + await pool.stake({ from: anyone, value: ether('5'), }); @@ -161,7 +161,6 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { // new rewards arrive let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); await setTotalRewards({ - admin, rewardEthToken, oracles, oracleAccounts, @@ -211,7 +210,7 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { it('toggling rewards does not affect current rewards balance', async () => { // mint sETH2 for disabled account let deposit = ether('5'); - await pool.stake(account, { + await pool.stake({ from: account, value: deposit, }); @@ -226,7 +225,6 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); await setTotalRewards({ - admin, rewardEthToken, oracles, oracleAccounts, @@ -292,7 +290,6 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { // next rewards arrive totalRewards = totalRewards.add(ether('10')); await setTotalRewards({ - admin, rewardEthToken, oracles, oracleAccounts, diff --git a/test/utils.js b/test/utils.js index 29f54c00..01512dd5 100644 --- a/test/utils.js +++ b/test/utils.js @@ -387,7 +387,9 @@ async function setupOracleAccounts({ admin, oracles, accounts }) { let oracleAccounts = []; for (let i = 0; i < totalOracles; i++) { let newOracle = accounts[i]; - await oracles.addOracle(newOracle, 'example12.com', { from: admin }); + await oracles.addOracle(newOracle, 'example12.com', 'example13.com', { + from: admin, + }); oracleAccounts.push(newOracle); } From c7c3c552861d3ca447b8459a5e572671c43bd6cc Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 14 Sep 2021 22:46:49 +0300 Subject: [PATCH 14/55] Remove votes sources for new oracles --- abi/Oracles.json | 36 ++---------------------- abi/RewardEthToken.json | 2 +- contracts/Oracles.sol | 26 ++++------------- contracts/interfaces/IOracles.sol | 22 +++++---------- contracts/interfaces/IRewardEthToken.sol | 6 ++-- contracts/tokens/RewardEthToken.sol | 2 +- 6 files changed, 20 insertions(+), 74 deletions(-) diff --git a/abi/Oracles.json b/abi/Oracles.json index 59a2570d..832240b3 100644 --- a/abi/Oracles.json +++ b/abi/Oracles.json @@ -11,7 +11,7 @@ { "indexed": true, "internalType": "address", - "name": "signer", + "name": "oracle", "type": "address" }, { @@ -48,7 +48,7 @@ { "indexed": true, "internalType": "address", - "name": "signer", + "name": "oracle", "type": "address" }, { @@ -118,18 +118,6 @@ "internalType": "address", "name": "oracle", "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "rewardVotesSource", - "type": "string" - }, - { - "indexed": false, - "internalType": "string", - "name": "validatorVotesSource", - "type": "string" } ], "name": "OracleAdded", @@ -344,16 +332,6 @@ "internalType": "address", "name": "account", "type": "address" - }, - { - "internalType": "string", - "name": "rewardVotesSource", - "type": "string" - }, - { - "internalType": "string", - "name": "validatorVotesSource", - "type": "string" } ], "name": "addOracle", @@ -585,16 +563,6 @@ "internalType": "address", "name": "_merkleDistributor", "type": "address" - }, - { - "internalType": "string[]", - "name": "rewardVotesSources", - "type": "string[]" - }, - { - "internalType": "string[]", - "name": "validatorVotesSources", - "type": "string[]" } ], "name": "initialize", diff --git a/abi/RewardEthToken.json b/abi/RewardEthToken.json index 89bb195e..29d83bd5 100644 --- a/abi/RewardEthToken.json +++ b/abi/RewardEthToken.json @@ -119,7 +119,7 @@ { "indexed": false, "internalType": "uint256", - "name": "distributorPeriodReward", + "name": "distributorReward", "type": "uint256" }, { diff --git a/contracts/Oracles.sol b/contracts/Oracles.sol index 1f01035a..6d450aa4 100644 --- a/contracts/Oracles.sol +++ b/contracts/Oracles.sol @@ -26,13 +26,6 @@ interface IAccessControlUpgradeable { function getRoleMember(bytes32 role, uint256 index) external view returns (address); } -interface IPrevOracles { - /** - * @dev Function for retrieving current rewards nonce. - */ - function currentNonce() external view returns (uint256); -} - /** * @title Oracles * @@ -72,25 +65,18 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { address _rewardEthToken, address _pool, address _poolValidators, - address _merkleDistributor, - string[] memory rewardVotesSources, - string[] memory validatorVotesSources + address _merkleDistributor ) external override initializer { __OwnablePausableUpgradeable_init(admin); // migrate data from previous Oracles contract - rewardsNonce._value = IPrevOracles(prevOracles).currentNonce(); uint256 oraclesCount = IAccessControlUpgradeable(prevOracles).getRoleMemberCount(ORACLE_ROLE); - require( - oraclesCount == rewardVotesSources.length && oraclesCount == validatorVotesSources.length, - "Oracles: invalid length of votes sources" - ); for(uint256 i = 0; i < oraclesCount; i++) { address oracle = IAccessControlUpgradeable(prevOracles).getRoleMember(ORACLE_ROLE, i); _setupRole(ORACLE_ROLE, oracle); - emit OracleAdded(oracle, rewardVotesSources[i], validatorVotesSources[i]); + emit OracleAdded(oracle); } rewardEthToken = IRewardEthToken(_rewardEthToken); @@ -123,9 +109,9 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { /** * @dev See {IOracles-addOracle}. */ - function addOracle(address account, string memory rewardVotesSource, string memory validatorVotesSource) external override { + function addOracle(address account) external override { grantRole(ORACLE_ROLE, account); - emit OracleAdded(account, rewardVotesSource, validatorVotesSource); + emit OracleAdded(account); } /** @@ -162,7 +148,7 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { // calculate candidate ID hash uint256 nonce = rewardsNonce.current(); bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( - keccak256(abi.encode(nonce, totalRewards, activatedValidators)) + keccak256(abi.encode(nonce, activatedValidators, totalRewards)) ); // check signatures and calculate number of submitted oracle votes @@ -210,7 +196,7 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { // calculate candidate ID hash uint256 nonce = rewardsNonce.current(); bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( - keccak256(abi.encode(nonce, merkleRoot, merkleProofs)) + keccak256(abi.encode(nonce, merkleProofs, merkleRoot)) ); // check signatures and calculate number of submitted oracle votes diff --git a/contracts/interfaces/IOracles.sol b/contracts/interfaces/IOracles.sol index 8a5f822d..06bcaa99 100644 --- a/contracts/interfaces/IOracles.sol +++ b/contracts/interfaces/IOracles.sol @@ -44,14 +44,14 @@ interface IOracles { /** * @dev Event for tracking validator initialization votes. * @param sender - address of the transaction sender. - * @param signer - address of the signed oracle. + * @param oracle - address of the signed oracle. * @param operator - address of the operator the vote was sent for. * @param publicKey - public key of the validator the vote was sent for. * @param nonce - validator initialization nonce. */ event InitializeValidatorVoteSubmitted( address indexed sender, - address indexed signer, + address indexed oracle, address indexed operator, bytes publicKey, uint256 nonce @@ -60,14 +60,14 @@ interface IOracles { /** * @dev Event for tracking validator finalization votes. * @param sender - address of the transaction sender. - * @param signer - address of the signed oracle. + * @param oracle - address of the signed oracle. * @param operator - address of the operator the vote was sent for. * @param publicKey - public key of the validator the vote was sent for. * @param nonce - validator finalization nonce. */ event FinalizeValidatorVoteSubmitted( address indexed sender, - address indexed signer, + address indexed oracle, address indexed operator, bytes publicKey, uint256 nonce @@ -76,10 +76,8 @@ interface IOracles { /** * @dev Event for tracking new or updates oracles. * @param oracle - address of new or updated oracle. - * @param rewardVotesSource - the new or updated source from where the votes for the rewards can be fetched. - * @param validatorVotesSource - the new or updated source from where the votes for the validators can be fetched. */ - event OracleAdded(address indexed oracle, string rewardVotesSource, string validatorVotesSource); + event OracleAdded(address indexed oracle); /** * @dev Event for tracking removed oracles. @@ -95,8 +93,6 @@ interface IOracles { * @param _pool - address of the Pool contract. * @param _poolValidators - address of the PoolValidators contract. * @param _merkleDistributor - address of the MerkleDistributor contract. - * @param rewardVotesSources - array of reward votes sources that correspond to the oracle addresses. - * @param validatorVotesSources - array of validator votes sources that correspond to the oracle addresses. */ function initialize( address admin, @@ -104,9 +100,7 @@ interface IOracles { address _rewardEthToken, address _pool, address _poolValidators, - address _merkleDistributor, - string[] memory rewardVotesSources, - string[] memory validatorVotesSources + address _merkleDistributor ) external; /** @@ -134,10 +128,8 @@ interface IOracles { * @dev Function for adding an oracle role to the account. * Can only be called by an account with an admin role. * @param account - account to assign an oracle role to. - * @param rewardVotesSource - source where the votes for new reward will be published by oracle. - * @param validatorVotesSource - source where the votes for new validator will be published by oracle. */ - function addOracle(address account, string memory rewardVotesSource, string memory validatorVotesSource) external; + function addOracle(address account) external; /** * @dev Function for removing an oracle role from the account. diff --git a/contracts/interfaces/IRewardEthToken.sol b/contracts/interfaces/IRewardEthToken.sol index 9778df20..fe3b0a4d 100644 --- a/contracts/interfaces/IRewardEthToken.sol +++ b/contracts/interfaces/IRewardEthToken.sol @@ -42,14 +42,14 @@ interface IRewardEthToken is IERC20Upgradeable { * @param periodRewards - rewards since the last update. * @param totalRewards - total amount of rewards. * @param rewardPerToken - calculated reward per token for account reward calculation. - * @param distributorPeriodReward - distributor period reward. - * @param protocolReward - protocol period reward. + * @param distributorReward - distributor reward. + * @param protocolReward - protocol reward. */ event RewardsUpdated( uint256 periodRewards, uint256 totalRewards, uint256 rewardPerToken, - uint256 distributorPeriodReward, + uint256 distributorReward, uint256 protocolReward ); diff --git a/contracts/tokens/RewardEthToken.sol b/contracts/tokens/RewardEthToken.sol index 194ebbec..c9fec773 100644 --- a/contracts/tokens/RewardEthToken.sol +++ b/contracts/tokens/RewardEthToken.sol @@ -265,7 +265,7 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per newTotalRewards, newRewardPerToken, newDistributorBalance.sub(prevDistributorBalance), - leftReward + _protocolFeeRecipient == address(0) ? leftReward: 0 ); } From 5bce04c02ba75884ec7f0cbbdffd0f48c22a032e Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 14 Sep 2021 22:54:20 +0300 Subject: [PATCH 15/55] Fix RewardEthToken checkpoint calculation --- contracts/tokens/RewardEthToken.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/tokens/RewardEthToken.sol b/contracts/tokens/RewardEthToken.sol index c9fec773..253913fc 100644 --- a/contracts/tokens/RewardEthToken.sol +++ b/contracts/tokens/RewardEthToken.sol @@ -179,7 +179,7 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per if (stakedEthAmount == 0) { checkpoints[account] = Checkpoint({ reward: cp.reward, - rewardPerToken: newRewardPerToken + rewardPerToken: cp.rewardPerToken }); } else { uint256 periodRewardPerToken = uint256(newRewardPerToken).sub(cp.rewardPerToken); From 2608b37dfdd47298f24d39838b5301a3ce0ecf4e Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Wed, 29 Sep 2021 17:19:30 +0300 Subject: [PATCH 16/55] Implement distributor roles --- abi/ContractChecker.json | 21 + abi/MerkleDistributor.json | 135 +++-- abi/Oracles.json | 13 + abi/Pool.json | 75 ++- abi/RewardEthToken.json | 23 - abi/{RevenueSharing.json => Roles.json} | 314 +++--------- contracts/ContractChecker.sol | 19 + contracts/Oracles.sol | 9 + contracts/RevenueSharing.sol | 307 ------------ contracts/Roles.sol | 70 +++ contracts/interfaces/IMerkleDistributor.sol | 53 +- contracts/interfaces/IOracles.sol | 6 + contracts/interfaces/IPool.sol | 44 +- contracts/interfaces/IRevenueSharing.sol | 178 ------- contracts/interfaces/IRewardEthToken.sol | 33 +- contracts/interfaces/IRoles.sol | 90 ++++ contracts/merkles/MerkleDistributor.sol | 35 +- contracts/pool/Pool.sol | 52 +- contracts/pool/PoolValidators.sol | 1 + contracts/tokens/RewardEthToken.sol | 65 +-- deployments/index.js | 84 +--- deployments/merkleDistributor.js | 25 - deployments/settings.js | 26 - hardhat.config.js | 3 +- test/MerkleDistributor.test.js | 143 +++++- test/RevenueSharing.test.js | 515 -------------------- test/Roles.test.js | 229 +++++++++ test/oracles/Oracles.test.js | 45 +- test/oracles/upgrading.test.js | 4 +- test/pool/stake.test.js | 111 +++-- test/pool/upgrading.test.js | 37 +- test/tokens/RewardEthToken.test.js | 142 +----- test/tokens/StakedEthToken.test.js | 2 +- test/tokens/toggleRewards.test.js | 87 ---- test/tokens/upgrading.test.js | 38 +- test/utils.js | 11 +- 36 files changed, 1109 insertions(+), 1936 deletions(-) create mode 100644 abi/ContractChecker.json rename abi/{RevenueSharing.json => Roles.json} (67%) create mode 100644 contracts/ContractChecker.sol delete mode 100644 contracts/RevenueSharing.sol create mode 100644 contracts/Roles.sol delete mode 100644 contracts/interfaces/IRevenueSharing.sol create mode 100644 contracts/interfaces/IRoles.sol delete mode 100644 deployments/merkleDistributor.js delete mode 100644 test/RevenueSharing.test.js create mode 100644 test/Roles.test.js diff --git a/abi/ContractChecker.json b/abi/ContractChecker.json new file mode 100644 index 00000000..0a6b89b6 --- /dev/null +++ b/abi/ContractChecker.json @@ -0,0 +1,21 @@ +[ + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "name": "isContract", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + } +] diff --git a/abi/MerkleDistributor.json b/abi/MerkleDistributor.json index 1a53fe5c..b615e97b 100644 --- a/abi/MerkleDistributor.json +++ b/abi/MerkleDistributor.json @@ -39,76 +39,113 @@ "name": "sender", "type": "address" }, + { + "indexed": true, + "internalType": "bytes32", + "name": "merkleRoot", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "string", + "name": "merkleProofs", + "type": "string" + } + ], + "name": "MerkleRootUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ { "indexed": true, "internalType": "address", - "name": "token", + "name": "from", "type": "address" }, { "indexed": true, "internalType": "address", - "name": "beneficiary", + "name": "origin", "type": "address" }, { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" }, { "indexed": false, "internalType": "uint256", - "name": "startBlock", + "name": "amount", "type": "uint256" }, { "indexed": false, - "internalType": "uint256", - "name": "endBlock", - "type": "uint256" + "internalType": "string", + "name": "rewardsLink", + "type": "string" } ], - "name": "DistributionAdded", + "name": "OneTimeDistributionAdded", "type": "event" }, { "anonymous": false, "inputs": [ { - "indexed": true, + "indexed": false, "internalType": "address", - "name": "sender", + "name": "account", "type": "address" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "merkleRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "string", - "name": "merkleProofs", - "type": "string" } ], - "name": "MerkleRootUpdated", + "name": "Paused", "type": "event" }, { "anonymous": false, "inputs": [ { - "indexed": false, + "indexed": true, "internalType": "address", - "name": "account", + "name": "from", "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "beneficiary", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "startBlock", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "endBlock", + "type": "uint256" } ], - "name": "Paused", + "name": "PeriodicDistributionAdded", "type": "event" }, { @@ -310,6 +347,44 @@ }, { "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "address", + "name": "origin", + "type": "address" + }, + { + "internalType": "address", + "name": "token", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "string", + "name": "rewardsLink", + "type": "string" + } + ], + "name": "distributeOneTime", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, { "internalType": "address", "name": "token", @@ -331,7 +406,7 @@ "type": "uint256" } ], - "name": "distribute", + "name": "distributePeriodically", "outputs": [], "stateMutability": "nonpayable", "type": "function" diff --git a/abi/Oracles.json b/abi/Oracles.json index 832240b3..74a8a1d0 100644 --- a/abi/Oracles.json +++ b/abi/Oracles.json @@ -73,6 +73,19 @@ "name": "InitializeValidatorVoteSubmitted", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "rewardsNonce", + "type": "uint256" + } + ], + "name": "Initialized", + "type": "event" + }, { "anonymous": false, "inputs": [ diff --git a/abi/Pool.json b/abi/Pool.json index 844580ff..f5b88d41 100644 --- a/abi/Pool.json +++ b/abi/Pool.json @@ -219,6 +219,44 @@ "name": "RoleRevoked", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "partner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "StakedWithPartner", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "referrer", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "StakedWithReferrer", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -881,32 +919,53 @@ "type": "function" }, { - "inputs": [], - "name": "unpause", + "inputs": [ + { + "internalType": "address", + "name": "referrer", + "type": "address" + } + ], + "name": "stakeWithReferrer", "outputs": [], - "stateMutability": "nonpayable", + "stateMutability": "payable", "type": "function" }, { "inputs": [ { "internalType": "address", - "name": "_poolValidators", + "name": "referrer", "type": "address" }, { "internalType": "address", - "name": "_oracles", + "name": "recipient", "type": "address" - }, + } + ], + "name": "stakeWithReferrerOnBehalf", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [], + "name": "unpause", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ { "internalType": "address", - "name": "_partnersRevenueSharing", + "name": "_poolValidators", "type": "address" }, { "internalType": "address", - "name": "_operatorsRevenueSharing", + "name": "_oracles", "type": "address" } ], diff --git a/abi/RewardEthToken.json b/abi/RewardEthToken.json index 29d83bd5..f1ff2b22 100644 --- a/abi/RewardEthToken.json +++ b/abi/RewardEthToken.json @@ -63,19 +63,6 @@ "name": "ProtocolFeeUpdated", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address[]", - "name": "revenueShares", - "type": "address[]" - } - ], - "name": "RevenueSharesUpdated", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -1073,16 +1060,6 @@ "internalType": "address", "name": "_oracles", "type": "address" - }, - { - "internalType": "address", - "name": "_operatorsRevenueSharing", - "type": "address" - }, - { - "internalType": "address", - "name": "_partnersRevenueSharing", - "type": "address" } ], "name": "upgrade", diff --git a/abi/RevenueSharing.json b/abi/Roles.json similarity index 67% rename from abi/RevenueSharing.json rename to abi/Roles.json index 285ba851..b343e0d3 100644 --- a/abi/RevenueSharing.json +++ b/abi/Roles.json @@ -5,17 +5,11 @@ { "indexed": true, "internalType": "address", - "name": "beneficiary", + "name": "operator", "type": "address" - }, - { - "indexed": true, - "internalType": "uint128", - "name": "revenueShare", - "type": "uint128" } ], - "name": "AccountAdded", + "name": "OperatorRemoved", "type": "event" }, { @@ -24,17 +18,17 @@ { "indexed": true, "internalType": "address", - "name": "beneficiary", + "name": "operator", "type": "address" }, { "indexed": false, "internalType": "uint256", - "name": "reward", + "name": "revenueShare", "type": "uint256" } ], - "name": "AccountRemoved", + "name": "OperatorUpdated", "type": "event" }, { @@ -43,61 +37,43 @@ { "indexed": true, "internalType": "address", - "name": "beneficiary", + "name": "partner", "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "reward", - "type": "uint256" } ], - "name": "AmountIncreased", + "name": "PartnerRemoved", "type": "event" }, { "anonymous": false, "inputs": [ { - "indexed": false, + "indexed": true, "internalType": "address", - "name": "account", + "name": "partner", "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "revenueShare", + "type": "uint256" } ], - "name": "Paused", + "name": "PartnerUpdated", "type": "event" }, { "anonymous": false, "inputs": [ { - "indexed": true, + "indexed": false, "internalType": "address", - "name": "beneficiary", + "name": "account", "type": "address" - }, - { - "indexed": true, - "internalType": "uint256", - "name": "revenueShare", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "reward", - "type": "uint256" } ], - "name": "RevenueShareUpdated", + "name": "Paused", "type": "event" }, { @@ -106,23 +82,11 @@ { "indexed": true, "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "beneficiary", + "name": "referrer", "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "reward", - "type": "uint256" } ], - "name": "RewardCollected", + "name": "ReferrerAdded", "type": "event" }, { @@ -131,23 +95,11 @@ { "indexed": true, "internalType": "address", - "name": "sender", + "name": "referrer", "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "periodReward", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "rewardPerPoint", - "type": "uint256" } ], - "name": "RewardsUpdated", + "name": "ReferrerRemoved", "type": "event" }, { @@ -264,24 +216,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "beneficiary", - "type": "address" - }, - { - "internalType": "uint128", - "name": "revenueShare", - "type": "uint128" - } - ], - "name": "addAccount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -312,58 +246,11 @@ "inputs": [ { "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "checkpoints", - "outputs": [ - { - "internalType": "uint128", - "name": "amount", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "revenueShare", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "unclaimedReward", - "type": "uint128" - }, - { - "internalType": "uint128", - "name": "rewardPerPoint", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "beneficiary", + "name": "account", "type": "address" } ], - "name": "collectReward", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address[]", - "name": "beneficiaries", - "type": "address[]" - } - ], - "name": "collectRewards", + "name": "addReferrer", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -476,35 +363,7 @@ "inputs": [ { "internalType": "address", - "name": "beneficiary", - "type": "address" - }, - { - "internalType": "uint256", - "name": "addedAmount", - "type": "uint256" - } - ], - "name": "increaseAmount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_admin", - "type": "address" - }, - { - "internalType": "address", - "name": "_pool", - "type": "address" - }, - { - "internalType": "address", - "name": "_rewardEthToken", + "name": "admin", "type": "address" } ], @@ -513,25 +372,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "beneficiary", - "type": "address" - } - ], - "name": "isAdded", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [ { @@ -594,30 +434,37 @@ "inputs": [ { "internalType": "address", - "name": "beneficiary", + "name": "_account", "type": "address" } ], - "name": "pointsOf", - "outputs": [ + "name": "removeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ { - "internalType": "uint256", - "name": "", - "type": "uint256" + "internalType": "address", + "name": "account", + "type": "address" } ], - "stateMutability": "view", + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", - "name": "beneficiary", + "name": "account", "type": "address" } ], - "name": "removeAccount", + "name": "removePartner", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -630,7 +477,7 @@ "type": "address" } ], - "name": "removeAdmin", + "name": "removePauser", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -639,11 +486,11 @@ "inputs": [ { "internalType": "address", - "name": "_account", + "name": "account", "type": "address" } ], - "name": "removePauser", + "name": "removeReferrer", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -688,50 +535,16 @@ "inputs": [ { "internalType": "address", - "name": "beneficiary", + "name": "account", "type": "address" - } - ], - "name": "rewardOf", - "outputs": [ + }, { "internalType": "uint256", - "name": "", + "name": "revenueShare", "type": "uint256" } ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "rewardPerPoint", - "outputs": [ - { - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "totalPoints", - "outputs": [ - { - "internalType": "uint128", - "name": "", - "type": "uint128" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "unpause", + "name": "setOperator", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -740,41 +553,24 @@ "inputs": [ { "internalType": "address", - "name": "beneficiary", + "name": "account", "type": "address" }, { "internalType": "uint256", - "name": "newRevenueShare", + "name": "revenueShare", "type": "uint256" } ], - "name": "updateRevenueShare", + "name": "setPartner", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { - "inputs": [ - { - "internalType": "uint256", - "name": "totalReward", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalStaked", - "type": "uint256" - } - ], - "name": "updateRewards", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], + "inputs": [], + "name": "unpause", + "outputs": [], "stateMutability": "nonpayable", "type": "function" } diff --git a/contracts/ContractChecker.sol b/contracts/ContractChecker.sol new file mode 100644 index 00000000..564d50e0 --- /dev/null +++ b/contracts/ContractChecker.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +pragma solidity 0.7.5; + +import "@openzeppelin/contracts/utils/Address.sol"; + +/** + * @title ContractChecker + * + * @dev ContractChecker can be used to check whether the address is a contract. + */ +contract ContractChecker { + /** + * @dev Returns true if `account` is a contract. + */ + function isContract(address account) external view returns (bool) { + return Address.isContract(account); + } +} diff --git a/contracts/Oracles.sol b/contracts/Oracles.sol index 6d450aa4..2aab5c0e 100644 --- a/contracts/Oracles.sol +++ b/contracts/Oracles.sol @@ -26,6 +26,13 @@ interface IAccessControlUpgradeable { function getRoleMember(bytes32 role, uint256 index) external view returns (address); } +interface IPrevOracles { + /** + * @dev Function for retrieving current rewards nonce. + */ + function currentNonce() external view returns (uint256); +} + /** * @title Oracles * @@ -72,6 +79,7 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { __OwnablePausableUpgradeable_init(admin); // migrate data from previous Oracles contract + rewardsNonce._value = IPrevOracles(prevOracles).currentNonce().add(1000); uint256 oraclesCount = IAccessControlUpgradeable(prevOracles).getRoleMemberCount(ORACLE_ROLE); for(uint256 i = 0; i < oraclesCount; i++) { address oracle = IAccessControlUpgradeable(prevOracles).getRoleMember(ORACLE_ROLE, i); @@ -83,6 +91,7 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { pool = IPool(_pool); poolValidators = IPoolValidators(_poolValidators); merkleDistributor = IMerkleDistributor(_merkleDistributor); + emit Initialized(rewardsNonce.current()); } /** diff --git a/contracts/RevenueSharing.sol b/contracts/RevenueSharing.sol deleted file mode 100644 index f922ff61..00000000 --- a/contracts/RevenueSharing.sol +++ /dev/null @@ -1,307 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-only - -pragma solidity 0.7.5; - -import "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/token/ERC20/SafeERC20Upgradeable.sol"; -import "@openzeppelin/contracts-upgradeable/utils/SafeCastUpgradeable.sol"; -import "./presets/OwnablePausableUpgradeable.sol"; -import "./interfaces/IRevenueSharing.sol"; - - -/** - * @title RevenueSharing - * - * @dev RevenueSharing contract cuts the Pool's reward and distributes among added accounts. - */ -contract RevenueSharing is IRevenueSharing, OwnablePausableUpgradeable { - using SafeMathUpgradeable for uint256; - using SafeCastUpgradeable for uint256; - using SafeERC20Upgradeable for IERC20Upgradeable; - - // @dev Maps beneficiary address to the reward checkpoint. - mapping(address => Checkpoint) public override checkpoints; - - // @dev Address of the Pool contract. - address private pool; - - // @dev Address of the RewardEthToken contract. - IERC20Upgradeable private rewardEthToken; - - // @dev Total number of points (sum of contributed amount * revenue share %). - uint128 public override totalPoints; - - // @dev Current rETH2 reward amount per point. - uint128 public override rewardPerPoint; - - /** - * @dev See {IRevenueSharing-initialize}. - */ - function initialize(address _admin, address _pool, address _rewardEthToken) external override initializer { - __OwnablePausableUpgradeable_init(_admin); - pool = _pool; - rewardEthToken = IERC20Upgradeable(_rewardEthToken); - } - - /** - * @dev See {IRevenueSharing-isAdded}. - */ - function isAdded(address beneficiary) external view override returns (bool) { - return checkpoints[beneficiary].revenueShare != 0; - } - - /** - * @dev See {IRevenueSharing-addAccount}. - */ - function addAccount(address beneficiary, uint128 revenueShare) external override onlyAdmin whenNotPaused { - require(checkpoints[beneficiary].revenueShare == 0, "RevenueSharing: account already added"); - require(revenueShare > 0 && revenueShare <= 1e4, "RevenueSharing: invalid revenue share"); - require(beneficiary != address(0), "RevenueSharing: invalid beneficiary"); - - // register new checkpoint - checkpoints[beneficiary] = Checkpoint({ - amount: 0, - revenueShare: revenueShare, - unclaimedReward: 0, - rewardPerPoint: rewardPerPoint - }); - emit AccountAdded(beneficiary, revenueShare); - } - - /** - * @dev See {IRevenueSharing-removeAccount}. - */ - function removeAccount(address beneficiary) external override onlyAdmin whenNotPaused { - Checkpoint storage checkpoint = checkpoints[beneficiary]; - ( - uint256 amount, - uint256 revenueShare, - uint256 prevReward, - uint256 prevRewardPerPoint - ) = ( - checkpoint.amount, - checkpoint.revenueShare, - checkpoint.unclaimedReward, - checkpoint.rewardPerPoint - ); - require(revenueShare != 0, "RevenueSharing: account is not added"); - - // calculate new reward - uint256 accountPoints = amount.mul(revenueShare); - uint256 newReward = _calculateReward(accountPoints, prevReward, prevRewardPerPoint, rewardPerPoint); - - // clean up account - delete checkpoints[beneficiary]; - totalPoints = uint256(totalPoints).sub(accountPoints).toUint128(); - - // transfer funds - if (newReward > 0) { - rewardEthToken.safeTransfer(beneficiary, newReward); - } - emit AccountRemoved(beneficiary, newReward); - } - - /** - * @dev See {IRevenueSharing-updateRevenueShare}. - */ - function updateRevenueShare(address beneficiary, uint256 newRevenueShare) external override onlyAdmin whenNotPaused { - Checkpoint storage checkpoint = checkpoints[beneficiary]; - ( - uint256 amount, - uint256 prevRevenueShare, - uint256 prevReward, - uint256 prevRewardPerPoint - ) = ( - checkpoint.amount, - checkpoint.revenueShare, - checkpoint.unclaimedReward, - checkpoint.rewardPerPoint - ); - require(prevRevenueShare != 0, "RevenueSharing: account is not added"); - require(newRevenueShare > 0 && newRevenueShare <= 1e4 && prevRevenueShare != newRevenueShare, "RevenueSharing: invalid revenue share"); - - // SLOAD for gas optimization - uint128 newRewardPerPoint = rewardPerPoint; - - // calculate new reward - uint256 prevPoints = amount.mul(prevRevenueShare); - uint256 newReward = _calculateReward(prevPoints, prevReward, prevRewardPerPoint, newRewardPerPoint); - - // update total points and checkpoint - totalPoints = uint256(totalPoints).sub(prevPoints).add(amount.mul(newRevenueShare)).toUint128(); - ( - checkpoint.revenueShare, - checkpoint.rewardPerPoint, - checkpoint.unclaimedReward - ) = ( - newRevenueShare.toUint128(), - newRewardPerPoint, - newReward.toUint128() - ); - emit RevenueShareUpdated(beneficiary, newRevenueShare, newReward); - } - - /** - * @dev See {IRevenueSharing-increaseAmount}. - */ - function increaseAmount(address beneficiary, uint256 addedAmount) external override whenNotPaused { - require(msg.sender == pool || hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "RevenueSharing: access denied"); - require(addedAmount > 0, "RevenueSharing: invalid amount"); - - Checkpoint storage checkpoint = checkpoints[beneficiary]; - ( - uint256 prevAmount, - uint256 revenueShare, - uint256 prevReward, - uint256 prevRewardPerPoint - ) = ( - checkpoint.amount, - checkpoint.revenueShare, - checkpoint.unclaimedReward, - checkpoint.rewardPerPoint - ); - require(revenueShare != 0, "RevenueSharing: account is not added"); - - // SLOAD for gas optimization - uint128 newRewardPerPoint = rewardPerPoint; - - // calculate new reward - uint256 prevPoints = prevAmount.mul(revenueShare); - uint256 newReward = _calculateReward(prevPoints, prevReward, prevRewardPerPoint, newRewardPerPoint); - - // update total points and checkpoint - uint256 newAmount = prevAmount.add(addedAmount); - totalPoints = uint256(totalPoints).sub(prevPoints).add(newAmount.mul(revenueShare)).toUint128(); - ( - checkpoint.amount, - checkpoint.rewardPerPoint, - checkpoint.unclaimedReward - ) = ( - newAmount.toUint128(), - newRewardPerPoint, - newReward.toUint128() - ); - emit AmountIncreased(beneficiary, addedAmount, newReward); - } - - /** - * @dev See {IRevenueSharing-pointsOf}. - */ - function pointsOf(address beneficiary) external view override returns (uint256) { - Checkpoint storage checkpoint = checkpoints[beneficiary]; - if (checkpoint.amount <= 0) { - return 0; - } - return uint256(checkpoint.amount).mul(checkpoint.revenueShare); - } - - /** - * @dev See {IRevenueSharing-rewardOf}. - */ - function rewardOf(address beneficiary) external view override returns (uint256) { - Checkpoint storage checkpoint = checkpoints[beneficiary]; - return _calculateReward( - uint256(checkpoint.amount).mul(checkpoint.revenueShare), - checkpoint.unclaimedReward, - checkpoint.rewardPerPoint, - rewardPerPoint - ); - } - - /** - * @dev See {IRevenueSharing-collectReward}. - */ - function collectReward(address beneficiary) external override whenNotPaused { - _collectReward(beneficiary); - } - - /** - * @dev See {IRevenueSharing-collectRewards}. - */ - function collectRewards(address[] memory beneficiaries) external override whenNotPaused { - for (uint256 i = 0; i < beneficiaries.length; i++) { - _collectReward(beneficiaries[i]); - } - } - - function _collectReward(address beneficiary) internal { - Checkpoint storage checkpoint = checkpoints[beneficiary]; - ( - uint256 amount, - uint256 revenueShare, - uint256 prevReward, - uint256 prevRewardPerPoint - ) = ( - checkpoint.amount, - checkpoint.revenueShare, - checkpoint.unclaimedReward, - checkpoint.rewardPerPoint - ); - require(revenueShare != 0, "RevenueSharing: account is not added"); - - // SLOAD for gas optimization - uint128 newRewardPerPoint = rewardPerPoint; - - // calculate new reward - uint256 accountPoints = amount.mul(revenueShare); - uint256 newReward = _calculateReward( - accountPoints, - prevReward, - prevRewardPerPoint, - newRewardPerPoint - ); - - (checkpoint.rewardPerPoint, checkpoint.unclaimedReward) = (newRewardPerPoint, 0); - - if (newReward > 0) { - rewardEthToken.safeTransfer(beneficiary, newReward); - } - - emit RewardCollected(msg.sender, beneficiary, newReward); - } - - /** - * @dev See {IRevenueSharing-updateRewards}. - */ - function updateRewards(uint256 totalReward, uint256 totalStaked) external override whenNotPaused returns (uint256) { - require(msg.sender == address(rewardEthToken), "RevenueSharing: access denied"); - - if (totalReward == 0 || totalStaked == 0) { - // nothing to update - return 0; - } - - // SLOAD for gas optimization - (uint256 _totalPoints, uint256 prevRewardPerPoint) = (totalPoints, rewardPerPoint); - if (_totalPoints == 0) { - return 0; - } - - // calculate period reward - uint256 periodReward = totalReward.mul(_totalPoints).div(totalStaked.mul(1e4)); - - // update reward per point - uint256 newRewardPerPoint = prevRewardPerPoint.add(periodReward.mul(1e22).div(_totalPoints)); - rewardPerPoint = newRewardPerPoint.toUint128(); - - emit RewardsUpdated(msg.sender, periodReward, newRewardPerPoint); - return periodReward; - } - - function _calculateReward( - uint256 points, - uint256 prevReward, - uint256 prevRewardPerPoint, - uint256 newRewardPerPoint - ) - internal pure returns (uint256 newReward) - { - if (newRewardPerPoint > prevRewardPerPoint) { - newReward = points.mul(newRewardPerPoint.sub(prevRewardPerPoint)).div(1e22); - } - - if (prevReward > 0) { - newReward = newReward.add(prevReward); - } - } -} diff --git a/contracts/Roles.sol b/contracts/Roles.sol new file mode 100644 index 00000000..b5bc418d --- /dev/null +++ b/contracts/Roles.sol @@ -0,0 +1,70 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +pragma solidity 0.7.5; + +import "./presets/OwnablePausableUpgradeable.sol"; +import "./interfaces/IRoles.sol"; + +/** + * @title Roles + * + * @dev Roles contract assigns roles to the accounts for the rewards distribution. + */ +contract Roles is IRoles, OwnablePausableUpgradeable { + /** + * @dev See {IRoles-initialize}. + */ + function initialize(address admin) external override initializer { + __OwnablePausableUpgradeable_init(admin); + } + + /** + * @dev See {IRoles-setOperator}. + */ + function setOperator(address account, uint256 revenueShare) external override onlyAdmin whenNotPaused { + require(account != address(0), "Roles: account is the zero address"); + require(revenueShare <= 1e4, "Roles: invalid revenue share"); + emit OperatorUpdated(account, revenueShare); + } + + /** + * @dev See {IRoles-removeOperator}. + */ + function removeOperator(address account) external override onlyAdmin whenNotPaused { + require(account != address(0), "Roles: account is the zero address"); + emit OperatorRemoved(account); + } + + /** + * @dev See {IRoles-setPartner}. + */ + function setPartner(address account, uint256 revenueShare) external override onlyAdmin whenNotPaused { + require(account != address(0), "Roles: account is the zero address"); + require(revenueShare <= 1e4, "Roles: invalid revenue share"); + emit PartnerUpdated(account, revenueShare); + } + + /** + * @dev See {IRoles-removePartner}. + */ + function removePartner(address account) external override onlyAdmin whenNotPaused { + require(account != address(0), "Roles: account is the zero address"); + emit PartnerRemoved(account); + } + + /** + * @dev See {IRoles-addReferrer}. + */ + function addReferrer(address account) external override onlyAdmin whenNotPaused { + require(account != address(0), "Roles: account is the zero address"); + emit ReferrerAdded(account); + } + + /** + * @dev See {IRoles-removeReferrer}. + */ + function removeReferrer(address account) external override onlyAdmin whenNotPaused { + require(account != address(0), "Roles: account is the zero address"); + emit ReferrerRemoved(account); + } +} diff --git a/contracts/interfaces/IMerkleDistributor.sol b/contracts/interfaces/IMerkleDistributor.sol index 9d5f6f98..10b8a540 100644 --- a/contracts/interfaces/IMerkleDistributor.sol +++ b/contracts/interfaces/IMerkleDistributor.sol @@ -23,16 +23,16 @@ interface IMerkleDistributor { ); /** - * @dev Event for tracking SWISE token distributions. - * @param sender - address of the new transaction sender. + * @dev Event for tracking periodic tokens distributions. + * @param from - address to transfer the tokens from. * @param token - address of the token. - * @param beneficiary - address of the beneficiary, the SWISE allocation is added to. - * @param amount - amount of tokens distributed. + * @param beneficiary - address of the beneficiary, the allocation is added to. + * @param amount - amount of tokens to distribute. * @param startBlock - start block of the tokens distribution. * @param endBlock - end block of the tokens distribution. */ - event DistributionAdded( - address indexed sender, + event PeriodicDistributionAdded( + address indexed from, address indexed token, address indexed beneficiary, uint256 amount, @@ -40,6 +40,22 @@ interface IMerkleDistributor { uint256 endBlock ); + /** + * @dev Event for tracking one time tokens distributions. + * @param from - address to transfer the tokens from. + * @param origin - predefined origin address to label the distribution. + * @param token - address of the token. + * @param amount - amount of tokens to distribute. + * @param rewardsLink - link to the file where rewards are stored. + */ + event OneTimeDistributionAdded( + address indexed from, + address indexed origin, + address indexed token, + uint256 amount, + string rewardsLink + ); + /** * @dev Event for tracking tokens' claims. * @param account - the address of the user that has claimed the tokens. @@ -70,7 +86,8 @@ interface IMerkleDistributor { function lastUpdateBlockNumber() external view returns (uint256); /** - * @dev Function for upgrading the MerkleDistributor contract. + * @dev Function for upgrading the MerkleDistributor contract. The `initialize` function must be defined + * if deploying contract for the first time that will initialize the state variables above. * @param _oracles - address of the Oracles contract. */ function upgrade(address _oracles) external; @@ -90,19 +107,37 @@ interface IMerkleDistributor { function setMerkleRoot(bytes32 newMerkleRoot, string calldata merkleProofs) external; /** - * @dev Function for adding tokens distribution. + * @dev Function for distributing tokens periodically for the number of blocks. + * @param from - address of the account to transfer the tokens from. * @param token - address of the token. * @param beneficiary - address of the beneficiary. * @param amount - amount of tokens to distribute. * @param durationInBlocks - duration in blocks when the token distribution should be stopped. */ - function distribute( + function distributePeriodically( + address from, address token, address beneficiary, uint256 amount, uint256 durationInBlocks ) external; + /** + * @dev Function for distributing tokens one time. + * @param from - address of the account to transfer the tokens from. + * @param origin - predefined origin address to label the distribution. + * @param token - address of the token. + * @param amount - amount of tokens to distribute. + * @param rewardsLink - link to the file where rewards for the accounts are stored. + */ + function distributeOneTime( + address from, + address origin, + address token, + uint256 amount, + string memory rewardsLink + ) external; + /** * @dev Function for checking whether the tokens were already claimed. * @param index - the index of the user that is part of the merkle root. diff --git a/contracts/interfaces/IOracles.sol b/contracts/interfaces/IOracles.sol index 06bcaa99..93c59d34 100644 --- a/contracts/interfaces/IOracles.sol +++ b/contracts/interfaces/IOracles.sol @@ -9,6 +9,12 @@ pragma abicoder v2; * @dev Interface of the Oracles contract. */ interface IOracles { + /** + * @dev Event for tracking the Oracles contract initialization. + * @param rewardsNonce - rewards nonce the contract was initialized with. + */ + event Initialized(uint256 rewardsNonce); + /** * @dev Event for tracking oracle rewards votes. * @param sender - address of the transaction sender. diff --git a/contracts/interfaces/IPool.sol b/contracts/interfaces/IPool.sol index 3d467f22..78e0e6ed 100644 --- a/contracts/interfaces/IPool.sol +++ b/contracts/interfaces/IPool.sol @@ -71,18 +71,26 @@ interface IPool { event PendingValidatorsLimitUpdated(uint256 pendingValidatorsLimit, address sender); /** - * @dev Function for upgrading the Pools contract. + * @dev Event for tracking added deposits with partner. + * @param partner - address of the partner. + * @param amount - the amount added. + */ + event StakedWithPartner(address indexed partner, uint256 amount); + + /** + * @dev Event for tracking added deposits with referrer. + * @param referrer - address of the referrer. + * @param amount - the amount added. + */ + event StakedWithReferrer(address indexed referrer, uint256 amount); + + /** + * @dev Function for upgrading the Pools contract. The `initialize` function must be defined if deploying contract + * for the first time that will initialize the state variables above. * @param _poolValidators - address of the PoolValidators contract. * @param _oracles - address of the Oracles contract. - * @param _partnersRevenueSharing - address of the PartnersRevenueSharing contract. - * @param _operatorsRevenueSharing - address of the OperatorsRevenueSharing contract. */ - function upgrade( - address _poolValidators, - address _oracles, - address _partnersRevenueSharing, - address _operatorsRevenueSharing - ) external; + function upgrade(address _poolValidators, address _oracles) external; /** * @dev Function for getting the total validator deposit. @@ -172,18 +180,32 @@ interface IPool { /** * @dev Function for staking ether with the partner that will receive the revenue share from the protocol fee. - * @param partner - address of partner who will get its contributed amount increased. + * @param partner - address of partner who will get the revenue share. */ function stakeWithPartner(address partner) external payable; /** * @dev Function for staking ether with the partner that will receive the revenue share from the protocol fee * and the different tokens' recipient. - * @param partner - address of partner who will get its contributed amount increased. + * @param partner - address of partner who will get the revenue share. * @param recipient - address of the tokens recipient. */ function stakeWithPartnerOnBehalf(address partner, address recipient) external payable; + /** + * @dev Function for staking ether with the referrer who will receive the one time bonus. + * @param referrer - address of referrer who will get its referral bonus. + */ + function stakeWithReferrer(address referrer) external payable; + + /** + * @dev Function for staking ether with the referrer who will receive the one time bonus + * and the different tokens' recipient. + * @param referrer - address of referrer who will get its referral bonus. + * @param recipient - address of the tokens recipient. + */ + function stakeWithReferrerOnBehalf(address referrer, address recipient) external payable; + /** * @dev Function for minting account's tokens for the specific validator index. * @param account - account address to activate the tokens for. diff --git a/contracts/interfaces/IRevenueSharing.sol b/contracts/interfaces/IRevenueSharing.sol deleted file mode 100644 index e8bd2fed..00000000 --- a/contracts/interfaces/IRevenueSharing.sol +++ /dev/null @@ -1,178 +0,0 @@ -// SPDX-License-Identifier: AGPL-3.0-only - -pragma solidity 0.7.5; - -/** - * @dev Interface of the RevenueSharing contract. - */ -interface IRevenueSharing { - /** - * @dev Structure for storing account's checkpoint. - * @param amount - total amount contributed. - * @param revenueShare - revenue share percentage (up to 10000 (100.00%). - * @param unclaimedReward - total unclaimed reward. - * @param rewardPerPoint - reward per point at the last checkpoint. - */ - struct Checkpoint { - uint128 amount; - uint128 revenueShare; - uint128 unclaimedReward; - uint128 rewardPerPoint; - } - - /** - * @dev Event for tracking new accounts. - * @param beneficiary - address where the reward will be transferred. - * @param revenueShare - revenue share percentage. - */ - event AccountAdded( - address indexed beneficiary, - uint128 indexed revenueShare - ); - - /** - * @dev Event for tracking removed accounts. - * @param beneficiary - address where the reward has been transferred. - * @param reward - transferred unclaimed reward. - */ - event AccountRemoved( - address indexed beneficiary, - uint256 reward - ); - - /** - * @dev Event for tracking revenue share updates. - * @param beneficiary - address of the beneficiary. - * @param revenueShare - new revenue share. - * @param reward - unclaimed reward. - */ - event RevenueShareUpdated( - address indexed beneficiary, - uint256 indexed revenueShare, - uint256 reward - ); - - /** - * @dev Event for tracking increase of the contributed amount. - * @param beneficiary - address of the beneficiary. - * @param amount - contributed amount. - * @param reward - withdrawn reward. - */ - event AmountIncreased( - address indexed beneficiary, - uint256 amount, - uint256 reward - ); - - /** - * @dev Event for tracking when rewards are collected. - * @param sender - address of the transaction sender. - * @param beneficiary - address of the beneficiary. - * @param reward - withdrawn reward. - */ - event RewardCollected( - address indexed sender, - address indexed beneficiary, - uint256 reward - ); - - /** - * @dev Event for tracking total rewards update. - * @param sender - address of the transaction sender. - * @param periodReward - period reward. - * @param rewardPerPoint - new reward per point. - */ - event RewardsUpdated( - address indexed sender, - uint256 periodReward, - uint256 rewardPerPoint - ); - - /** - * @dev Function for getting the total allocated points. - */ - function totalPoints() external view returns (uint128); - - /** - * @dev Function for getting the current reward per point. - */ - function rewardPerPoint() external view returns (uint128); - - /** - * @dev Constructor for initializing the RevenueSharing contract. - * @param _admin - address of the contract admin. - * @param _pool - address of the Pool contract. - * @param _rewardEthToken - address of the RewardEthToken contract. - */ - function initialize(address _admin, address _pool, address _rewardEthToken) external; - - /** - * @dev Function for retrieving beneficiary's current checkpoint. - * @param beneficiary - address of the beneficiary account. - */ - function checkpoints(address beneficiary) external view returns (uint128, uint128, uint128, uint128); - - /** - * @dev Function for checking whether the beneficiary address is added. - * @param beneficiary - address of the beneficiary account. - */ - function isAdded(address beneficiary) external view returns (bool); - - /** - * @dev Function for adding new account. - * @param beneficiary - the address of the beneficiary, where the rewards are directed. - * @param revenueShare - the revenue share that the account will earn (up to 10000 (100.00%)). - */ - function addAccount(address beneficiary, uint128 revenueShare) external; - - /** - * @dev Function for removing account. - * @param beneficiary - the address of the beneficiary, where the rewards are directed. - */ - function removeAccount(address beneficiary) external; - - /** - * @dev Function for updating account's revenue share. - * @param beneficiary - the address of the beneficiary to update the revenue share for. - * @param revenueShare - the new revenue share. - */ - function updateRevenueShare(address beneficiary, uint256 revenueShare) external; - - /** - * @dev Function for increasing account's contributed amount. - * @param beneficiary - the address of the beneficiary to update the amount for. - * @param amount - the added amount. - */ - function increaseAmount(address beneficiary, uint256 amount) external; - - /** - * @dev Function for collecting reward. Can be executed by anyone, rewards are directed to beneficiary. - * @param beneficiary - the address of the beneficiary to collect rewards for. - */ - function collectReward(address beneficiary) external; - - /** - * @dev Function for collecting rewards for several beneficiaries in single transaction. - * @param beneficiaries - the list of beneficiaries to collect the rewards for. - */ - function collectRewards(address[] calldata beneficiaries) external; - - /** - * @dev Function for updating rewards. Can be only be called by the RewardEthToken contract. - * @param totalReward - the total amount to split the reward from. - * @param totalStaked - the total amount staked used for reward per point calculation. - */ - function updateRewards(uint256 totalReward, uint256 totalStaked) external returns (uint256); - - /** - * @dev Function for checking the points of the beneficiary. - * @param beneficiary - the address of the beneficiary to check the points for. - */ - function pointsOf(address beneficiary) external view returns (uint256); - - /** - * @dev Function for checking the reward of the beneficiary. - * @param beneficiary - the address of the beneficiary to check the reward for. - */ - function rewardOf(address beneficiary) external view returns (uint256); -} diff --git a/contracts/interfaces/IRewardEthToken.sol b/contracts/interfaces/IRewardEthToken.sol index fe3b0a4d..79919915 100644 --- a/contracts/interfaces/IRewardEthToken.sol +++ b/contracts/interfaces/IRewardEthToken.sol @@ -8,6 +8,16 @@ import "@openzeppelin/contracts-upgradeable/token/ERC20/IERC20Upgradeable.sol"; * @dev Interface of the RewardEthToken contract. */ interface IRewardEthToken is IERC20Upgradeable { + /** + * @dev Structure for storing information about user reward checkpoint. + * @param rewardPerToken - user reward per token. + * @param reward - user reward checkpoint. + */ + struct Checkpoint { + uint128 reward; + uint128 rewardPerToken; + } + /** * @dev Event for tracking updated protocol fee recipient. * @param recipient - address of the new fee recipient. @@ -27,16 +37,6 @@ interface IRewardEthToken is IERC20Upgradeable { */ event RewardsToggled(address indexed account, bool isDisabled); - /** - * @dev Structure for storing information about user reward checkpoint. - * @param rewardPerToken - user reward per token. - * @param reward - user reward checkpoint. - */ - struct Checkpoint { - uint128 reward; - uint128 rewardPerToken; - } - /** * @dev Event for tracking rewards update by oracles. * @param periodRewards - rewards since the last update. @@ -54,18 +54,11 @@ interface IRewardEthToken is IERC20Upgradeable { ); /** - * @dev Event for tracking revenue shares updates. - * @param revenueShares - new revenue shares. - */ - event RevenueSharesUpdated(address[] revenueShares); - - /** - * @dev Function for upgrading the RewardEthToken contract. + * @dev Function for upgrading the RewardEthToken contract. The `initialize` function must be defined + * if deploying contract for the first time that will initialize the state variables above. * @param _oracles - address of the Oracles contract. - * @param _operatorsRevenueSharing - address of the Operators Revenue Sharing contract. - * @param _partnersRevenueSharing - address of the Partners Revenue Sharing contract. */ - function upgrade(address _oracles, address _operatorsRevenueSharing, address _partnersRevenueSharing) external; + function upgrade(address _oracles) external; /** * @dev Function for getting the address of the merkle distributor. diff --git a/contracts/interfaces/IRoles.sol b/contracts/interfaces/IRoles.sol new file mode 100644 index 00000000..00116bf5 --- /dev/null +++ b/contracts/interfaces/IRoles.sol @@ -0,0 +1,90 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +pragma solidity 0.7.5; + +/** + * @dev Interface of the Roles contract. + */ +interface IRoles { + /** + * @dev Event for tracking operators' updates. + * @param operator - address of the operator. + * @param revenueShare - the share of the protocol's revenue to distribute. + */ + event OperatorUpdated(address indexed operator, uint256 revenueShare); + + /** + * @dev Event for tracking operators' removals. + * @param operator - address of the operator. + */ + event OperatorRemoved(address indexed operator); + + /** + * @dev Event for tracking partners' updates. + * @param partner - address of the partner. + * @param revenueShare - the share of the protocol's revenue to distribute. + */ + event PartnerUpdated(address indexed partner, uint256 revenueShare); + + /** + * @dev Event for tracking partners' removals. + * @param partner - address of the partner. + */ + event PartnerRemoved(address indexed partner); + + /** + * @dev Event for tracking referrers' additions. + * @param referrer - address of the referrer. + */ + event ReferrerAdded(address indexed referrer); + + /** + * @dev Event for tracking referrers' removals. + * @param referrer - address of the referrer. + */ + event ReferrerRemoved(address indexed referrer); + + /** + * @dev Constructor for initializing the Roles contract. + * @param admin - address of the contract admin. + */ + function initialize(address admin) external; + + /** + * @dev Function for updating the operator. Can only be called by account with `admin` privilege. + * @param account - address of the account to update. + * @param revenueShare - the share of the protocol's revenue to distribute to the operator based on its total validators. + */ + function setOperator(address account, uint256 revenueShare) external; + + /** + * @dev Function for removing the operator. Can only be called by account with `admin` privilege. + * @param account - address of the account to remove. + */ + function removeOperator(address account) external; + + /** + * @dev Function for setting the partner. Can only be called by account with `admin` privilege. + * @param account - address of the account to update. + * @param revenueShare - the share of the protocol's revenue to distribute to the partner based on its contributed ETH amount. + */ + function setPartner(address account, uint256 revenueShare) external; + + /** + * @dev Function for removing the partner. Can only be called by account with `admin` privilege. + * @param account - address of the account to remove. + */ + function removePartner(address account) external; + + /** + * @dev Function for adding the referrer. Can only be called by account with `admin` privilege. + * @param account - address of the account to add. + */ + function addReferrer(address account) external; + + /** + * @dev Function for removing the referrer. Can only be called by account with `admin` privilege. + * @param account - address of the account to remove. + */ + function removeReferrer(address account) external; +} diff --git a/contracts/merkles/MerkleDistributor.sol b/contracts/merkles/MerkleDistributor.sol index 9fefea2c..378e63dc 100644 --- a/contracts/merkles/MerkleDistributor.sol +++ b/contracts/merkles/MerkleDistributor.sol @@ -37,8 +37,6 @@ contract MerkleDistributor is IMerkleDistributor, OwnablePausableUpgradeable { /** * @dev See {IMerkleDistributor-upgrade}. - * The `initialize` must be called before upgrading in previous implementation contract: - * https://github.com/stakewise/contracts/blob/v1.3.0/contracts/collectors/Pool.sol#L55 */ function upgrade(address _oracles) external override onlyAdmin whenPaused { require(address(oracles) == 0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514, "MerkleDistributor: already upgraded"); @@ -57,17 +55,16 @@ contract MerkleDistributor is IMerkleDistributor, OwnablePausableUpgradeable { */ function setMerkleRoot(bytes32 newMerkleRoot, string calldata newMerkleProofs) external override { require(msg.sender == address(oracles), "MerkleDistributor: access denied"); - if (newMerkleRoot != merkleRoot) { - merkleRoot = newMerkleRoot; - emit MerkleRootUpdated(msg.sender, newMerkleRoot, newMerkleProofs); - } + merkleRoot = newMerkleRoot; lastUpdateBlockNumber = block.number; + emit MerkleRootUpdated(msg.sender, newMerkleRoot, newMerkleProofs); } /** - * @dev See {IMerkleDistributor-distribute}. + * @dev See {IMerkleDistributor-distributePeriodically}. */ - function distribute( + function distributePeriodically( + address from, address token, address beneficiary, uint256 amount, @@ -81,8 +78,26 @@ contract MerkleDistributor is IMerkleDistributor, OwnablePausableUpgradeable { uint256 endBlock = startBlock + durationInBlocks; require(endBlock > startBlock, "MerkleDistributor: invalid blocks duration"); - IERC20Upgradeable(token).safeTransferFrom(msg.sender, address(this), amount); - emit DistributionAdded(msg.sender, token, beneficiary, amount, startBlock, endBlock); + IERC20Upgradeable(token).safeTransferFrom(from, address(this), amount); + emit PeriodicDistributionAdded(from, token, beneficiary, amount, startBlock, endBlock); + } + + /** + * @dev See {IMerkleDistributor-distributeOneTime}. + */ + function distributeOneTime( + address from, + address origin, + address token, + uint256 amount, + string memory rewardsLink + ) + external override onlyAdmin + { + require(amount > 0, "MerkleDistributor: invalid amount"); + + IERC20Upgradeable(token).safeTransferFrom(from, address(this), amount); + emit OneTimeDistributionAdded(from, origin, token, amount, rewardsLink); } /** diff --git a/contracts/pool/Pool.sol b/contracts/pool/Pool.sol index fdf17599..086d408b 100644 --- a/contracts/pool/Pool.sol +++ b/contracts/pool/Pool.sol @@ -9,7 +9,6 @@ import "../interfaces/IStakedEthToken.sol"; import "../interfaces/IDepositContract.sol"; import "../interfaces/IPoolValidators.sol"; import "../interfaces/IPool.sol"; -import "../interfaces/IRevenueSharing.sol"; import "../interfaces/IPoolValidators.sol"; /** @@ -56,32 +55,15 @@ contract Pool is IPool, OwnablePausableUpgradeable { // @dev Pending validators percent limit. If it's not exceeded tokens can be minted immediately. uint256 public override pendingValidatorsLimit; - // @dev Address of the Partners Revenue Sharing contract. - IRevenueSharing private partnersRevenueSharing; - - // @dev Address of the Operators Revenue Sharing contract. - IRevenueSharing private operatorsRevenueSharing; - /** * @dev See {IPool-upgrade}. - * The `initialize` function must be defined if deploying contract - * for the first time that will initialize the state variables above. */ - function upgrade( - address _poolValidators, - address _oracles, - address _partnersRevenueSharing, - address _operatorsRevenueSharing - ) - external override onlyAdmin whenPaused - { - require(address(partnersRevenueSharing) == address(0), "Pool: already upgraded"); + function upgrade(address _poolValidators, address _oracles) external override onlyAdmin whenPaused { + require(address(oracles) == 0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514, "Pool: already upgraded"); // set contract addresses validators = IPoolValidators(_poolValidators); oracles = _oracles; - partnersRevenueSharing = IRevenueSharing(_partnersRevenueSharing); - operatorsRevenueSharing = IRevenueSharing(_operatorsRevenueSharing); } /** @@ -140,9 +122,7 @@ contract Pool is IPool, OwnablePausableUpgradeable { function stakeWithPartner(address partner) external payable override { // stake amount _stake(msg.sender, msg.value); - - // increase revenue sharing amount for partner - partnersRevenueSharing.increaseAmount(partner, msg.value); + emit StakedWithPartner(partner, msg.value); } /** @@ -151,9 +131,25 @@ contract Pool is IPool, OwnablePausableUpgradeable { function stakeWithPartnerOnBehalf(address partner, address recipient) external payable override { // stake amount _stake(recipient, msg.value); + emit StakedWithPartner(partner, msg.value); + } - // increase revenue sharing amount for partner - partnersRevenueSharing.increaseAmount(partner, msg.value); + /** + * @dev See {IPool-stakeWithReferrer}. + */ + function stakeWithReferrer(address referrer) external payable override { + // stake amount + _stake(msg.sender, msg.value); + emit StakedWithReferrer(referrer, msg.value); + } + + /** + * @dev See {IPool-stakeWithReferrerOnBehalf}. + */ + function stakeWithReferrerOnBehalf(address referrer, address recipient) external payable override { + // stake amount + _stake(recipient, msg.value); + emit StakedWithReferrer(referrer, msg.value); } function _stake(address recipient, uint256 value) internal whenNotPaused { @@ -253,12 +249,6 @@ contract Pool is IPool, OwnablePausableUpgradeable { // update number of pending validators pendingValidators = pendingValidators.add(1); - - // update operator's revenue sharing - if (operatorsRevenueSharing.isAdded(depositData.operator)) { - operatorsRevenueSharing.increaseAmount(depositData.operator, VALIDATOR_TOTAL_DEPOSIT); - } - emit ValidatorRegistered(depositData.publicKey, depositData.operator); // finalize validator registration diff --git a/contracts/pool/PoolValidators.sol b/contracts/pool/PoolValidators.sol index a8357a5f..60e0afb0 100644 --- a/contracts/pool/PoolValidators.sol +++ b/contracts/pool/PoolValidators.sol @@ -69,6 +69,7 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran external override onlyAdmin whenNotPaused { require(_operator != address(0), "PoolValidators: invalid operator"); + // merkle roots and proofs must be validated off chain before submitting the transaction require( initializeMerkleRoot != "" && finalizeMerkleRoot != "" && finalizeMerkleRoot != initializeMerkleRoot, "PoolValidators: invalid merkle roots" diff --git a/contracts/tokens/RewardEthToken.sol b/contracts/tokens/RewardEthToken.sol index 253913fc..592d0078 100644 --- a/contracts/tokens/RewardEthToken.sol +++ b/contracts/tokens/RewardEthToken.sol @@ -9,7 +9,6 @@ import "../interfaces/IStakedEthToken.sol"; import "../interfaces/IRewardEthToken.sol"; import "../interfaces/IMerkleDistributor.sol"; import "../interfaces/IOracles.sol"; -import "../interfaces/IRevenueSharing.sol"; import "./ERC20PermitUpgradeable.sol"; /** @@ -52,20 +51,12 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per // @dev Maps account address to whether rewards are distributed through the merkle distributor. mapping(address => bool) public override rewardsDisabled; - // @dev Address of the Operators Revenue Sharing contract. - IRevenueSharing private operatorsRevenueSharing; - - // @dev Address of the Partners Revenue Sharing contract. - IRevenueSharing private partnersRevenueSharing; - /** * @dev See {IRewardEthToken-upgrade}. */ - function upgrade(address _oracles, address _operatorsRevenueSharing, address _partnersRevenueSharing) external override onlyAdmin whenPaused { - require(address(operatorsRevenueSharing) == address(0), "RewardEthToken: already upgraded"); + function upgrade(address _oracles) external override onlyAdmin whenPaused { + require(address(oracles) == 0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514, "RewardEthToken: already upgraded"); oracles = _oracles; - operatorsRevenueSharing = IRevenueSharing(_operatorsRevenueSharing); - partnersRevenueSharing = IRevenueSharing(_partnersRevenueSharing); } /** @@ -74,7 +65,6 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per function setRewardsDisabled(address account, bool isDisabled) external override { require(msg.sender == address(stakedEthToken), "RewardEthToken: access denied"); require(rewardsDisabled[account] != isDisabled, "RewardEthToken: value did not change"); - require(block.number > lastUpdateBlockNumber, "RewardEthToken: cannot disable during rewards update"); uint128 _rewardPerToken = rewardPerToken; checkpoints[account] = Checkpoint({ @@ -90,6 +80,7 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per * @dev See {IRewardEthToken-setProtocolFeeRecipient}. */ function setProtocolFeeRecipient(address recipient) external override onlyAdmin { + // can be address(0) to distribute fee through the Merkle Distributor protocolFeeRecipient = recipient; emit ProtocolFeeRecipientUpdated(recipient); } @@ -220,13 +211,15 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per require(msg.sender == oracles, "RewardEthToken: access denied"); uint256 periodRewards = newTotalRewards.sub(totalRewards); - if (periodRewards == 0) return; + if (periodRewards == 0) { + lastUpdateBlockNumber = block.number; + emit RewardsUpdated(0, newTotalRewards, rewardPerToken, 0, 0); + } // calculate protocol reward and new reward per token amount uint256 protocolReward = periodRewards.mul(protocolFee).div(1e4); uint256 prevRewardPerToken = rewardPerToken; - uint256 totalStaked = stakedEthToken.totalDeposits(); - uint256 newRewardPerToken = prevRewardPerToken.add(periodRewards.sub(protocolReward).mul(1e18).div(totalStaked)); + uint256 newRewardPerToken = prevRewardPerToken.add(periodRewards.sub(protocolReward).mul(1e18).div(stakedEthToken.totalDeposits())); uint128 newRewardPerToken128 = newRewardPerToken.toUint128(); // store previous distributor rewards for period reward calculation @@ -235,18 +228,15 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per // update total rewards and new reward per token (totalRewards, rewardPerToken) = (newTotalRewards.toUint128(), newRewardPerToken128); - // update revenue shares - uint256 leftReward = _updateRevenueShares(protocolReward, totalStaked, newRewardPerToken); - uint256 newDistributorBalance = _balanceOf(address(0), newRewardPerToken); address _protocolFeeRecipient = protocolFeeRecipient; - if (_protocolFeeRecipient == address(0) && leftReward > 0) { - // add left protocol reward to the merkle distributor - newDistributorBalance = newDistributorBalance.add(leftReward); - } else if (leftReward > 0) { + if (_protocolFeeRecipient == address(0) && protocolReward > 0) { + // add protocol reward to the merkle distributor + newDistributorBalance = newDistributorBalance.add(protocolReward); + } else if (protocolReward > 0) { // update fee recipient's checkpoint and add its period reward checkpoints[_protocolFeeRecipient] = Checkpoint({ - reward: _balanceOf(_protocolFeeRecipient, newRewardPerToken).add(leftReward).toUint128(), + reward: _balanceOf(_protocolFeeRecipient, newRewardPerToken).add(protocolReward).toUint128(), rewardPerToken: newRewardPerToken128 }); } @@ -265,37 +255,10 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per newTotalRewards, newRewardPerToken, newDistributorBalance.sub(prevDistributorBalance), - _protocolFeeRecipient == address(0) ? leftReward: 0 + _protocolFeeRecipient == address(0) ? protocolReward: 0 ); } - function _updateRevenueShares(uint256 protocolReward, uint256 totalStaked, uint256 newRewardPerToken) internal returns (uint256) { - // SLOAD for gas optimization - (IRevenueSharing _operatorsRevenueSharing, IRevenueSharing _partnersRevenueSharing) = (operatorsRevenueSharing, partnersRevenueSharing); - - uint128 newRewardPerToken128 = newRewardPerToken.toUint128(); - - // update operators revenue sharing - uint256 operatorsCut = _operatorsRevenueSharing.updateRewards(protocolReward, totalStaked); - if (operatorsCut > 0) { - checkpoints[address(_operatorsRevenueSharing)] = Checkpoint({ - reward: _balanceOf(address(_operatorsRevenueSharing), newRewardPerToken).add(operatorsCut).toUint128(), - rewardPerToken: newRewardPerToken128 - }); - } - - // update partners revenue sharing - uint256 partnersCut = _partnersRevenueSharing.updateRewards(protocolReward.sub(operatorsCut), totalStaked); - if (partnersCut > 0) { - checkpoints[address(_partnersRevenueSharing)] = Checkpoint({ - reward: _balanceOf(address(_partnersRevenueSharing), newRewardPerToken).add(partnersCut).toUint128(), - rewardPerToken: newRewardPerToken128 - }); - } - - return protocolReward.sub(operatorsCut).sub(partnersCut); - } - /** * @dev See {IRewardEthToken-claim}. */ diff --git a/deployments/index.js b/deployments/index.js index 6b229af0..f5531237 100644 --- a/deployments/index.js +++ b/deployments/index.js @@ -44,8 +44,6 @@ async function deployAndInitializeOracles(poolValidatorsContractAddress) { contracts.pool, poolValidatorsContractAddress, contracts.merkleDistributor, - contractSettings.rewardVotesSources, - contractSettings.validatorVotesSources, ], { kind: 'transparent', @@ -55,15 +53,11 @@ async function deployAndInitializeOracles(poolValidatorsContractAddress) { return proxy.address; } -async function deployAndInitializeRevenueSharing() { - const RevenueSharing = await ethers.getContractFactory('RevenueSharing'); - const proxy = await upgrades.deployProxy( - RevenueSharing, - [contractSettings.admin, contracts.pool, contracts.rewardEthToken], - { - kind: 'transparent', - } - ); +async function deployAndInitializeRoles() { + const Roles = await ethers.getContractFactory('Roles'); + const proxy = await upgrades.deployProxy(Roles, [contractSettings.admin], { + kind: 'transparent', + }); await proxy.deployed(); return proxy.address; } @@ -95,9 +89,7 @@ async function upgradeMerkleDistributor(oraclesContractAddress) { async function upgradePool( poolValidatorsContractAddress, - oraclesContractAddress, - partnersRevenueSharingContractAddress, - operatorsRevenueSharingContractAddress + oraclesContractAddress ) { const signer = await ethers.provider.getSigner(contractSettings.admin); const Pool = await ethers.getContractFactory('Pool', signer); @@ -111,22 +103,13 @@ async function upgradePool( await proxy.deployed(); // call upgrade - await pool.upgrade( - poolValidatorsContractAddress, - oraclesContractAddress, - partnersRevenueSharingContractAddress, - operatorsRevenueSharingContractAddress - ); + await pool.upgrade(poolValidatorsContractAddress, oraclesContractAddress); // unpause return pool.unpause(); } -async function upgradeRewardEthToken( - oraclesContractAddress, - operatorsRevenueSharingContractAddress, - partnersRevenueSharingContractAddress -) { +async function upgradeRewardEthToken(oraclesContractAddress) { const signer = await ethers.provider.getSigner(contractSettings.admin); const RewardEthToken = await ethers.getContractFactory( 'RewardEthToken', @@ -148,11 +131,7 @@ async function upgradeRewardEthToken( await proxy.deployed(); // call upgrade - await rewardEthToken.upgrade( - oraclesContractAddress, - operatorsRevenueSharingContractAddress, - partnersRevenueSharingContractAddress - ); + await rewardEthToken.upgrade(oraclesContractAddress); return rewardEthToken.unpause(); } @@ -167,64 +146,33 @@ async function deployContracts() { await initializePoolValidators(poolValidators, oracles); log(white('Initialized Pool Validators contract')); - const operatorsRevenueSharing = await deployAndInitializeRevenueSharing(); - log( - white( - `Deployed Operators Revenue Sharing contract: ${green( - operatorsRevenueSharing - )}` - ) - ); - - const partnersRevenueSharing = await deployAndInitializeRevenueSharing(); - log( - white( - `Deployed Partners Revenue Sharing contract: ${green( - partnersRevenueSharing - )}` - ) - ); + const roles = await deployAndInitializeRoles(); + log(white(`Deployed and initialized Roles contract: ${green(roles)}`)); return { poolValidators, oracles, - operatorsRevenueSharing, - partnersRevenueSharing, + roles, }; } async function upgradeContracts() { - const { - poolValidators, - oracles, - partnersRevenueSharing, - operatorsRevenueSharing, - } = await deployContracts(); + const { poolValidators, oracles, roles } = await deployContracts(); await upgradeMerkleDistributor(oracles); log(white('Upgraded MerkleDistributor contract')); - await upgradePool( - poolValidators, - oracles, - partnersRevenueSharing, - operatorsRevenueSharing - ); + await upgradePool(poolValidators, oracles); log(white('Upgraded Pool contract')); - await upgradeRewardEthToken( - oracles, - operatorsRevenueSharing, - partnersRevenueSharing - ); + await upgradeRewardEthToken(oracles); log(white('Upgraded RewardEthToken contract')); return { ...contracts, poolValidators, oracles, - operatorsRevenueSharing, - partnersRevenueSharing, + roles, }; } diff --git a/deployments/merkleDistributor.js b/deployments/merkleDistributor.js deleted file mode 100644 index f4e19914..00000000 --- a/deployments/merkleDistributor.js +++ /dev/null @@ -1,25 +0,0 @@ -const { ethers, upgrades } = require('hardhat'); - -async function deployAnInitializeMerkleDistributor( - adminAddress, - rewardEthTokenContractAddress, - oraclesContractAddress -) { - const MerkleDistributor = await ethers.getContractFactory( - 'MerkleDistributor' - ); - const proxy = await upgrades.deployProxy( - MerkleDistributor, - [adminAddress, rewardEthTokenContractAddress, oraclesContractAddress], - { - kind: 'transparent', - unsafeAllowCustomTypes: true, - } - ); - await proxy.deployed(); - return proxy.address; -} - -module.exports = { - deployAnInitializeMerkleDistributor, -}; diff --git a/deployments/settings.js b/deployments/settings.js index 194762c3..1251b355 100644 --- a/deployments/settings.js +++ b/deployments/settings.js @@ -28,19 +28,6 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { '0x003e294ffc37978496f1b9298d5984ad4d55d4e2d1e6a06ee6904810c7b9e0d5', minActivatingDeposit: '5000000000000000000', // 5 ETH pendingValidatorsLimit: '500', // 5 % - // TODO: update with real sources for oracles - rewardVotesSources: [ - 'example1.com', - 'example2.com', - 'example3.com', - 'example4.com', - ], - validatorVotesSources: [ - 'example5.com', - 'example6.com', - 'example7.com', - 'example8.com', - ], }; } else { contracts = { @@ -69,19 +56,6 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', minActivatingDeposit: '32000000000000000000', // 32 ETH pendingValidatorsLimit: '500', // 5 % - // TODO: update with real sources for oracles - rewardVotesSources: [ - 'example1.com', - 'example2.com', - 'example3.com', - 'example4.com', - ], - validatorVotesSources: [ - 'example5.com', - 'example6.com', - 'example7.com', - 'example8.com', - ], }; } diff --git a/hardhat.config.js b/hardhat.config.js index a8574055..028fb6e5 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -142,7 +142,8 @@ module.exports = { 'VestingEscrowFactory', 'MerkleDrop', 'MerkleDistributor', - 'RevenueSharing', + 'ContractChecker', + 'Roles', ], clear: true, flat: true, diff --git a/test/MerkleDistributor.test.js b/test/MerkleDistributor.test.js index 4fb7cef3..a9f1848d 100644 --- a/test/MerkleDistributor.test.js +++ b/test/MerkleDistributor.test.js @@ -114,10 +114,11 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { ); }); - describe('distribute', () => { + describe('periodically distribute', () => { it('not admin fails to distribute tokens', async () => { await expectRevert( - merkleDistributor.distribute( + merkleDistributor.distributePeriodically( + admin, token.address, beneficiary, amount, @@ -132,7 +133,8 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { it('fails to distribute tokens with zero amount', async () => { await expectRevert( - merkleDistributor.distribute( + merkleDistributor.distributePeriodically( + admin, token.address, beneficiary, new BN(0), @@ -145,9 +147,26 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { ); }); + it('fails to distribute tokens from zero address', async () => { + await expectRevert( + merkleDistributor.distributePeriodically( + constants.ZERO_ADDRESS, + token.address, + beneficiary, + amount, + durationInBlocks, + { + from: admin, + } + ), + 'ERC20: transfer from the zero address' + ); + }); + it('fails to distribute tokens with max uint duration', async () => { await expectRevert( - merkleDistributor.distribute( + merkleDistributor.distributePeriodically( + admin, token.address, beneficiary, amount, @@ -162,7 +181,8 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { it('fails to distribute tokens with zero duration', async () => { await expectRevert( - merkleDistributor.distribute( + merkleDistributor.distributePeriodically( + admin, token.address, beneficiary, amount, @@ -177,7 +197,8 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { it('fails to distribute tokens without allowance', async () => { await expectRevert( - merkleDistributor.distribute( + merkleDistributor.distributePeriodically( + admin, token.address, beneficiary, amount, @@ -195,7 +216,8 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { from: admin, }); - let receipt = await merkleDistributor.distribute( + let receipt = await merkleDistributor.distributePeriodically( + admin, token.address, beneficiary, amount, @@ -206,8 +228,8 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { ); let startBlock = new BN(receipt.receipt.blockNumber); - await expectEvent(receipt, 'DistributionAdded', { - sender: admin, + await expectEvent(receipt, 'PeriodicDistributionAdded', { + from: admin, token: token.address, beneficiary, amount, @@ -220,6 +242,103 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { }); }); + describe('one time distribute', () => { + const origin = '0x1111111111111111111111111111111111111111'; + const rewardsLink = 'ipfs://QmehR8yCaKdHqHSxZMSJA5q2SWc8jTVCSKuVgbtqDEdXCH'; + + it('not admin fails to distribute tokens', async () => { + await expectRevert( + merkleDistributor.distributeOneTime( + admin, + origin, + token.address, + amount, + rewardsLink, + { + from: anyone, + } + ), + 'OwnablePausable: access denied' + ); + }); + + it('fails to distribute tokens with zero amount', async () => { + await expectRevert( + merkleDistributor.distributeOneTime( + admin, + origin, + token.address, + new BN(0), + rewardsLink, + { + from: admin, + } + ), + 'MerkleDistributor: invalid amount' + ); + }); + + it('fails to distribute tokens from zero address', async () => { + await expectRevert( + merkleDistributor.distributeOneTime( + constants.ZERO_ADDRESS, + origin, + token.address, + amount, + rewardsLink, + { + from: admin, + } + ), + 'ERC20: transfer from the zero address' + ); + }); + + it('fails to distribute tokens without allowance', async () => { + await expectRevert( + merkleDistributor.distributeOneTime( + admin, + origin, + token.address, + amount, + rewardsLink, + { + from: admin, + } + ), + 'SafeMath: subtraction overflow' + ); + }); + + it('admin can distribute tokens', async () => { + await token.approve(merkleDistributor.address, amount, { + from: admin, + }); + + let receipt = await merkleDistributor.distributeOneTime( + admin, + origin, + token.address, + amount, + rewardsLink, + { + from: admin, + } + ); + + await expectEvent(receipt, 'OneTimeDistributionAdded', { + from: admin, + origin, + token: token.address, + amount, + rewardsLink, + }); + expect( + await token.balanceOf(merkleDistributor.address) + ).to.bignumber.equal(prevDistributorBalance.add(amount)); + }); + }); + describe('claim', () => { beforeEach(async () => { // new rewards arrive @@ -492,8 +611,8 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { ['uint256', 'uint256', 'uint256'], [ currentNonce.toString(), - totalRewards.toString(), activatedValidators.toString(), + totalRewards.toString(), ] ); let candidateId = hexlify(keccak256(encoded)); @@ -503,8 +622,8 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { // create merkle root signature encoded = defaultAbiCoder.encode( - ['uint256', 'bytes32', 'string'], - [currentNonce.add(new BN(1)).toString(), merkleRoot, merkleProofs] + ['uint256', 'string', 'bytes32'], + [currentNonce.add(new BN(1)).toString(), merkleProofs, merkleRoot] ); candidateId = hexlify(keccak256(encoded)); merkleRootSignatures = [ diff --git a/test/RevenueSharing.test.js b/test/RevenueSharing.test.js deleted file mode 100644 index 453482d2..00000000 --- a/test/RevenueSharing.test.js +++ /dev/null @@ -1,515 +0,0 @@ -const { expect } = require('chai'); -const { - expectRevert, - expectEvent, - BN, - ether, - constants, - send, -} = require('@openzeppelin/test-helpers'); -const { upgradeContracts } = require('../deployments'); -const { contractSettings } = require('../deployments/settings'); -const { - stopImpersonatingAccount, - impersonateAccount, - resetFork, - setTotalRewards, - setupOracleAccounts, -} = require('./utils'); - -const Pool = artifacts.require('Pool'); -const Oracles = artifacts.require('Oracles'); -const RewardEthToken = artifacts.require('RewardEthToken'); -const RevenueSharing = artifacts.require('RevenueSharing'); - -contract('RevenueSharing', ([beneficiary, anyone, ...otherAccounts]) => { - const admin = contractSettings.admin; - const revenueShare = new BN(1000); - let revenueSharing, oracleAccounts, pool, rewardEthToken, oracles; - - after(async () => stopImpersonatingAccount(admin)); - - beforeEach(async () => { - await impersonateAccount(admin); - await send.ether(anyone, admin, ether('5')); - const contracts = await upgradeContracts(); - revenueSharing = await RevenueSharing.at(contracts.operatorsRevenueSharing); - pool = await Pool.at(contracts.pool); - oracles = await Oracles.at(contracts.oracles); - rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); - oracleAccounts = await setupOracleAccounts({ - admin, - oracles, - accounts: otherAccounts, - }); - }); - - afterEach(async () => resetFork()); - - describe('addAccount', () => { - it('fails to add account without admin role', async () => { - await expectRevert( - revenueSharing.addAccount(beneficiary, revenueShare, { - from: beneficiary, - }), - 'OwnablePausable: access denied' - ); - }); - - it('fails to add account when paused', async () => { - await revenueSharing.pause({ from: admin }); - await expectRevert( - revenueSharing.addAccount(beneficiary, revenueShare, { - from: admin, - }), - 'Pausable: paused' - ); - }); - - it('fails to add account with invalid revenue share', async () => { - await expectRevert( - revenueSharing.addAccount(beneficiary, '0', { - from: admin, - }), - 'RevenueSharing: invalid revenue share' - ); - - await expectRevert( - revenueSharing.addAccount(beneficiary, '10001', { - from: admin, - }), - 'RevenueSharing: invalid revenue share' - ); - }); - - it('fails to add account with beneficiary', async () => { - await expectRevert( - revenueSharing.addAccount(constants.ZERO_ADDRESS, revenueShare, { - from: admin, - }), - 'RevenueSharing: invalid beneficiary' - ); - }); - - it('fails to add account twice', async () => { - await revenueSharing.addAccount(beneficiary, revenueShare, { - from: admin, - }); - - await expectRevert( - revenueSharing.addAccount(beneficiary, revenueShare, { - from: admin, - }), - 'RevenueSharing: account already added' - ); - }); - - it('admin can add new account', async () => { - let receipt = await revenueSharing.addAccount(beneficiary, revenueShare, { - from: admin, - }); - - await expectEvent(receipt, 'AccountAdded', { - beneficiary, - revenueShare, - }); - - expect(await revenueSharing.isAdded(beneficiary)).to.equal(true); - }); - }); - - describe('removeAccount', () => { - beforeEach(async () => { - await revenueSharing.addAccount(beneficiary, revenueShare, { - from: admin, - }); - }); - - it('fails to remove account without admin role', async () => { - await expectRevert( - revenueSharing.removeAccount(beneficiary, { - from: beneficiary, - }), - 'OwnablePausable: access denied' - ); - }); - - it('fails to remove account when paused', async () => { - await revenueSharing.pause({ from: admin }); - await expectRevert( - revenueSharing.removeAccount(beneficiary, { - from: admin, - }), - 'Pausable: paused' - ); - }); - - it('fails to remove not existing account', async () => { - await expectRevert( - revenueSharing.removeAccount(anyone, { - from: admin, - }), - 'RevenueSharing: account is not added' - ); - }); - - it('admin can remove account', async () => { - let receipt = await revenueSharing.removeAccount(beneficiary, { - from: admin, - }); - - await expectEvent(receipt, 'AccountRemoved', { - beneficiary, - reward: new BN(0), - }); - - expect(await revenueSharing.isAdded(beneficiary)).to.equal(false); - }); - }); - - describe('updateRevenueShare', () => { - let newRevenueShare = revenueShare.add(new BN(1000)); - - beforeEach(async () => { - await revenueSharing.addAccount(beneficiary, revenueShare, { - from: admin, - }); - }); - - it('fails to update revenue share without admin role', async () => { - await expectRevert( - revenueSharing.updateRevenueShare(beneficiary, newRevenueShare, { - from: beneficiary, - }), - 'OwnablePausable: access denied' - ); - }); - - it('fails to update revenue share when paused', async () => { - await revenueSharing.pause({ from: admin }); - await expectRevert( - revenueSharing.updateRevenueShare(beneficiary, newRevenueShare, { - from: admin, - }), - 'Pausable: paused' - ); - }); - - it('fails to update with invalid revenue share', async () => { - await expectRevert( - revenueSharing.updateRevenueShare(beneficiary, '0', { - from: admin, - }), - 'RevenueSharing: invalid revenue share' - ); - - await expectRevert( - revenueSharing.updateRevenueShare(beneficiary, '10001', { - from: admin, - }), - 'RevenueSharing: invalid revenue share' - ); - - await expectRevert( - revenueSharing.updateRevenueShare(beneficiary, revenueShare, { - from: admin, - }), - 'RevenueSharing: invalid revenue share' - ); - }); - - it('fails to update revenue share for not existing account', async () => { - await expectRevert( - revenueSharing.updateRevenueShare(anyone, newRevenueShare, { - from: admin, - }), - 'RevenueSharing: account is not added' - ); - }); - - it('admin can update revenue share', async () => { - await revenueSharing.increaseAmount(beneficiary, ether('1000'), { - from: admin, - }); - let prevPoints = await revenueSharing.pointsOf(beneficiary); - let prevTotalPoints = await revenueSharing.totalPoints(); - let receipt = await revenueSharing.updateRevenueShare( - beneficiary, - newRevenueShare, - { - from: admin, - } - ); - - await expectEvent(receipt, 'RevenueShareUpdated', { - beneficiary, - revenueShare: newRevenueShare, - reward: new BN(0), - }); - - expect( - (await revenueSharing.checkpoints(beneficiary)).revenueShare - ).to.bignumber.equal(newRevenueShare); - expect( - await revenueSharing.pointsOf(beneficiary) - ).to.bignumber.greaterThan(prevPoints); - expect(await revenueSharing.totalPoints()).to.bignumber.greaterThan( - prevTotalPoints - ); - }); - }); - - describe('increaseAmount', () => { - let newAmount = ether('1000'); - - beforeEach(async () => { - await revenueSharing.addAccount(beneficiary, revenueShare, { - from: admin, - }); - }); - - it('fails to increase amount by not admin or pool', async () => { - await expectRevert( - revenueSharing.increaseAmount(beneficiary, newAmount, { - from: beneficiary, - }), - 'RevenueSharing: access denied' - ); - }); - - it('fails to increase amount when paused', async () => { - await revenueSharing.pause({ from: admin }); - await expectRevert( - revenueSharing.increaseAmount(beneficiary, newAmount, { - from: admin, - }), - 'Pausable: paused' - ); - }); - - it('fails to increase with zero amount', async () => { - await expectRevert( - revenueSharing.increaseAmount(beneficiary, '0', { - from: admin, - }), - 'RevenueSharing: invalid amount' - ); - }); - - it('fails to increase amount for not existing account', async () => { - await expectRevert( - revenueSharing.increaseAmount(anyone, newAmount, { - from: admin, - }), - 'RevenueSharing: account is not added' - ); - }); - - it('admin or pool can increase amount', async () => { - let prevPoints = await revenueSharing.pointsOf(beneficiary); - let prevTotalPoints = await revenueSharing.totalPoints(); - let receipt = await revenueSharing.increaseAmount( - beneficiary, - newAmount, - { - from: admin, - } - ); - - await expectEvent(receipt, 'AmountIncreased', { - beneficiary, - amount: newAmount, - reward: new BN(0), - }); - - expect( - (await revenueSharing.checkpoints(beneficiary)).amount - ).to.bignumber.equal(newAmount); - expect( - await revenueSharing.pointsOf(beneficiary) - ).to.bignumber.greaterThan(prevPoints); - expect(await revenueSharing.totalPoints()).to.bignumber.greaterThan( - prevTotalPoints - ); - }); - }); - - describe('collectRewards', () => { - let contributedAmount = ether('32'); - let revenueCut; - - beforeEach(async () => { - // add account and increase contributed amount - await revenueSharing.addAccount(beneficiary, revenueShare, { - from: admin, - }); - await revenueSharing.increaseAmount(beneficiary, contributedAmount, { - from: admin, - }); - - // increase reward - let periodReward = ether('10'); - let totalRewards = (await rewardEthToken.totalRewards()).add( - periodReward - ); - await setTotalRewards({ - rewardEthToken, - oracles, - oracleAccounts, - pool, - totalRewards, - }); - revenueCut = await rewardEthToken.balanceOf(revenueSharing.address); - }); - - it('fails to collect reward when paused', async () => { - await revenueSharing.pause({ from: admin }); - await expectRevert( - revenueSharing.collectReward(beneficiary, { - from: beneficiary, - }), - 'Pausable: paused' - ); - }); - - it('fails to collect multiple when paused', async () => { - await revenueSharing.pause({ from: admin }); - await expectRevert( - revenueSharing.collectRewards([beneficiary, anyone], { - from: beneficiary, - }), - 'Pausable: paused' - ); - }); - - it('fails to collect reward for not existing account', async () => { - await expectRevert( - revenueSharing.collectReward(anyone, { - from: beneficiary, - }), - 'RevenueSharing: account is not added' - ); - }); - - it('does not fail with zero reward', async () => { - // withdraw accumulated reward - await revenueSharing.collectReward(beneficiary, { - from: beneficiary, - }); - - let receipt = await revenueSharing.collectReward(beneficiary, { - from: beneficiary, - }); - const prevReward = await rewardEthToken.balanceOf(beneficiary); - - await expectEvent(receipt, 'RewardCollected', { - sender: beneficiary, - beneficiary, - reward: new BN(0), - }); - expect(await rewardEthToken.balanceOf(beneficiary)).to.bignumber.equal( - prevReward - ); - }); - - it('anyone can collect reward for beneficiary', async () => { - let receipt = await revenueSharing.collectReward(beneficiary, { - from: anyone, - }); - await expectEvent(receipt, 'RewardCollected', { - sender: anyone, - beneficiary, - }); - const reward = receipt.logs[0].args.reward; - expect(reward).to.bignumber.greaterThan(new BN(0)); - expect(reward.sub(revenueCut)).to.bignumber.lessThan(new BN(10e8)); - expect(await revenueSharing.rewardOf(beneficiary)).to.bignumber.equal( - new BN(0) - ); - }); - - it('anyone can collect rewards for multiple beneficiaries', async () => { - let beneficiary1 = beneficiary; - let [beneficiary2, revenueShare2, contributedAmount2] = [ - otherAccounts[0], - revenueShare.add(new BN(1000)), - contributedAmount.add(ether('30')), - ]; - - // add another account and increase contributed amount - await revenueSharing.addAccount(beneficiary2, revenueShare2, { - from: admin, - }); - await revenueSharing.increaseAmount(beneficiary2, contributedAmount2, { - from: admin, - }); - - // increase reward - let periodReward = ether('10'); - let totalRewards = (await rewardEthToken.totalRewards()).add( - periodReward - ); - await setTotalRewards({ - rewardEthToken, - oracles, - oracleAccounts, - pool, - totalRewards, - }); - revenueCut = await rewardEthToken.balanceOf(revenueSharing.address); - - let receipt = await revenueSharing.collectRewards( - [beneficiary1, beneficiary2], - { - from: anyone, - } - ); - - await expectEvent(receipt, 'RewardCollected', { - sender: anyone, - beneficiary: beneficiary1, - }); - await expectEvent(receipt, 'RewardCollected', { - sender: anyone, - beneficiary: beneficiary2, - }); - - // check reward of the beneficiary1 - const reward1 = receipt.logs[0].args.reward; - expect(reward1).to.bignumber.greaterThan(new BN(0)); - expect(await revenueSharing.rewardOf(beneficiary1)).to.bignumber.equal( - new BN(0) - ); - - // check reward of the beneficiary2 - const reward2 = receipt.logs[1].args.reward; - expect(reward2).to.bignumber.greaterThan(new BN(0)); - expect(await revenueSharing.rewardOf(beneficiary2)).to.bignumber.equal( - new BN(0) - ); - expect(reward1.add(reward2)).to.bignumber.lessThan(revenueCut); - expect(reward2).to.bignumber.greaterThan(reward1); - }); - }); - - describe('updateRewards', () => { - it('fails to update rewards by not RewardEthToken', async () => { - await expectRevert( - revenueSharing.updateRewards(ether('5'), ether('1000'), { - from: anyone, - }), - 'RevenueSharing: access denied' - ); - }); - - it('fails to update rewards when paused', async () => { - await revenueSharing.pause({ from: admin }); - await expectRevert( - revenueSharing.updateRewards(ether('5'), ether('1000'), { - from: beneficiary, - }), - 'Pausable: paused' - ); - }); - }); -}); diff --git a/test/Roles.test.js b/test/Roles.test.js new file mode 100644 index 00000000..21935a56 --- /dev/null +++ b/test/Roles.test.js @@ -0,0 +1,229 @@ +const { + expectRevert, + expectEvent, + ether, + send, + BN, + constants, +} = require('@openzeppelin/test-helpers'); +const { upgradeContracts } = require('../deployments'); +const { contractSettings } = require('../deployments/settings'); +const { + stopImpersonatingAccount, + impersonateAccount, + resetFork, +} = require('./utils'); + +const Roles = artifacts.require('Roles'); + +contract('Roles', ([anyone, operator, referrer, partner]) => { + const admin = contractSettings.admin; + let revenueShare = new BN(3000); + let roles; + + after(async () => stopImpersonatingAccount(admin)); + + beforeEach(async () => { + await impersonateAccount(admin); + await send.ether(anyone, admin, ether('5')); + + let upgradedContracts = await upgradeContracts(); + roles = await Roles.at(upgradedContracts.roles); + }); + + afterEach(async () => resetFork()); + + describe('operators', () => { + it('not admin fails to set operator', async () => { + await expectRevert( + roles.setOperator(operator, revenueShare, { + from: anyone, + }), + 'OwnablePausable: access denied' + ); + }); + + it('fails to set operator to zero address', async () => { + await expectRevert( + roles.setOperator(constants.ZERO_ADDRESS, revenueShare, { + from: admin, + }), + 'Roles: account is the zero address' + ); + }); + + it('fails to set operator with invalid revenue share', async () => { + await expectRevert( + roles.setOperator(operator, new BN(10001), { + from: admin, + }), + 'Roles: invalid revenue share' + ); + }); + + it('fails to set operator when paused', async () => { + await roles.pause({ from: admin }); + await expectRevert( + roles.setOperator(operator, revenueShare, { + from: admin, + }), + 'Pausable: paused' + ); + }); + + it('admin can set operator', async () => { + let receipt = await roles.setOperator(operator, revenueShare, { + from: admin, + }); + await expectEvent(receipt, 'OperatorUpdated', { + operator, + revenueShare, + }); + }); + + it('fails to remove zero address operator', async () => { + await expectRevert( + roles.removeOperator(constants.ZERO_ADDRESS, { + from: admin, + }), + 'Roles: account is the zero address' + ); + }); + + it('fails to remove operator when paused', async () => { + await roles.pause({ from: admin }); + await expectRevert( + roles.removeOperator(operator, { + from: admin, + }), + 'Pausable: paused' + ); + }); + }); + + describe('partners', () => { + it('not admin fails to set partner', async () => { + await expectRevert( + roles.setPartner(partner, revenueShare, { + from: anyone, + }), + 'OwnablePausable: access denied' + ); + }); + + it('fails to set partner to zero address', async () => { + await expectRevert( + roles.setPartner(constants.ZERO_ADDRESS, revenueShare, { + from: admin, + }), + 'Roles: account is the zero address' + ); + }); + + it('fails to set partner with invalid revenue share', async () => { + await expectRevert( + roles.setPartner(partner, new BN(10001), { + from: admin, + }), + 'Roles: invalid revenue share' + ); + }); + + it('fails to set partner when paused', async () => { + await roles.pause({ from: admin }); + await expectRevert( + roles.setPartner(partner, revenueShare, { + from: admin, + }), + 'Pausable: paused' + ); + }); + + it('admin can set partner', async () => { + let receipt = await roles.setPartner(partner, revenueShare, { + from: admin, + }); + await expectEvent(receipt, 'PartnerUpdated', { + partner, + revenueShare, + }); + }); + + it('fails to remove zero address partner', async () => { + await expectRevert( + roles.removePartner(constants.ZERO_ADDRESS, { + from: admin, + }), + 'Roles: account is the zero address' + ); + }); + + it('fails to remove partner when paused', async () => { + await roles.pause({ from: admin }); + await expectRevert( + roles.removePartner(partner, { + from: admin, + }), + 'Pausable: paused' + ); + }); + }); + + describe('referrers', () => { + it('not admin fails to add referrer', async () => { + await expectRevert( + roles.addReferrer(referrer, { + from: anyone, + }), + 'OwnablePausable: access denied' + ); + }); + + it('fails to add referrer to zero address', async () => { + await expectRevert( + roles.addReferrer(constants.ZERO_ADDRESS, { + from: admin, + }), + 'Roles: account is the zero address' + ); + }); + + it('fails to add referrer when paused', async () => { + await roles.pause({ from: admin }); + await expectRevert( + roles.addReferrer(referrer, { + from: admin, + }), + 'Pausable: paused' + ); + }); + + it('admin can add referrer', async () => { + let receipt = await roles.addReferrer(referrer, { + from: admin, + }); + await expectEvent(receipt, 'ReferrerAdded', { + referrer, + }); + }); + + it('fails to remove zero address referrer', async () => { + await expectRevert( + roles.removeReferrer(constants.ZERO_ADDRESS, { + from: admin, + }), + 'Roles: account is the zero address' + ); + }); + + it('fails to remove referrer when paused', async () => { + await roles.pause({ from: admin }); + await expectRevert( + roles.removeReferrer(operator, { + from: admin, + }), + 'Pausable: paused' + ); + }); + }); +}); diff --git a/test/oracles/Oracles.test.js b/test/oracles/Oracles.test.js index 9062c106..9f61876c 100644 --- a/test/oracles/Oracles.test.js +++ b/test/oracles/Oracles.test.js @@ -27,8 +27,6 @@ contract('Oracles', ([_, anyone, ...accounts]) => { let admin = contractSettings.admin; let oracles, rewardEthToken, pool, merkleDistributor; let [oracle, anotherOracle] = accounts; - let rewardVotesSource = 'example10.com'; - let validatorVotesSource = 'example10.com'; after(async () => stopImpersonatingAccount(admin)); @@ -48,14 +46,9 @@ contract('Oracles', ([_, anyone, ...accounts]) => { describe('assigning', () => { it('admin can assign oracle role to another account', async () => { - const receipt = await oracles.addOracle( - oracle, - rewardVotesSource, - validatorVotesSource, - { - from: admin, - } - ); + const receipt = await oracles.addOracle(oracle, { + from: admin, + }); expectEvent(receipt, 'RoleGranted', { role: await oracles.ORACLE_ROLE(), account: oracle, @@ -63,8 +56,6 @@ contract('Oracles', ([_, anyone, ...accounts]) => { }); expectEvent(receipt, 'OracleAdded', { oracle, - rewardVotesSource, - validatorVotesSource, }); expect(await oracles.isOracle(oracle)).equal(true); expect(await oracles.isOracle(admin)).equal(false); @@ -73,7 +64,7 @@ contract('Oracles', ([_, anyone, ...accounts]) => { it('others cannot assign oracle role to an account', async () => { await expectRevert( - oracles.addOracle(oracle, rewardVotesSource, validatorVotesSource, { + oracles.addOracle(oracle, { from: anyone, }), 'AccessControl: sender must be an admin to grant' @@ -83,16 +74,11 @@ contract('Oracles', ([_, anyone, ...accounts]) => { }); it('oracles cannot assign oracle role to others', async () => { - await oracles.addOracle(oracle, rewardVotesSource, validatorVotesSource, { + await oracles.addOracle(oracle, { from: admin, }); await expectRevert( - oracles.addOracle( - anotherOracle, - rewardVotesSource, - validatorVotesSource, - { from: oracle } - ), + oracles.addOracle(anotherOracle, { from: oracle }), 'AccessControl: sender must be an admin to grant' ); expect(await oracles.isOracle(oracle)).equal(true); @@ -102,15 +88,10 @@ contract('Oracles', ([_, anyone, ...accounts]) => { describe('removing', () => { beforeEach(async () => { - await oracles.addOracle(oracle, rewardVotesSource, validatorVotesSource, { + await oracles.addOracle(oracle, { from: admin, }); - await oracles.addOracle( - anotherOracle, - rewardVotesSource, - validatorVotesSource, - { from: admin } - ); + await oracles.addOracle(anotherOracle, { from: admin }); }); it('anyone cannot remove oracles', async () => { @@ -167,8 +148,8 @@ contract('Oracles', ([_, anyone, ...accounts]) => { ['uint256', 'uint256', 'uint256'], [ currentNonce.toString(), - newTotalRewards.toString(), newActivatedValidators.toString(), + newTotalRewards.toString(), ] ); candidateId = keccak256(encoded); @@ -297,11 +278,11 @@ contract('Oracles', ([_, anyone, ...accounts]) => { currentNonce = await oracles.currentRewardsNonce(); let encoded = defaultAbiCoder.encode( - ['uint256', 'bytes32', 'string'], + ['uint256', 'string', 'bytes32'], [ currentNonce.toString(), - merkleRoot.toString(), merkleProofs.toString(), + merkleRoot.toString(), ] ); candidateId = keccak256(encoded); @@ -433,8 +414,8 @@ contract('Oracles', ([_, anyone, ...accounts]) => { // create merkle root signatures currentNonce = await oracles.currentRewardsNonce(); encoded = defaultAbiCoder.encode( - ['uint256', 'bytes32', 'string'], - [currentNonce.toString(), merkleRoot, merkleProofs] + ['uint256', 'string', 'bytes32'], + [currentNonce.toString(), merkleProofs, merkleRoot] ); candidateId = keccak256(encoded); diff --git a/test/oracles/upgrading.test.js b/test/oracles/upgrading.test.js index 37be642c..bdefdc34 100644 --- a/test/oracles/upgrading.test.js +++ b/test/oracles/upgrading.test.js @@ -1,4 +1,4 @@ -const { send, ether } = require('@openzeppelin/test-helpers'); +const { send, ether, BN } = require('@openzeppelin/test-helpers'); const { contractSettings, contracts } = require('../../deployments/settings'); const { upgradeContracts } = require('../../deployments'); const { @@ -28,7 +28,7 @@ contract('Oracles (upgrading)', ([anyone]) => { it('initializes with values from previous contract', async () => { let prevOracles = await PrevOracles.at(contracts.oracles); expect(await prevOracles.currentNonce()).to.bignumber.equal( - await oracles.currentRewardsNonce() + (await oracles.currentRewardsNonce()).sub(new BN('1000')) ); prevOracles = await Oracles.at(contracts.oracles); diff --git a/test/pool/stake.test.js b/test/pool/stake.test.js index 2887ef86..ad88fea3 100644 --- a/test/pool/stake.test.js +++ b/test/pool/stake.test.js @@ -24,7 +24,6 @@ const { initializeData } = require('./initializeMerkleRoot'); const Pool = artifacts.require('Pool'); const StakedEthToken = artifacts.require('StakedEthToken'); const PoolValidators = artifacts.require('PoolValidators'); -const RevenueSharing = artifacts.require('RevenueSharing'); const Oracles = artifacts.require('Oracles'); contract('Pool (stake)', (accounts) => { @@ -33,7 +32,6 @@ contract('Pool (stake)', (accounts) => { let pool, stakedEthToken, validators, - partnersRevenueSharing, oracles, oracleAccounts, totalSupply, @@ -51,9 +49,6 @@ contract('Pool (stake)', (accounts) => { pool = await Pool.at(contracts.pool); stakedEthToken = await StakedEthToken.at(contracts.stakedEthToken); validators = await PoolValidators.at(upgradedContracts.poolValidators); - partnersRevenueSharing = await RevenueSharing.at( - upgradedContracts.partnersRevenueSharing - ); oracles = await Oracles.at(upgradedContracts.oracles); oracleAccounts = await setupOracleAccounts({ admin, @@ -260,81 +255,99 @@ contract('Pool (stake)', (accounts) => { describe('staking with partner', () => { const partner = otherAccounts[0]; - const revenueShare = new BN(1000); - beforeEach(async () => { - await partnersRevenueSharing.addAccount(partner, revenueShare, { - from: admin, - }); - }); + it('can stake with partner', async () => { + let amount = ether('1'); + totalSupply = totalSupply.add(amount); - it('fails to stake with invalid partner', async () => { - await expectRevert( - pool.stakeWithPartner(sender1, { - from: sender1, - value: ether('1'), - }), - 'RevenueSharing: account is not added' - ); + let receipt = await pool.stakeWithPartner(partner, { + from: sender1, + value: amount, + }); + await expectEvent(receipt, 'StakedWithPartner', { + partner, + amount, + }); + await checkStakedEthToken({ + stakedEthToken, + totalSupply, + account: sender1, + balance: amount, + }); }); - it('can stake with partner', async () => { + it('can stake with partner to different recipient address', async () => { let amount = ether('1'); totalSupply = totalSupply.add(amount); - let prevTotalPoints = await partnersRevenueSharing.totalPoints(); - let receipt = await pool.stakeWithPartner(partner, { + let receipt = await pool.stakeWithPartnerOnBehalf(partner, sender2, { from: sender1, value: amount, }); + await expectEvent(receipt, 'StakedWithPartner', { + partner, + amount, + }); await expectEvent.inTransaction( receipt.tx, StakedEthToken, 'Transfer', { from: constants.ZERO_ADDRESS, - to: sender1, + to: sender2, value: amount, } ); await checkStakedEthToken({ stakedEthToken, totalSupply, - account: sender1, + account: sender2, balance: amount, }); + await checkStakedEthToken({ + stakedEthToken, + totalSupply, + account: sender1, + balance: new BN(0), + }); + }); + }); - await expectEvent.inTransaction( - receipt.tx, - RevenueSharing, - 'AmountIncreased', - { - beneficiary: partner, - amount: amount, - reward: new BN(0), - } - ); + describe('staking with referrer', () => { + const referrer = otherAccounts[0]; - let points = revenueShare.mul(amount); - expect( - (await partnersRevenueSharing.checkpoints(partner)).amount - ).to.bignumber.equal(amount); - expect( - await partnersRevenueSharing.pointsOf(partner) - ).to.bignumber.equal(points); - expect(await partnersRevenueSharing.totalPoints()).to.bignumber.equal( - prevTotalPoints.add(points) - ); + it('can stake with referrer', async () => { + let amount = ether('1'); + totalSupply = totalSupply.add(amount); + + let receipt = await pool.stakeWithReferrer(referrer, { + from: sender1, + value: amount, + }); + await expectEvent(receipt, 'StakedWithReferrer', { + referrer, + amount, + }); + await checkStakedEthToken({ + stakedEthToken, + totalSupply, + account: sender1, + balance: amount, + }); }); - it('can stake with partner and different recipient', async () => { + it('can stake with referrer to different recipient address', async () => { let amount = ether('1'); totalSupply = totalSupply.add(amount); - let receipt = await pool.stakeWithPartnerOnBehalf(partner, sender2, { + let receipt = await pool.stakeWithReferrerOnBehalf(referrer, sender2, { from: sender1, value: amount, }); + await expectEvent(receipt, 'StakedWithReferrer', { + referrer, + amount, + }); await expectEvent.inTransaction( receipt.tx, StakedEthToken, @@ -351,6 +364,12 @@ contract('Pool (stake)', (accounts) => { account: sender2, balance: amount, }); + await checkStakedEthToken({ + stakedEthToken, + totalSupply, + account: sender1, + balance: new BN(0), + }); }); }); }); diff --git a/test/pool/upgrading.test.js b/test/pool/upgrading.test.js index 257f9542..4a61a2c9 100644 --- a/test/pool/upgrading.test.js +++ b/test/pool/upgrading.test.js @@ -11,23 +11,14 @@ const Pool = artifacts.require('Pool'); contract('Pool (upgrading)', ([sender]) => { const admin = contractSettings.admin; - let pool, - poolValidators, - oracles, - partnersRevenueSharing, - operatorsRevenueSharing; + let pool, poolValidators, oracles; after(async () => stopImpersonatingAccount(admin)); beforeEach(async () => { await impersonateAccount(admin); await send.ether(sender, admin, ether('5')); - ({ - poolValidators, - oracles, - partnersRevenueSharing, - operatorsRevenueSharing, - } = await upgradeContracts()); + ({ poolValidators, oracles } = await upgradeContracts()); pool = await Pool.at(contracts.pool); }); @@ -35,26 +26,14 @@ contract('Pool (upgrading)', ([sender]) => { it('fails to upgrade with not admin privilege', async () => { await expectRevert( - pool.upgrade( - poolValidators, - oracles, - partnersRevenueSharing, - operatorsRevenueSharing, - { from: sender } - ), + pool.upgrade(poolValidators, oracles, { from: sender }), 'OwnablePausable: access denied' ); }); it('fails to upgrade when not paused', async () => { await expectRevert( - pool.upgrade( - poolValidators, - oracles, - partnersRevenueSharing, - operatorsRevenueSharing, - { from: admin } - ), + pool.upgrade(poolValidators, oracles, { from: admin }), 'Pausable: not paused' ); }); @@ -62,13 +41,7 @@ contract('Pool (upgrading)', ([sender]) => { it('fails to upgrade twice', async () => { await pool.pause({ from: admin }); await expectRevert( - pool.upgrade( - poolValidators, - oracles, - partnersRevenueSharing, - operatorsRevenueSharing, - { from: admin } - ), + pool.upgrade(poolValidators, oracles, { from: admin }), 'Pool: already upgraded' ); }); diff --git a/test/tokens/RewardEthToken.test.js b/test/tokens/RewardEthToken.test.js index 80b62bfc..a38800bb 100644 --- a/test/tokens/RewardEthToken.test.js +++ b/test/tokens/RewardEthToken.test.js @@ -23,7 +23,6 @@ const StakedEthToken = artifacts.require('StakedEthToken'); const RewardEthToken = artifacts.require('RewardEthToken'); const Pool = artifacts.require('Pool'); const Oracles = artifacts.require('Oracles'); -const RevenueSharing = artifacts.require('RevenueSharing'); const MulticallMock = artifacts.require('MulticallMock'); const protocolFee = new BN(1000); @@ -31,9 +30,6 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { const admin = contractSettings.admin; let stakedEthToken, rewardEthToken, - protocolFeeRecipient, - operatorsRevenueSharing, - partnersRevenueSharing, totalSupply, pool, oracles, @@ -49,12 +45,6 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { stakedEthToken = await StakedEthToken.at(contracts.stakedEthToken); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); - operatorsRevenueSharing = await RevenueSharing.at( - contracts.operatorsRevenueSharing - ); - partnersRevenueSharing = await RevenueSharing.at( - contracts.partnersRevenueSharing - ); pool = await Pool.at(contracts.pool); oracles = await Oracles.at(contracts.oracles); @@ -206,124 +196,38 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { { periodRewards: newTotalRewards.sub(prevTotalRewards), totalRewards: newTotalRewards, + protocolReward: new BN(0), } ); }); - it('rewards update with revenue shares', async () => { - let [beneficiary1, revenueShare1, contributedAmount1] = [ - accounts[0], - new BN(1000), - ether('30'), - ]; - let [beneficiary2, revenueShare2, contributedAmount2] = [ - accounts[1], - new BN(2000), - ether('50'), - ]; - let claimer = accounts[2]; - - for (const revenueSharing of [ - operatorsRevenueSharing, - partnersRevenueSharing, - ]) { - // add accounts - await revenueSharing.addAccount(beneficiary1, revenueShare1, { - from: admin, - }); - await revenueSharing.increaseAmount(beneficiary1, contributedAmount1, { - from: admin, - }); - - await revenueSharing.addAccount(beneficiary2, revenueShare2, { - from: admin, - }); - await revenueSharing.increaseAmount(beneficiary2, contributedAmount2, { - from: admin, - }); - } + it('assigns protocol fee to distributor', async () => { + await rewardEthToken.setProtocolFeeRecipient(constants.ZERO_ADDRESS, { + from: admin, + }); - // increase reward let periodReward = ether('10'); - let totalRewards = (await rewardEthToken.totalRewards()).add( - periodReward - ); - let prevProtocolFeeRecipientBalance = await rewardEthToken.balanceOf( - protocolFeeRecipient - ); - await setTotalRewards({ + let prevTotalRewards = await rewardEthToken.totalRewards(); + let newTotalRewards = prevTotalRewards.add(periodReward); + let receipt = await setTotalRewards({ rewardEthToken, oracles, - oracleAccounts, pool, - totalRewards, + totalRewards: newTotalRewards, + oracleAccounts, }); - let protocolReward = ( - await rewardEthToken.balanceOf(protocolFeeRecipient) - ).sub(prevProtocolFeeRecipientBalance); - expect(protocolReward).to.bignumber.greaterThan(new BN(0)); - - let operatorsRevenueCut = await rewardEthToken.balanceOf( - operatorsRevenueSharing.address - ); - - let partnersRevenueCut = await rewardEthToken.balanceOf( - partnersRevenueSharing.address - ); - expect(operatorsRevenueCut).to.bignumber.greaterThan(new BN(0)); - expect(partnersRevenueCut).to.bignumber.greaterThan(new BN(0)); - expect(operatorsRevenueCut).to.bignumber.greaterThan(partnersRevenueCut); - expect(operatorsRevenueCut.add(partnersRevenueCut)).to.bignumber.lessThan( - periodReward + await expectEvent.inTransaction( + receipt.tx, + RewardEthToken, + 'RewardsUpdated', + { + periodRewards: newTotalRewards.sub(prevTotalRewards), + totalRewards: newTotalRewards, + protocolReward: periodReward + .mul(await rewardEthToken.protocolFee()) + .div(new BN(10000)), + } ); - - for (const [revenueSharing, revenueCut] of [ - [operatorsRevenueSharing, operatorsRevenueCut], - [partnersRevenueSharing, partnersRevenueCut], - ]) { - let receipt = await revenueSharing.collectRewards( - [beneficiary1, beneficiary2], - { - from: claimer, - } - ); - await expectEvent(receipt, 'RewardCollected', { - sender: claimer, - beneficiary: beneficiary1, - }); - await expectEvent(receipt, 'RewardCollected', { - sender: claimer, - beneficiary: beneficiary2, - }); - - // check reward of the beneficiary1 - const reward1 = receipt.logs[0].args.reward; - expect(reward1).to.bignumber.greaterThan(new BN(0)); - expect(await revenueSharing.rewardOf(beneficiary1)).to.bignumber.equal( - new BN(0) - ); - - // check reward of the beneficiary2 - const reward2 = receipt.logs[1].args.reward; - expect(reward2).to.bignumber.greaterThan(new BN(0)); - expect(await revenueSharing.rewardOf(beneficiary2)).to.bignumber.equal( - new BN(0) - ); - expect(reward1.add(reward2)).to.bignumber.lessThan(revenueCut); - expect(reward2).to.bignumber.greaterThan(reward1); - } - - let gwei = ether('0.000000001'); - expect( - await rewardEthToken.balanceOf(operatorsRevenueSharing.address) - ).to.bignumber.lessThan(gwei); - expect( - await rewardEthToken.balanceOf(partnersRevenueSharing.address) - ).to.bignumber.lessThan(gwei); - - expect( - await rewardEthToken.balanceOf(protocolFeeRecipient) - ).to.bignumber.equal(prevProtocolFeeRecipientBalance.add(protocolReward)); }); }); @@ -506,8 +410,8 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { ['uint256', 'uint256', 'uint256'], [ currentNonce.toString(), - totalRewards.toString(), activatedValidators.toString(), + totalRewards.toString(), ] ); let candidateId = hexlify(keccak256(encoded)); @@ -555,8 +459,8 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { ['uint256', 'uint256', 'uint256'], [ currentNonce.toString(), - totalRewards.toString(), activatedValidators.toString(), + totalRewards.toString(), ] ); let candidateId = hexlify(keccak256(encoded)); diff --git a/test/tokens/StakedEthToken.test.js b/test/tokens/StakedEthToken.test.js index f266e1cb..bf4cc88e 100644 --- a/test/tokens/StakedEthToken.test.js +++ b/test/tokens/StakedEthToken.test.js @@ -61,8 +61,8 @@ contract('StakedEthToken', (accounts) => { ['uint256', 'uint256', 'uint256'], [ currentNonce.toString(), - totalRewards.toString(), activatedValidators.toString(), + totalRewards.toString(), ] ); let candidateId = hexlify(keccak256(encoded)); diff --git a/test/tokens/toggleRewards.test.js b/test/tokens/toggleRewards.test.js index 2fabdeb7..0b8c0433 100644 --- a/test/tokens/toggleRewards.test.js +++ b/test/tokens/toggleRewards.test.js @@ -120,93 +120,6 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { ); }); - it('balance is not updated for disabled rewards account', async () => { - await stakedEthToken.toggleRewards(account, true, { - from: admin, - }); - let deposit = ether('5'); - - // mint sETH2 for disabled account - await pool.stake({ - from: account, - value: deposit, - }); - expect(await stakedEthToken.balanceOf(account)).to.be.bignumber.equal( - deposit - ); - expect(await rewardEthToken.balanceOf(account)).to.be.bignumber.equal( - new BN(0) - ); - - // distributor principal updated - expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - distributorPrincipal.add(deposit) - ); - expect( - await rewardEthToken.balanceOf(constants.ZERO_ADDRESS) - ).to.be.bignumber.equal(distributorReward); - - // mint sETH2 for normal account - await pool.stake({ - from: anyone, - value: ether('5'), - }); - expect(await stakedEthToken.balanceOf(anyone)).to.be.bignumber.equal( - deposit - ); - expect(await rewardEthToken.balanceOf(anyone)).to.be.bignumber.equal( - new BN(0) - ); - - // new rewards arrive - let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); - await setTotalRewards({ - rewardEthToken, - oracles, - oracleAccounts, - pool, - totalRewards, - }); - - // arrived reward - let balance = await rewardEthToken.balanceOf(anyone); - expect(balance).to.be.bignumber.greaterThan(new BN(0)); - - // check disabled account balance - expect(await stakedEthToken.balanceOf(account)).to.be.bignumber.equal( - deposit - ); - expect(await rewardEthToken.balanceOf(account)).to.be.bignumber.equal( - new BN(0) - ); - - // check distributor balance - expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( - distributorPrincipal.add(deposit) - ); - expect( - await rewardEthToken.balanceOf(constants.ZERO_ADDRESS) - ).to.be.bignumber.greaterThan(distributorReward); - - // check normal account balance - expect(await stakedEthToken.balanceOf(anyone)).to.be.bignumber.equal( - deposit - ); - - // check transfer for disabled account - await expectRevert( - rewardEthToken.transfer(anyone, balance, { - from: account, - }), - 'SafeMath: subtraction overflow' - ); - - // check transfer for normal account - await rewardEthToken.transfer(account, balance, { - from: anyone, - }); - }); - it('toggling rewards does not affect current rewards balance', async () => { // mint sETH2 for disabled account let deposit = ether('5'); diff --git a/test/tokens/upgrading.test.js b/test/tokens/upgrading.test.js index e6d37eb2..c05ff9b1 100644 --- a/test/tokens/upgrading.test.js +++ b/test/tokens/upgrading.test.js @@ -11,7 +11,7 @@ const RewardEthToken = artifacts.require('RewardEthToken'); contract('RewardEthToken (upgrading)', ([anyone]) => { let admin = contractSettings.admin; - let rewardEthToken, oracles, partnersRevenueSharing, operatorsRevenueSharing; + let rewardEthToken, oracles; after(async () => stopImpersonatingAccount(admin)); @@ -20,36 +20,25 @@ contract('RewardEthToken (upgrading)', ([anyone]) => { await send.ether(anyone, admin, ether('5')); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); - ({ oracles, partnersRevenueSharing, operatorsRevenueSharing } = - await upgradeContracts()); + ({ oracles } = await upgradeContracts()); }); afterEach(async () => resetFork()); it('fails to upgrade with not admin privilege', async () => { await expectRevert( - rewardEthToken.upgrade( - oracles, - operatorsRevenueSharing, - partnersRevenueSharing, - { - from: anyone, - } - ), + rewardEthToken.upgrade(oracles, { + from: anyone, + }), 'OwnablePausable: access denied' ); }); it('fails to upgrade when not paused', async () => { await expectRevert( - rewardEthToken.upgrade( - oracles, - operatorsRevenueSharing, - partnersRevenueSharing, - { - from: admin, - } - ), + rewardEthToken.upgrade(oracles, { + from: admin, + }), 'Pausable: not paused' ); }); @@ -57,14 +46,9 @@ contract('RewardEthToken (upgrading)', ([anyone]) => { it('fails to upgrade twice', async () => { await rewardEthToken.pause({ from: admin }); await expectRevert( - rewardEthToken.upgrade( - oracles, - operatorsRevenueSharing, - partnersRevenueSharing, - { - from: admin, - } - ), + rewardEthToken.upgrade(oracles, { + from: admin, + }), 'RewardEthToken: already upgraded' ); }); diff --git a/test/utils.js b/test/utils.js index 01512dd5..e9f0e089 100644 --- a/test/utils.js +++ b/test/utils.js @@ -6,7 +6,6 @@ const { ether, expectEvent, constants, - time, } = require('@openzeppelin/test-helpers'); const { initializeMerkleRoot, @@ -101,7 +100,7 @@ async function setActivatedValidators({ let encoded = defaultAbiCoder.encode( ['uint256', 'uint256', 'uint256'], - [nonce.toString(), totalRewards.toString(), activatedValidators.toString()] + [nonce.toString(), activatedValidators.toString(), totalRewards.toString()] ); let candidateId = hexlify(keccak256(encoded)); @@ -145,7 +144,7 @@ async function setTotalRewards({ let nonce = await oracles.currentRewardsNonce(); let encoded = defaultAbiCoder.encode( ['uint256', 'uint256', 'uint256'], - [nonce.toString(), totalRewards.toString(), activatedValidators.toString()] + [nonce.toString(), activatedValidators.toString(), totalRewards.toString()] ); let candidateId = hexlify(keccak256(encoded)); @@ -184,8 +183,8 @@ async function setMerkleRoot({ let nonce = await oracles.currentRewardsNonce(); let encoded = defaultAbiCoder.encode( - ['uint256', 'bytes32', 'string'], - [nonce.toString(), merkleRoot, merkleProofs] + ['uint256', 'string', 'bytes32'], + [nonce.toString(), merkleProofs, merkleRoot] ); let candidateId = hexlify(keccak256(encoded)); @@ -387,7 +386,7 @@ async function setupOracleAccounts({ admin, oracles, accounts }) { let oracleAccounts = []; for (let i = 0; i < totalOracles; i++) { let newOracle = accounts[i]; - await oracles.addOracle(newOracle, 'example12.com', 'example13.com', { + await oracles.addOracle(newOracle, { from: admin, }); oracleAccounts.push(newOracle); From 5ec8ca7bbab5772799130c3574ee18b4d67847da Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Wed, 27 Oct 2021 19:25:46 +0300 Subject: [PATCH 17/55] Implement committing operator --- abi/PoolValidators.json | 48 +- contracts/interfaces/IPoolValidators.sol | 17 +- contracts/pool/PoolValidators.sol | 35 +- hardhat.config.js | 7 - package.json | 27 +- test/oracles/Oracles.test.js | 2 +- yarn.lock | 1706 ++++++++++------------ 7 files changed, 807 insertions(+), 1035 deletions(-) diff --git a/abi/PoolValidators.json b/abi/PoolValidators.json index b18b982c..e6bd955f 100644 --- a/abi/PoolValidators.json +++ b/abi/PoolValidators.json @@ -1,23 +1,4 @@ [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "collateral", - "type": "uint256" - } - ], - "name": "CollateralDeposited", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -80,6 +61,25 @@ "name": "OperatorAdded", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "collateral", + "type": "uint256" + } + ], + "name": "OperatorCommitted", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -330,14 +330,8 @@ "type": "function" }, { - "inputs": [ - { - "internalType": "address", - "name": "_operator", - "type": "address" - } - ], - "name": "depositCollateral", + "inputs": [], + "name": "commitOperator", "outputs": [], "stateMutability": "payable", "type": "function" diff --git a/contracts/interfaces/IPoolValidators.sol b/contracts/interfaces/IPoolValidators.sol index 595115ad..29d3e09e 100644 --- a/contracts/interfaces/IPoolValidators.sol +++ b/contracts/interfaces/IPoolValidators.sol @@ -12,11 +12,13 @@ interface IPoolValidators { * @param initializeMerkleRoot - validators registration initialization merkle root. * @param finalizeMerkleRoot - validators registration finalization merkle root. * @param locked - defines whether operator is currently locked. + * @param committed - defines whether operator has committed its readiness to host validators. */ struct Operator { bytes32 initializeMerkleRoot; bytes32 finalizeMerkleRoot; bool locked; + bool committed; } /** @@ -61,11 +63,11 @@ interface IPoolValidators { ); /** - * @dev Event for tracking operator's collateral deposit. - * @param operator - address of the operator. - * @param collateral - amount deposited. + * @dev Event for tracking operator's commitments. + * @param operator - address of the operator that expressed its readiness to host validators. + * @param collateral - collateral amount deposited. */ - event CollateralDeposited( + event OperatorCommitted( address indexed operator, uint256 collateral ); @@ -147,10 +149,11 @@ interface IPoolValidators { ) external; /** - * @dev Function for adding operator's collateral. - * @param _operator - address of the operator to add a collateral for. + * @dev Function for committing operator. If 1 ETH collateral was not deposited yet, + * it must be sent together with the function call. Must be called by the operator address + * specified through the `addOperator` function call. */ - function depositCollateral(address _operator) external payable; + function commitOperator() external payable; /** * @dev Function for withdrawing operator's collateral. Can only be called when the operator was removed. diff --git a/contracts/pool/PoolValidators.sol b/contracts/pool/PoolValidators.sol index 60e0afb0..4b7952c0 100644 --- a/contracts/pool/PoolValidators.sol +++ b/contracts/pool/PoolValidators.sol @@ -87,6 +87,7 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran // update operator operator.initializeMerkleRoot = initializeMerkleRoot; operator.finalizeMerkleRoot = finalizeMerkleRoot; + operator.committed = false; emit OperatorAdded( _operator, @@ -98,17 +99,21 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran } /** - * @dev See {IPoolValidators-depositCollateral}. + * @dev See {IPoolValidators-commitOperator}. */ - function depositCollateral(address _operator) external payable override whenNotPaused { - require(_operator != address(0), "PoolValidators: invalid operator"); - require(collaterals[_operator] == 0, "PoolValidators: collateral exists"); - require(msg.value == pool.VALIDATOR_INIT_DEPOSIT(), "PoolValidators: invalid collateral"); + function commitOperator() external payable override whenNotPaused { + // mark operator as committed + Operator storage operator = operators[msg.sender]; + require(operator.initializeMerkleRoot != "", "PoolValidators: invalid operator"); + operator.committed = true; + + uint256 newCollateral = collaterals[msg.sender].add(msg.value); + require(newCollateral >= pool.VALIDATOR_INIT_DEPOSIT(), "PoolValidators: invalid collateral"); // update collateral - collaterals[_operator] = msg.value; + collaterals[msg.sender] = newCollateral; - emit CollateralDeposited(_operator, msg.value); + emit OperatorCommitted(msg.sender, msg.value); } /** @@ -172,7 +177,9 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran uint256 refundAmount = pool.VALIDATOR_INIT_DEPOSIT(); uint256 operatorCollateral = collaterals[depositData.operator]; - require(operatorCollateral >= refundAmount, "PoolValidators: insufficient collateral"); + if (refundAmount > operatorCollateral) { + refundAmount = operatorCollateral; + } // mark validator as slashed bytes32 validatorId = keccak256(abi.encode(depositData.publicKey)); @@ -209,8 +216,16 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran // fetch operator Operator storage operator = operators[depositData.operator]; - (bytes32 initializeMerkleRoot, bool locked) = (operator.initializeMerkleRoot, operator.locked); - require(initializeMerkleRoot != "", "PoolValidators: invalid operator"); + ( + bytes32 initializeMerkleRoot, + bool locked, + bool committed + ) = ( + operator.initializeMerkleRoot, + operator.locked, + operator.committed + ); + require(committed, "PoolValidators: operator not committed"); require( collaterals[depositData.operator] >= pool.VALIDATOR_INIT_DEPOSIT(), "PoolValidators: invalid operator collateral" diff --git a/hardhat.config.js b/hardhat.config.js index 028fb6e5..2b7d4d3f 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -10,7 +10,6 @@ require('hardhat-contract-sizer'); require('hardhat-abi-exporter'); require('@nomiclabs/hardhat-etherscan'); -const GAS_PRICE = 20e9; // 20 Gwei const BLOCK_NUMBER = 12985770; const OPTIMIZER_RUNS = 5000000; const log = (...text) => console.log(gray(...['└─> [DEBUG]'].concat(text))); @@ -102,9 +101,6 @@ module.exports = { }, networks: { hardhat: { - blockGasLimit: 0x1fffffffffffff, - gasPrice: GAS_PRICE, - allowUnlimitedContractSize: true, forking: { url: process.env.HARDHAT_FORK_API_URL, blockNumber: BLOCK_NUMBER, @@ -112,9 +108,6 @@ module.exports = { }, local: { url: 'http://localhost:8545', - blockGasLimit: 0x1fffffffffffff, - gasPrice: GAS_PRICE, - allowUnlimitedContractSize: true, }, }, throwOnTransactionFailures: true, diff --git a/package.json b/package.json index 606e035d..b4bacaa7 100644 --- a/package.json +++ b/package.json @@ -47,31 +47,30 @@ "devDependencies": { "@codechecks/client": "^0.1.11", "@nomiclabs/hardhat-ethers": "^2.0.2", - "@nomiclabs/hardhat-etherscan": "^2.1.4", + "@nomiclabs/hardhat-etherscan": "^2.1.6", "@nomiclabs/hardhat-truffle5": "^2.0.0", "@nomiclabs/hardhat-web3": "^2.0.0", "@openzeppelin/contracts": "3.4.1", "@openzeppelin/contracts-upgradeable": "3.4.1", - "@openzeppelin/hardhat-upgrades": "^1.9.0", - "@openzeppelin/test-helpers": "^0.5.12", + "@openzeppelin/hardhat-upgrades": "^1.10.0", + "@openzeppelin/test-helpers": "^0.5.13", "chai": "^4.3.4", "chalk": "^4.1.2", "eslint": "^7.32.0", "eslint-config-prettier": "^8.3.0", - "eslint-plugin-prettier": "^3.4.0", + "eslint-plugin-prettier": "^4.0.0", "eth-sig-util": "^3.0.1", - "ethereumjs-util": "^7.0.10", - "ethers": "^5.1.4", - "hardhat": "^2.1.2", - "hardhat-abi-exporter": "^2.2.1", - "hardhat-contract-sizer": "^2.0.3", + "ethers": "^5.4.7", + "hardhat": "^2.6.4", + "hardhat-abi-exporter": "^2.3.0", + "hardhat-contract-sizer": "^2.1.1", "hardhat-gas-reporter": "^1.0.4", - "husky": "^7.0.1", - "lint-staged": "11.1.1", - "prettier": "^2.3.2", + "husky": "^7.0.2", + "lint-staged": "11.1.2", + "prettier": "^2.4.1", "solhint": "^3.3.6", - "solidity-coverage": "^0.7.16", - "web3": "^1.3.5" + "solidity-coverage": "^0.7.17", + "web3": "^1.5.3" }, "dependencies": {} } diff --git a/test/oracles/Oracles.test.js b/test/oracles/Oracles.test.js index 9f61876c..d7d049fa 100644 --- a/test/oracles/Oracles.test.js +++ b/test/oracles/Oracles.test.js @@ -401,8 +401,8 @@ contract('Oracles', ([_, anyone, ...accounts]) => { ['uint256', 'uint256', 'uint256'], [ currentNonce.toString(), - totalRewards.toString(), activatedValidators.toString(), + totalRewards.toString(), ] ); candidateId = keccak256(encoded); diff --git a/yarn.lock b/yarn.lock index f4b704a1..5653a1ea 100644 --- a/yarn.lock +++ b/yarn.lock @@ -56,11 +56,6 @@ ts-node "^8.0.2" url-join "^4.0.0" -"@cto.af/textdecoder@^0.0.0": - version "0.0.0" - resolved "https://registry.yarnpkg.com/@cto.af/textdecoder/-/textdecoder-0.0.0.tgz#e1e8d84c936c30a0f4619971f19ca41941af9fdc" - integrity sha512-sJpx3F5xcVV/9jNYJQtvimo4Vfld/nD3ph+ZWtQzZ03Zo8rJC7QKQTRcIGS13Rcz80DwFNthCWMrd58vpY4ZAQ== - "@eslint/eslintrc@^0.4.3": version "0.4.3" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" @@ -76,6 +71,77 @@ minimatch "^3.0.4" strip-json-comments "^3.1.1" +"@ethereumjs/block@^3.4.0", "@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.5.1": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.5.1.tgz#59737d393503249aa750c37dfc83896234f4e175" + integrity sha512-MoY9bHKABOBK6BW0v1N1Oc0Cve4x/giX67M3TtrVBUsKQTj2eznLGKpydoitxWSZ+WgKKSVhfRMzbCGRwk7T5w== + dependencies: + "@ethereumjs/common" "^2.5.0" + "@ethereumjs/tx" "^3.3.1" + ethereumjs-util "^7.1.1" + merkle-patricia-tree "^4.2.1" + +"@ethereumjs/blockchain@^5.4.0", "@ethereumjs/blockchain@^5.4.1": + version "5.4.2" + resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.4.2.tgz#5074e0a0157818762a5f5175ea0bd93c5455fe32" + integrity sha512-AOAAwz/lw2lciG9gf5wHi7M/qknraXXnLR66lYgbQ04qfyFC3ZE5x/5rLVm1Vu+kfJLlKrYZTmA0IbOkc7kvgw== + dependencies: + "@ethereumjs/block" "^3.5.1" + "@ethereumjs/common" "^2.5.0" + "@ethereumjs/ethash" "^1.1.0" + debug "^2.2.0" + ethereumjs-util "^7.1.1" + level-mem "^5.0.1" + lru-cache "^5.1.1" + rlp "^2.2.4" + semaphore-async-await "^1.5.1" + +"@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268" + integrity sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg== + dependencies: + crc-32 "^1.2.0" + ethereumjs-util "^7.1.1" + +"@ethereumjs/ethash@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/ethash/-/ethash-1.1.0.tgz#7c5918ffcaa9cb9c1dc7d12f77ef038c11fb83fb" + integrity sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA== + dependencies: + "@ethereumjs/block" "^3.5.0" + "@types/levelup" "^4.3.0" + buffer-xor "^2.0.1" + ethereumjs-util "^7.1.1" + miller-rabin "^4.0.0" + +"@ethereumjs/tx@^3.2.1", "@ethereumjs/tx@^3.3.0", "@ethereumjs/tx@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.1.tgz#83b6b1f9fe8182d6f2a1d7bff8213631629ab8a4" + integrity sha512-DXcBdW4upjU11FGlGBAMJw4jXAveL1Siu/8t9jfJ90dehOmpCyGTGWXr6tFzN8663Et8UFLcw3IdV7JJt88iZw== + dependencies: + "@ethereumjs/common" "^2.5.0" + ethereumjs-util "^7.1.1" + +"@ethereumjs/vm@^5.5.2": + version "5.5.3" + resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.5.3.tgz#dc8b30dd35efb589db093592600207660fa8dada" + integrity sha512-0k5OreWnlgXYs54wohgO11jtGI05GDasj2EYxzuaStxTi15CS3vow5wGYELC1pG9xngE1F/mFmKi/f14XRuDow== + dependencies: + "@ethereumjs/block" "^3.5.0" + "@ethereumjs/blockchain" "^5.4.1" + "@ethereumjs/common" "^2.5.0" + "@ethereumjs/tx" "^3.3.1" + async-eventemitter "^0.2.4" + core-js-pure "^3.0.1" + debug "^2.2.0" + ethereumjs-util "^7.1.1" + functional-red-black-tree "^1.0.1" + mcl-wasm "^0.7.1" + merkle-patricia-tree "^4.2.1" + rustbn.js "~0.2.0" + util.promisify "^1.0.1" + "@ethersproject/abi@5.0.0-beta.153": version "5.0.0-beta.153" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.0-beta.153.tgz#43a37172b33794e4562999f6e2d555b7599a8eee" @@ -106,20 +172,20 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.4" -"@ethersproject/abi@5.1.2", "@ethersproject/abi@^5.1.0": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.1.2.tgz#a8e75cd0455e6dc9e4861c3d1c22bbe436c1d775" - integrity sha512-uMhoQVPX0UtfzTpekYQSEUcJGDgsJ25ifz+SV6PDETWaUFhcR8RNgb1QPTASP13inW8r6iy0/Xdq9D5hK2pNvA== - dependencies: - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/hash" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/strings" "^5.1.0" +"@ethersproject/abi@5.4.1", "@ethersproject/abi@^5.4.0": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.4.1.tgz#6ac28fafc9ef6f5a7a37e30356a2eb31fa05d39b" + integrity sha512-9mhbjUk76BiSluiiW4BaYyI58KSbDMMQpCLdsAR+RsT2GyATiNYxVv+pGWRrekmsIdY3I+hOqsYQSTkc8L/mcg== + dependencies: + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/hash" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/strings" "^5.4.0" "@ethersproject/abi@^5.0.0-beta.146": version "5.0.13" @@ -151,18 +217,18 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@ethersproject/abstract-provider@5.1.0", "@ethersproject/abstract-provider@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.1.0.tgz#1f24c56cda5524ef4ed3cfc562a01d6b6f8eeb0b" - integrity sha512-8dJUnT8VNvPwWhYIau4dwp7qe1g+KgdRm4XTWvjkI9gAT2zZa90WF5ApdZ3vl1r6NDmnn6vUVvyphClRZRteTQ== +"@ethersproject/abstract-provider@5.4.1": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.4.1.tgz#e404309a29f771bd4d28dbafadcaa184668c2a6e" + integrity sha512-3EedfKI3LVpjSKgAxoUaI+gB27frKsxzm+r21w9G60Ugk+3wVLQwhi1LsEJAKNV7WoZc8CIpNrATlL1QFABjtQ== dependencies: - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/networks" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - "@ethersproject/web" "^5.1.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/networks" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/web" "^5.4.0" "@ethersproject/abstract-provider@^5.0.8": version "5.0.10" @@ -190,16 +256,16 @@ "@ethersproject/transactions" "^5.4.0" "@ethersproject/web" "^5.4.0" -"@ethersproject/abstract-signer@5.1.0", "@ethersproject/abstract-signer@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.1.0.tgz#744c7a2d0ebe3cc0bc38294d0f53d5ca3f4e49e3" - integrity sha512-qQDMkjGZSSJSKl6AnfTgmz9FSnzq3iEoEbHTYwjDlEAv+LNP7zd4ixCcVWlWyk+2siud856M5CRhAmPdupeN9w== +"@ethersproject/abstract-signer@5.4.1", "@ethersproject/abstract-signer@^5.4.0": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.4.1.tgz#e4e9abcf4dd4f1ba0db7dff9746a5f78f355ea81" + integrity sha512-SkkFL5HVq1k4/25dM+NWP9MILgohJCgGv5xT5AcRruGz4ILpfHeBtO/y6j+Z3UN/PAjDeb4P7E51Yh8wcGNLGA== dependencies: - "@ethersproject/abstract-provider" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" + "@ethersproject/abstract-provider" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" "@ethersproject/abstract-signer@^5.0.10": version "5.0.14" @@ -212,27 +278,16 @@ "@ethersproject/logger" "^5.0.8" "@ethersproject/properties" "^5.0.7" -"@ethersproject/abstract-signer@^5.4.0": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.4.1.tgz#e4e9abcf4dd4f1ba0db7dff9746a5f78f355ea81" - integrity sha512-SkkFL5HVq1k4/25dM+NWP9MILgohJCgGv5xT5AcRruGz4ILpfHeBtO/y6j+Z3UN/PAjDeb4P7E51Yh8wcGNLGA== +"@ethersproject/address@5.4.0", "@ethersproject/address@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.4.0.tgz#ba2d00a0f8c4c0854933b963b9a3a9f6eb4a37a3" + integrity sha512-SD0VgOEkcACEG/C6xavlU1Hy3m5DGSXW3CUHkaaEHbAPPsgi0coP5oNPsxau8eTlZOk/bpa/hKeCNoK5IzVI2Q== dependencies: - "@ethersproject/abstract-provider" "^5.4.0" "@ethersproject/bignumber" "^5.4.0" "@ethersproject/bytes" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - -"@ethersproject/address@5.1.0", "@ethersproject/address@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.1.0.tgz#3854fd7ebcb6af7597de66f847c3345dae735b58" - integrity sha512-rfWQR12eHn2cpstCFS4RF7oGjfbkZb0oqep+BfrT+gWEGWG2IowJvIsacPOvzyS1jhNF4MQ4BS59B04Mbovteg== - dependencies: - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/rlp" "^5.1.0" + "@ethersproject/rlp" "^5.4.0" "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.0.9": version "5.0.11" @@ -245,23 +300,12 @@ "@ethersproject/logger" "^5.0.8" "@ethersproject/rlp" "^5.0.7" -"@ethersproject/address@^5.4.0": +"@ethersproject/base64@5.4.0", "@ethersproject/base64@^5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.4.0.tgz#ba2d00a0f8c4c0854933b963b9a3a9f6eb4a37a3" - integrity sha512-SD0VgOEkcACEG/C6xavlU1Hy3m5DGSXW3CUHkaaEHbAPPsgi0coP5oNPsxau8eTlZOk/bpa/hKeCNoK5IzVI2Q== + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.4.0.tgz#7252bf65295954c9048c7ca5f43e5c86441b2a9a" + integrity sha512-CjQw6E17QDSSC5jiM9YpF7N1aSCHmYGMt9bWD8PWv6YPMxjsys2/Q8xLrROKI3IWJ7sFfZ8B3flKDTM5wlWuZQ== dependencies: - "@ethersproject/bignumber" "^5.4.0" "@ethersproject/bytes" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/rlp" "^5.4.0" - -"@ethersproject/base64@5.1.0", "@ethersproject/base64@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.1.0.tgz#27240c174d0a4e13f6eae87416fd876caf7f42b6" - integrity sha512-npD1bLvK4Bcxz+m4EMkx+F8Rd7CnqS9DYnhNu0/GlQBXhWjvfoAZzk5HJ0f1qeyp8d+A86PTuzLOGOXf4/CN8g== - dependencies: - "@ethersproject/bytes" "^5.1.0" "@ethersproject/base64@^5.0.7": version "5.0.9" @@ -270,29 +314,22 @@ dependencies: "@ethersproject/bytes" "^5.0.9" -"@ethersproject/base64@^5.4.0": +"@ethersproject/basex@5.4.0", "@ethersproject/basex@^5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.4.0.tgz#7252bf65295954c9048c7ca5f43e5c86441b2a9a" - integrity sha512-CjQw6E17QDSSC5jiM9YpF7N1aSCHmYGMt9bWD8PWv6YPMxjsys2/Q8xLrROKI3IWJ7sFfZ8B3flKDTM5wlWuZQ== + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.4.0.tgz#0a2da0f4e76c504a94f2b21d3161ed9438c7f8a6" + integrity sha512-J07+QCVJ7np2bcpxydFVf/CuYo9mZ7T73Pe7KQY4c1lRlrixMeblauMxHXD0MPwFmUHZIILDNViVkykFBZylbg== dependencies: "@ethersproject/bytes" "^5.4.0" + "@ethersproject/properties" "^5.4.0" -"@ethersproject/basex@5.1.0", "@ethersproject/basex@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.1.0.tgz#80da2e86f9da0cb5ccd446b337364d791f6a131c" - integrity sha512-vBKr39bum7DDbOvkr1Sj19bRMEPA4FnST6Utt6xhDzI7o7L6QNkDn2yrCfP+hnvJGhZFKtLygWwqlTBZoBXYLg== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - -"@ethersproject/bignumber@5.1.1", "@ethersproject/bignumber@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.1.1.tgz#84812695253ccbc639117f7ac49ee1529b68e637" - integrity sha512-AVz5iqz7+70RIqoQTznsdJ6DOVBYciNlvO+AlQmPTB6ofCvoihI9bQdr6wljsX+d5W7Yc4nyvQvP4JMzg0Agig== +"@ethersproject/bignumber@5.4.2": + version "5.4.2" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.4.2.tgz#44232e015ae4ce82ac034de549eb3583c71283d8" + integrity sha512-oIBDhsKy5bs7j36JlaTzFgNPaZjiNDOXsdSgSpXRucUl+UA6L/1YLlFeI3cPAoodcenzF4nxNPV13pcy7XbWjA== dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - bn.js "^4.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + bn.js "^4.11.9" "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.13", "@ethersproject/bignumber@^5.0.7": version "5.0.15" @@ -312,12 +349,12 @@ "@ethersproject/logger" "^5.4.0" bn.js "^4.11.9" -"@ethersproject/bytes@5.1.0", "@ethersproject/bytes@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.1.0.tgz#55dfa9c4c21df1b1b538be3accb50fb76d5facfd" - integrity sha512-sGTxb+LVjFxJcJeUswAIK6ncgOrh3D8c192iEJd7mLr95V6du119rRfYT/b87WPkZ5I3gRBUYIYXtdgCWACe8g== +"@ethersproject/bytes@5.4.0", "@ethersproject/bytes@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.4.0.tgz#56fa32ce3bf67153756dbaefda921d1d4774404e" + integrity sha512-H60ceqgTHbhzOj4uRc/83SCN9d+BSUnOkrr2intevqdtEMO1JFVZ1XL84OEZV+QjV36OaZYxtnt4lGmxcGsPfA== dependencies: - "@ethersproject/logger" "^5.1.0" + "@ethersproject/logger" "^5.4.0" "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.0.9": version "5.0.11" @@ -326,19 +363,12 @@ dependencies: "@ethersproject/logger" "^5.0.8" -"@ethersproject/bytes@^5.4.0": +"@ethersproject/constants@5.4.0", "@ethersproject/constants@^5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.4.0.tgz#56fa32ce3bf67153756dbaefda921d1d4774404e" - integrity sha512-H60ceqgTHbhzOj4uRc/83SCN9d+BSUnOkrr2intevqdtEMO1JFVZ1XL84OEZV+QjV36OaZYxtnt4lGmxcGsPfA== - dependencies: - "@ethersproject/logger" "^5.4.0" - -"@ethersproject/constants@5.1.0", "@ethersproject/constants@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.1.0.tgz#4e7da6367ea0e9be87585d8b09f3fccf384b1452" - integrity sha512-0/SuHrxc8R8k+JiLmJymxHJbojUDWBQqO+b+XFdwaP0jGzqC09YDy/CAlSZB6qHsBifY8X3I89HcK/oMqxRdBw== + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.4.0.tgz#ee0bdcb30bf1b532d2353c977bf2ef1ee117958a" + integrity sha512-tzjn6S7sj9+DIIeKTJLjK9WGN2Tj0P++Z8ONEIlZjyoTkBuODN+0VfhAyYksKi43l1Sx9tX2VlFfzjfmr5Wl3Q== dependencies: - "@ethersproject/bignumber" "^5.1.0" + "@ethersproject/bignumber" "^5.4.0" "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.0.8": version "5.0.10" @@ -347,42 +377,35 @@ dependencies: "@ethersproject/bignumber" "^5.0.13" -"@ethersproject/constants@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.4.0.tgz#ee0bdcb30bf1b532d2353c977bf2ef1ee117958a" - integrity sha512-tzjn6S7sj9+DIIeKTJLjK9WGN2Tj0P++Z8ONEIlZjyoTkBuODN+0VfhAyYksKi43l1Sx9tX2VlFfzjfmr5Wl3Q== +"@ethersproject/contracts@5.4.1": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.4.1.tgz#3eb4f35b7fe60a962a75804ada2746494df3e470" + integrity sha512-m+z2ZgPy4pyR15Je//dUaymRUZq5MtDajF6GwFbGAVmKz/RF+DNIPwF0k5qEcL3wPGVqUjFg2/krlCRVTU4T5w== dependencies: + "@ethersproject/abi" "^5.4.0" + "@ethersproject/abstract-provider" "^5.4.0" + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" -"@ethersproject/contracts@5.1.1": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.1.1.tgz#c66cb6d618fcbd73e20a6b808e8f768b2b781d0b" - integrity sha512-6WwktLJ0DFWU8pDkgH4IGttQHhQN4SnwKFu9h+QYVe48VGWtbDu4W8/q/7QA1u/HWlWMrKxqawPiZUJj0UMvOw== - dependencies: - "@ethersproject/abi" "^5.1.0" - "@ethersproject/abstract-provider" "^5.1.0" - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - -"@ethersproject/hash@5.1.0", "@ethersproject/hash@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.1.0.tgz#40961d64837d57f580b7b055e0d74174876d891e" - integrity sha512-fNwry20yLLPpnRRwm3fBL+2ksgO+KMadxM44WJmRIoTKzy4269+rbq9KFoe2LTqq2CXJM2CE70beGaNrpuqflQ== - dependencies: - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/strings" "^5.1.0" +"@ethersproject/hash@5.4.0", "@ethersproject/hash@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.4.0.tgz#d18a8e927e828e22860a011f39e429d388344ae0" + integrity sha512-xymAM9tmikKgbktOCjW60Z5sdouiIIurkZUr9oW5NOex5uwxrbsYG09kb5bMcNjlVeJD3yPivTNzViIs1GCbqA== + dependencies: + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/strings" "^5.4.0" "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.10", "@ethersproject/hash@^5.0.4": version "5.0.12" @@ -398,63 +421,49 @@ "@ethersproject/properties" "^5.0.7" "@ethersproject/strings" "^5.0.8" -"@ethersproject/hash@^5.4.0": +"@ethersproject/hdnode@5.4.0", "@ethersproject/hdnode@^5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.4.0.tgz#d18a8e927e828e22860a011f39e429d388344ae0" - integrity sha512-xymAM9tmikKgbktOCjW60Z5sdouiIIurkZUr9oW5NOex5uwxrbsYG09kb5bMcNjlVeJD3yPivTNzViIs1GCbqA== + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.4.0.tgz#4bc9999b9a12eb5ce80c5faa83114a57e4107cac" + integrity sha512-pKxdS0KAaeVGfZPp1KOiDLB0jba11tG6OP1u11QnYfb7pXn6IZx0xceqWRr6ygke8+Kw74IpOoSi7/DwANhy8Q== dependencies: "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/address" "^5.4.0" + "@ethersproject/basex" "^5.4.0" "@ethersproject/bignumber" "^5.4.0" "@ethersproject/bytes" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" "@ethersproject/logger" "^5.4.0" + "@ethersproject/pbkdf2" "^5.4.0" "@ethersproject/properties" "^5.4.0" + "@ethersproject/sha2" "^5.4.0" + "@ethersproject/signing-key" "^5.4.0" "@ethersproject/strings" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/wordlists" "^5.4.0" -"@ethersproject/hdnode@5.1.0", "@ethersproject/hdnode@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.1.0.tgz#2bf5c4048935136ce83e9242e1bd570afcc0bc83" - integrity sha512-obIWdlujloExPHWJGmhJO/sETOOo7SEb6qemV4f8kyFoXg+cJK+Ta9SvBrj7hsUK85n3LZeZJZRjjM7oez3Clg== - dependencies: - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/basex" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/pbkdf2" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/sha2" "^5.1.0" - "@ethersproject/signing-key" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - "@ethersproject/wordlists" "^5.1.0" - -"@ethersproject/json-wallets@5.1.0", "@ethersproject/json-wallets@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.1.0.tgz#bba7af2e520e8aea4d3829d80520db5d2e4fb8d2" - integrity sha512-00n2iBy27w8zrGZSiU762UOVuzCQZxUZxopsZC47++js6xUFuI74DHcJ5K/2pddlF1YBskvmMuboEu1geK8mnA== - dependencies: - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/hdnode" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/pbkdf2" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/random" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" +"@ethersproject/json-wallets@5.4.0", "@ethersproject/json-wallets@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.4.0.tgz#2583341cfe313fc9856642e8ace3080154145e95" + integrity sha512-igWcu3fx4aiczrzEHwG1xJZo9l1cFfQOWzTqwRw/xcvxTk58q4f9M7cjh51EKphMHvrJtcezJ1gf1q1AUOfEQQ== + dependencies: + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/hdnode" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/pbkdf2" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/random" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.1.0", "@ethersproject/keccak256@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.1.0.tgz#fdcd88fb13bfef4271b225cdd8dec4d315c8e60e" - integrity sha512-vrTB1W6AEYoadww5c9UyVJ2YcSiyIUTNDRccZIgwTmFFoSHwBtcvG1hqy9RzJ1T0bMdATbM9Hfx2mJ6H0i7Hig== +"@ethersproject/keccak256@5.4.0", "@ethersproject/keccak256@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.4.0.tgz#7143b8eea4976080241d2bd92e3b1f1bf7025318" + integrity sha512-FBI1plWet+dPUvAzPAeHzRKiPpETQzqSUWR1wXJGHVWi4i8bOSrpC3NwpkPjgeXG7MnugVc1B42VbfnQikyC/A== dependencies: - "@ethersproject/bytes" "^5.1.0" + "@ethersproject/bytes" "^5.4.0" js-sha3 "0.5.7" "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.0.7": @@ -465,18 +474,10 @@ "@ethersproject/bytes" "^5.0.9" js-sha3 "0.5.7" -"@ethersproject/keccak256@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.4.0.tgz#7143b8eea4976080241d2bd92e3b1f1bf7025318" - integrity sha512-FBI1plWet+dPUvAzPAeHzRKiPpETQzqSUWR1wXJGHVWi4i8bOSrpC3NwpkPjgeXG7MnugVc1B42VbfnQikyC/A== - dependencies: - "@ethersproject/bytes" "^5.4.0" - js-sha3 "0.5.7" - -"@ethersproject/logger@5.1.0", "@ethersproject/logger@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.1.0.tgz#4cdeeefac029373349d5818f39c31b82cc6d9bbf" - integrity sha512-wtUaD1lBX10HBXjjKV9VHCBnTdUaKQnQ2XSET1ezglqLdPdllNOIlLfhyCRqXm5xwcjExVI5ETokOYfjPtaAlw== +"@ethersproject/logger@5.4.1": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.4.1.tgz#503bd33683538b923c578c07d1c2c0dd18672054" + integrity sha512-DZ+bRinnYLPw1yAC64oRl0QyVZj43QeHIhVKfD/+YwSz4wsv1pfwb5SOFjz+r710YEWzU6LrhuSjpSO+6PeE4A== "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.0.8": version "5.0.10" @@ -488,12 +489,12 @@ resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.4.0.tgz#f39adadf62ad610c420bcd156fd41270e91b3ca9" integrity sha512-xYdWGGQ9P2cxBayt64d8LC8aPFJk6yWCawQi/4eJ4+oJdMMjEBMrIcIMZ9AxhwpPVmnBPrsB10PcXGmGAqgUEQ== -"@ethersproject/networks@5.1.0", "@ethersproject/networks@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.1.0.tgz#f537290cb05aa6dc5e81e910926c04cfd5814bca" - integrity sha512-A/NIrIED/G/IgU1XUukOA3WcFRxn2I4O5GxsYGA5nFlIi+UZWdGojs85I1VXkR1gX9eFnDXzjE6OtbgZHjFhIA== +"@ethersproject/networks@5.4.2": + version "5.4.2" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.4.2.tgz#2247d977626e97e2c3b8ee73cd2457babde0ce35" + integrity sha512-eekOhvJyBnuibfJnhtK46b8HimBc5+4gqpvd1/H9LEl7Q7/qhsIhM81dI9Fcnjpk3jB1aTy6bj0hz3cifhNeYw== dependencies: - "@ethersproject/logger" "^5.1.0" + "@ethersproject/logger" "^5.4.0" "@ethersproject/networks@^5.0.7": version "5.0.9" @@ -509,20 +510,20 @@ dependencies: "@ethersproject/logger" "^5.4.0" -"@ethersproject/pbkdf2@5.1.0", "@ethersproject/pbkdf2@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.1.0.tgz#6b740a85dc780e879338af74856ca2c0d3b24d19" - integrity sha512-B8cUbHHTgs8OtgJIafrRcz/YPDobVd5Ru8gTnShOiM9EBuFpYHQpq3+8iQJ6pyczDu6HP/oc/njAsIBhwFZYew== +"@ethersproject/pbkdf2@5.4.0", "@ethersproject/pbkdf2@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.4.0.tgz#ed88782a67fda1594c22d60d0ca911a9d669641c" + integrity sha512-x94aIv6tiA04g6BnazZSLoRXqyusawRyZWlUhKip2jvoLpzJuLb//KtMM6PEovE47pMbW+Qe1uw+68ameJjB7g== dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/sha2" "^5.1.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/sha2" "^5.4.0" -"@ethersproject/properties@5.1.0", "@ethersproject/properties@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.1.0.tgz#9484bd6def16595fc6e4bdc26f29dff4d3f6ac42" - integrity sha512-519KKTwgmH42AQL3+GFV3SX6khYEfHsvI6v8HYejlkigSDuqttdgVygFTDsGlofNFchhDwuclrxQnD5B0YLNMg== +"@ethersproject/properties@5.4.1": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.4.1.tgz#9f051f976ce790142c6261ccb7b826eaae1f2f36" + integrity sha512-cyCGlF8wWlIZyizsj2PpbJ9I7rIlUAfnHYwy/T90pdkSn/NFTa5YWZx2wTJBe9V7dD65dcrrEMisCRUJiq6n3w== dependencies: - "@ethersproject/logger" "^5.1.0" + "@ethersproject/logger" "^5.4.0" "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.0.7": version "5.0.9" @@ -538,46 +539,46 @@ dependencies: "@ethersproject/logger" "^5.4.0" -"@ethersproject/providers@5.1.2": - version "5.1.2" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.1.2.tgz#4e4459698903f911402fe91aa7544eb07f3921ed" - integrity sha512-GqsS8rd+eyd4eNkcNgzZ4l9IRULBPUZa7JPnv22k4MHflMobUseyhfbVnmoN5bVNNkOxjV1IPTw9i0sV1hwdpg== - dependencies: - "@ethersproject/abstract-provider" "^5.1.0" - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/basex" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/hash" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/networks" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/random" "^5.1.0" - "@ethersproject/rlp" "^5.1.0" - "@ethersproject/sha2" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - "@ethersproject/web" "^5.1.0" +"@ethersproject/providers@5.4.5": + version "5.4.5" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.4.5.tgz#eb2ea2a743a8115f79604a8157233a3a2c832928" + integrity sha512-1GkrvkiAw3Fj28cwi1Sqm8ED1RtERtpdXmRfwIBGmqBSN5MoeRUHuwHPppMtbPayPgpFcvD7/Gdc9doO5fGYgw== + dependencies: + "@ethersproject/abstract-provider" "^5.4.0" + "@ethersproject/abstract-signer" "^5.4.0" + "@ethersproject/address" "^5.4.0" + "@ethersproject/basex" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/hash" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/networks" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/random" "^5.4.0" + "@ethersproject/rlp" "^5.4.0" + "@ethersproject/sha2" "^5.4.0" + "@ethersproject/strings" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/web" "^5.4.0" bech32 "1.1.4" - ws "7.2.3" + ws "7.4.6" -"@ethersproject/random@5.1.0", "@ethersproject/random@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.1.0.tgz#0bdff2554df03ebc5f75689614f2d58ea0d9a71f" - integrity sha512-+uuczLQZ4+no9cP6TCoCktXx0u2YbNaRT7lRkSt12d8263e702f0u+4JnnRO8Qmv5nylWJebnqCHzyxP+6mLqw== +"@ethersproject/random@5.4.0", "@ethersproject/random@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.4.0.tgz#9cdde60e160d024be39cc16f8de3b9ce39191e16" + integrity sha512-pnpWNQlf0VAZDEOVp1rsYQosmv2o0ITS/PecNw+mS2/btF8eYdspkN0vIXrCMtkX09EAh9bdk8GoXmFXM1eAKw== dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" -"@ethersproject/rlp@5.1.0", "@ethersproject/rlp@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.1.0.tgz#700f4f071c27fa298d3c1d637485fefe919dd084" - integrity sha512-vDTyHIwNPrecy55gKGZ47eJZhBm8LLBxihzi5ou+zrSvYTpkSTWRcKUlXFDFQVwfWB+P5PGyERAdiDEI76clxw== +"@ethersproject/rlp@5.4.0", "@ethersproject/rlp@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.4.0.tgz#de61afda5ff979454e76d3b3310a6c32ad060931" + integrity sha512-0I7MZKfi+T5+G8atId9QaQKHRvvasM/kqLyAH4XxBCBchAooH2EX5rL9kYZWwcm3awYV+XC7VF6nLhfeQFKVPg== dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" "@ethersproject/rlp@^5.0.7": version "5.0.9" @@ -587,33 +588,26 @@ "@ethersproject/bytes" "^5.0.9" "@ethersproject/logger" "^5.0.8" -"@ethersproject/rlp@^5.4.0": +"@ethersproject/sha2@5.4.0", "@ethersproject/sha2@^5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.4.0.tgz#de61afda5ff979454e76d3b3310a6c32ad060931" - integrity sha512-0I7MZKfi+T5+G8atId9QaQKHRvvasM/kqLyAH4XxBCBchAooH2EX5rL9kYZWwcm3awYV+XC7VF6nLhfeQFKVPg== + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.4.0.tgz#c9a8db1037014cbc4e9482bd662f86c090440371" + integrity sha512-siheo36r1WD7Cy+bDdE1BJ8y0bDtqXCOxRMzPa4bV1TGt/eTUUt03BHoJNB6reWJD8A30E/pdJ8WFkq+/uz4Gg== dependencies: "@ethersproject/bytes" "^5.4.0" "@ethersproject/logger" "^5.4.0" + hash.js "1.1.7" -"@ethersproject/sha2@5.1.0", "@ethersproject/sha2@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.1.0.tgz#6ca42d1a26884b3e32ffa943fe6494af7211506c" - integrity sha512-+fNSeZRstOpdRJpdGUkRONFCaiAqWkc91zXgg76Nlp5ndBQE25Kk5yK8gCPG1aGnCrbariiPr5j9DmrYH78JCA== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - hash.js "1.1.3" - -"@ethersproject/signing-key@5.1.0", "@ethersproject/signing-key@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.1.0.tgz#6eddfbddb6826b597b9650e01acf817bf8991b9c" - integrity sha512-tE5LFlbmdObG8bY04NpuwPWSRPgEswfxweAI1sH7TbP0ml1elNfqcq7ii/3AvIN05i5U0Pkm3Tf8bramt8MmLw== +"@ethersproject/signing-key@5.4.0", "@ethersproject/signing-key@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.4.0.tgz#2f05120984e81cf89a3d5f6dec5c68ee0894fbec" + integrity sha512-q8POUeywx6AKg2/jX9qBYZIAmKSB4ubGXdQ88l40hmATj29JnG5pp331nAWwwxPn2Qao4JpWHNZsQN+bPiSW9A== dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - bn.js "^4.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + bn.js "^4.11.9" elliptic "6.5.4" + hash.js "1.1.7" "@ethersproject/signing-key@^5.0.8": version "5.0.11" @@ -625,37 +619,25 @@ "@ethersproject/properties" "^5.0.7" elliptic "6.5.4" -"@ethersproject/signing-key@^5.4.0": +"@ethersproject/solidity@5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.4.0.tgz#2f05120984e81cf89a3d5f6dec5c68ee0894fbec" - integrity sha512-q8POUeywx6AKg2/jX9qBYZIAmKSB4ubGXdQ88l40hmATj29JnG5pp331nAWwwxPn2Qao4JpWHNZsQN+bPiSW9A== + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.4.0.tgz#1305e058ea02dc4891df18b33232b11a14ece9ec" + integrity sha512-XFQTZ7wFSHOhHcV1DpcWj7VXECEiSrBuv7JErJvB9Uo+KfCdc3QtUZV+Vjh/AAaYgezUEKbCtE6Khjm44seevQ== dependencies: + "@ethersproject/bignumber" "^5.4.0" "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - bn.js "^4.11.9" - elliptic "6.5.4" - hash.js "1.1.7" - -"@ethersproject/solidity@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.1.0.tgz#095a9c75244edccb26c452c155736d363399b954" - integrity sha512-kPodsGyo9zg1g9XSXp1lGhFaezBAUUsAUB1Vf6OkppE5Wksg4Et+x3kG4m7J/uShDMP2upkJtHNsIBK2XkVpKQ== - dependencies: - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/sha2" "^5.1.0" - "@ethersproject/strings" "^5.1.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/sha2" "^5.4.0" + "@ethersproject/strings" "^5.4.0" -"@ethersproject/strings@5.1.0", "@ethersproject/strings@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.1.0.tgz#0f95a56c3c8c9d5510a06c241d818779750e2da5" - integrity sha512-perBZy0RrmmL0ejiFGUOlBVjMsUceqLut3OBP3zP96LhiJWWbS8u1NqQVgN4/Gyrbziuda66DxiQocXhsvx+Sw== +"@ethersproject/strings@5.4.0", "@ethersproject/strings@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.4.0.tgz#fb12270132dd84b02906a8d895ae7e7fa3d07d9a" + integrity sha512-k/9DkH5UGDhv7aReXLluFG5ExurwtIpUfnDNhQA29w896Dw3i4uDTz01Quaptbks1Uj9kI8wo9tmW73wcIEaWA== dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/logger" "^5.1.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/logger" "^5.4.0" "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.0.8": version "5.0.10" @@ -666,29 +648,20 @@ "@ethersproject/constants" "^5.0.8" "@ethersproject/logger" "^5.0.8" -"@ethersproject/strings@^5.4.0": +"@ethersproject/transactions@5.4.0", "@ethersproject/transactions@^5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.4.0.tgz#fb12270132dd84b02906a8d895ae7e7fa3d07d9a" - integrity sha512-k/9DkH5UGDhv7aReXLluFG5ExurwtIpUfnDNhQA29w896Dw3i4uDTz01Quaptbks1Uj9kI8wo9tmW73wcIEaWA== + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.4.0.tgz#a159d035179334bd92f340ce0f77e83e9e1522e0" + integrity sha512-s3EjZZt7xa4BkLknJZ98QGoIza94rVjaEed0rzZ/jB9WrIuu/1+tjvYCWzVrystXtDswy7TPBeIepyXwSYa4WQ== dependencies: + "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" "@ethersproject/bytes" "^5.4.0" "@ethersproject/constants" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" "@ethersproject/logger" "^5.4.0" - -"@ethersproject/transactions@5.1.1", "@ethersproject/transactions@^5.1.0": - version "5.1.1" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.1.1.tgz#5a6bbb25fb062c3cc75eb0db12faefcdd3870813" - integrity sha512-Nwgbp09ttIVN0OoUBatCXaHxR7grWPHbozJN8v7AXDLrl6nnOIBEMDh+yJTnosSQlFhcyjfTGGN+Mx6R8HdvMw== - dependencies: - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/rlp" "^5.1.0" - "@ethersproject/signing-key" "^5.1.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/rlp" "^5.4.0" + "@ethersproject/signing-key" "^5.4.0" "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.0.9": version "5.0.11" @@ -705,61 +678,46 @@ "@ethersproject/rlp" "^5.0.7" "@ethersproject/signing-key" "^5.0.8" -"@ethersproject/transactions@^5.4.0": +"@ethersproject/units@5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.4.0.tgz#a159d035179334bd92f340ce0f77e83e9e1522e0" - integrity sha512-s3EjZZt7xa4BkLknJZ98QGoIza94rVjaEed0rzZ/jB9WrIuu/1+tjvYCWzVrystXtDswy7TPBeIepyXwSYa4WQ== + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.4.0.tgz#d57477a4498b14b88b10396062c8cbbaf20c79fe" + integrity sha512-Z88krX40KCp+JqPCP5oPv5p750g+uU6gopDYRTBGcDvOASh6qhiEYCRatuM/suC4S2XW9Zz90QI35MfSrTIaFg== + dependencies: + "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/constants" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + +"@ethersproject/wallet@5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.4.0.tgz#fa5b59830b42e9be56eadd45a16a2e0933ad9353" + integrity sha512-wU29majLjM6AjCjpat21mPPviG+EpK7wY1+jzKD0fg3ui5fgedf2zEu1RDgpfIMsfn8fJHJuzM4zXZ2+hSHaSQ== dependencies: + "@ethersproject/abstract-provider" "^5.4.0" + "@ethersproject/abstract-signer" "^5.4.0" "@ethersproject/address" "^5.4.0" "@ethersproject/bignumber" "^5.4.0" "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" + "@ethersproject/hash" "^5.4.0" + "@ethersproject/hdnode" "^5.4.0" + "@ethersproject/json-wallets" "^5.4.0" "@ethersproject/keccak256" "^5.4.0" "@ethersproject/logger" "^5.4.0" "@ethersproject/properties" "^5.4.0" - "@ethersproject/rlp" "^5.4.0" + "@ethersproject/random" "^5.4.0" "@ethersproject/signing-key" "^5.4.0" + "@ethersproject/transactions" "^5.4.0" + "@ethersproject/wordlists" "^5.4.0" -"@ethersproject/units@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.1.0.tgz#b6ab3430ebc22adc3cb4839516496f167bee3ad5" - integrity sha512-isvJrx6qG0nKWfxsGORNjmOq/nh175fStfvRTA2xEKrGqx8JNJY83fswu4GkILowfriEM/eYpretfJnfzi7YhA== - dependencies: - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/constants" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - -"@ethersproject/wallet@5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.1.0.tgz#134c5816eaeaa586beae9f9ff67891104a2c9a15" - integrity sha512-ULmUtiYQLTUS+y3DgkLzRhFEK10zMwmjOthnjiZxee3Q/MVwr3rnmuAnXIUZrPjna6hvUPnyRIdW5XuF0Ld0YQ== - dependencies: - "@ethersproject/abstract-provider" "^5.1.0" - "@ethersproject/abstract-signer" "^5.1.0" - "@ethersproject/address" "^5.1.0" - "@ethersproject/bignumber" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/hash" "^5.1.0" - "@ethersproject/hdnode" "^5.1.0" - "@ethersproject/json-wallets" "^5.1.0" - "@ethersproject/keccak256" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/random" "^5.1.0" - "@ethersproject/signing-key" "^5.1.0" - "@ethersproject/transactions" "^5.1.0" - "@ethersproject/wordlists" "^5.1.0" - -"@ethersproject/web@5.1.0", "@ethersproject/web@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.1.0.tgz#ed56bbe4e3d9a8ffe3b2ed882da5c62d3551381b" - integrity sha512-LTeluWgTq04+RNqAkVhpydPcRZK/kKxD2Vy7PYGrAD27ABO9kTqTBKwiOuzTyAHKUQHfnvZbXmxBXJAGViSDcA== +"@ethersproject/web@5.4.0", "@ethersproject/web@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.4.0.tgz#49fac173b96992334ed36a175538ba07a7413d1f" + integrity sha512-1bUusGmcoRLYgMn6c1BLk1tOKUIFuTg8j+6N8lYlbMpDesnle+i3pGSagGNvwjaiLo4Y5gBibwctpPRmjrh4Og== dependencies: - "@ethersproject/base64" "^5.1.0" - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/strings" "^5.1.0" + "@ethersproject/base64" "^5.4.0" + "@ethersproject/bytes" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + "@ethersproject/strings" "^5.4.0" "@ethersproject/web@^5.0.12": version "5.0.14" @@ -772,28 +730,17 @@ "@ethersproject/properties" "^5.0.7" "@ethersproject/strings" "^5.0.8" -"@ethersproject/web@^5.4.0": +"@ethersproject/wordlists@5.4.0", "@ethersproject/wordlists@^5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.4.0.tgz#49fac173b96992334ed36a175538ba07a7413d1f" - integrity sha512-1bUusGmcoRLYgMn6c1BLk1tOKUIFuTg8j+6N8lYlbMpDesnle+i3pGSagGNvwjaiLo4Y5gBibwctpPRmjrh4Og== + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.4.0.tgz#f34205ec3bbc9e2c49cadaee774cf0b07e7573d7" + integrity sha512-FemEkf6a+EBKEPxlzeVgUaVSodU7G0Na89jqKjmWMlDB0tomoU8RlEMgUvXyqtrg8N4cwpLh8nyRnm1Nay1isA== dependencies: - "@ethersproject/base64" "^5.4.0" "@ethersproject/bytes" "^5.4.0" + "@ethersproject/hash" "^5.4.0" "@ethersproject/logger" "^5.4.0" "@ethersproject/properties" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@ethersproject/wordlists@5.1.0", "@ethersproject/wordlists@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.1.0.tgz#54eb9ef3a00babbff90ffe124e19c89e07e6aace" - integrity sha512-NsUCi/TpBb+oTFvMSccUkJGtp5o/84eOyqp5q5aBeiNBSLkYyw21znRn9mAmxZgySpxgruVgKbaapnYPgvctPQ== - dependencies: - "@ethersproject/bytes" "^5.1.0" - "@ethersproject/hash" "^5.1.0" - "@ethersproject/logger" "^5.1.0" - "@ethersproject/properties" "^5.1.0" - "@ethersproject/strings" "^5.1.0" - "@humanwhocodes/config-array@^0.5.0": version "0.5.0" resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" @@ -829,36 +776,15 @@ "@nodelib/fs.scandir" "2.1.4" fastq "^1.6.0" -"@nomiclabs/ethereumjs-vm@4.2.2": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@nomiclabs/ethereumjs-vm/-/ethereumjs-vm-4.2.2.tgz#2f8817113ca0fb6c44c1b870d0a809f0e026a6cc" - integrity sha512-8WmX94mMcJaZ7/m7yBbyuS6B+wuOul+eF+RY9fBpGhNaUpyMR/vFIcDojqcWQ4Yafe1tMKY5LDu2yfT4NZgV4Q== - dependencies: - async "^2.1.2" - async-eventemitter "^0.2.2" - core-js-pure "^3.0.1" - ethereumjs-account "^3.0.0" - ethereumjs-block "^2.2.2" - ethereumjs-blockchain "^4.0.3" - ethereumjs-common "^1.5.0" - ethereumjs-tx "^2.1.2" - ethereumjs-util "^6.2.0" - fake-merkle-patricia-tree "^1.0.1" - functional-red-black-tree "^1.0.1" - merkle-patricia-tree "3.0.0" - rustbn.js "~0.2.0" - safe-buffer "^5.1.1" - util.promisify "^1.0.0" - "@nomiclabs/hardhat-ethers@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz#c472abcba0c5185aaa4ad4070146e95213c68511" integrity sha512-6quxWe8wwS4X5v3Au8q1jOvXYEPkS1Fh+cME5u6AwNdnI4uERvPlVjlgRWzpnb+Rrt1l/cEqiNRH9GlsBMSDQg== -"@nomiclabs/hardhat-etherscan@^2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.4.tgz#510b6a669cc2dad095466b2ba9ae0b411c779081" - integrity sha512-KgFNTQv9gpioiTpQ9UlTysCAFfkcBonmEn9rVPTT22A7DRENFM1VTsVeGWF3AzRhd0mrASBF+o0gvbH30pSe0Q== +"@nomiclabs/hardhat-etherscan@^2.1.6": + version "2.1.6" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.6.tgz#8d1502f42adc6f7b8ef16fb917c0b5a8780cb83a" + integrity sha512-gCvT5fj8GbXS9+ACS3BzrX0pzYHHZqAHCb+NcipOkl2cy48FakUXlzrCf4P4sTH+Y7W10OgT62ezD1sJ+/NikQ== dependencies: "@ethersproject/abi" "^5.1.2" "@ethersproject/address" "^5.0.2" @@ -869,14 +795,14 @@ semver "^6.3.0" "@nomiclabs/hardhat-truffle5@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-truffle5/-/hardhat-truffle5-2.0.0.tgz#1363b7f4f90e3d5b049d22e5e6d3519ba1b91fdf" - integrity sha512-JLjyfeXTiSqa0oLHcN3i8kD4coJa4Gx6uAXybGv3aBiliEbHddLSzmBWx0EU69a1/Ad5YDdGSqVnjB8mkUCr/g== + version "2.0.2" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-truffle5/-/hardhat-truffle5-2.0.2.tgz#bfc29843a5a78a6eceafc3f5c24b6163b92424a1" + integrity sha512-QHxtwNPmAYSxiUFCLqfTy3lbIgMeh0Uqcv5g9ioQWExMrYpwqW0goXTH6JWx3gwYIsF2ALtI4/10CKj7zLDyWA== dependencies: "@nomiclabs/truffle-contract" "^4.2.23" "@types/chai" "^4.2.0" chai "^4.2.0" - ethereumjs-util "^6.1.0" + ethereumjs-util "^7.1.0" fs-extra "^7.0.1" "@nomiclabs/hardhat-web3@^2.0.0": @@ -919,17 +845,17 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.1.tgz#03c891fec7f93be0ae44ed74e57a122a38732ce7" integrity sha512-cUriqMauq1ylzP2TxePNdPqkwI7Le3Annh4K9rrpvKfSBB/bdW+Iu1ihBaTIABTAAJ85LmKL5SSPPL9ry8d1gQ== -"@openzeppelin/hardhat-upgrades@^1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.9.0.tgz#68d9d5b5876809f49ae445973614ea9624474872" - integrity sha512-ND1sqm8dpTY6CZLdaC5IgtUo6zvlVgSeqadrWRbr/N7J2Bs2JsINWA2G+r4IeunzbcOJFB7GHTs/RkFR6hNLmA== +"@openzeppelin/hardhat-upgrades@^1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.10.0.tgz#e7751e3b9a005ccc9cef4e0de190628b181b59b6" + integrity sha512-iGe058iV7Ba/g11RxlbqBG47nbqbZn1FRdg1FCQq7xPmvjRhXmFsoI/5gGw5el0aZlLDRtpFOBZbzMZvI/S7iw== dependencies: - "@openzeppelin/upgrades-core" "^1.8.0" + "@openzeppelin/upgrades-core" "^1.9.0" -"@openzeppelin/test-helpers@^0.5.12": - version "0.5.12" - resolved "https://registry.yarnpkg.com/@openzeppelin/test-helpers/-/test-helpers-0.5.12.tgz#7933abcc071031f898febfed67f5b83716d0ccb0" - integrity sha512-ZPhLmMb8PLGImYLen7YsPnni22i1bXHzrSiY7XZ7cgwuKvk4MRBunzfZ4xGTn/p+1V2/a1XHsjMRDKn7AMVb3Q== +"@openzeppelin/test-helpers@^0.5.13": + version "0.5.13" + resolved "https://registry.yarnpkg.com/@openzeppelin/test-helpers/-/test-helpers-0.5.13.tgz#d208bdbf0f7ad3cbe579d0b8434074c5f60d8e73" + integrity sha512-H9LUHM0nqZVObWyzJrXJ9FLDgtcBZZK0L+LhA0wdcvK3M4Um2LpLX4KbP/mUYcgvHK03pK7Ub4T6RYp3Vjy/mg== dependencies: "@openzeppelin/contract-loader" "^0.6.2" "@truffle/contract" "^4.0.35" @@ -942,13 +868,13 @@ web3 "^1.2.5" web3-utils "^1.2.5" -"@openzeppelin/upgrades-core@^1.8.0": - version "1.8.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.8.0.tgz#b2d6f747e3a4c3e37a18d1b13f45b7617dde2260" - integrity sha512-hO/SqUusFzD8mxrtDllShTE0eeWXsBkrR8zjjr8C8j+/gzvWQnd9HkNGTh7bpf8giUGzkERDuOOpFdSI1R3yvQ== +"@openzeppelin/upgrades-core@^1.9.0": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.9.2.tgz#9d7497f58b1f2bb704c162c716302bfff7923749" + integrity sha512-LU2NMvnz+6jXheh3Rnfql4UgtS7ViHWwcivS3JRI9DMCazmlyibwMYz5QMakrNNGAF7bY0t0Sw1UCfe5qTYxjA== dependencies: bn.js "^5.1.2" - cbor "^7.0.0" + cbor "^8.0.0" chalk "^4.1.0" compare-versions "^3.6.0" debug "^4.1.1" @@ -1201,6 +1127,11 @@ strip-indent "^2.0.0" super-split "^1.1.0" +"@types/abstract-leveldown@*": + version "5.0.2" + resolved "https://registry.yarnpkg.com/@types/abstract-leveldown/-/abstract-leveldown-5.0.2.tgz#ee81917fe38f770e29eec8139b6f16ee4a8b0a5f" + integrity sha512-+jA1XXF3jsz+Z7FcuiNqgK53hTa/luglT2TyTpKPqoYbxVY+mCPF22Rm+q3KPBrMHJwNXFrTViHszBOfU4vftQ== + "@types/bignumber.js@^5.0.0": version "5.0.0" resolved "https://registry.yarnpkg.com/@types/bignumber.js/-/bignumber.js-5.0.0.tgz#d9f1a378509f3010a3255e9cc822ad0eeb4ab969" @@ -1249,6 +1180,20 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/level-errors@*": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/level-errors/-/level-errors-3.0.0.tgz#15c1f4915a5ef763b51651b15e90f6dc081b96a8" + integrity sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ== + +"@types/levelup@^4.3.0": + version "4.3.3" + resolved "https://registry.yarnpkg.com/@types/levelup/-/levelup-4.3.3.tgz#4dc2b77db079b1cf855562ad52321aa4241b8ef4" + integrity sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA== + dependencies: + "@types/abstract-leveldown" "*" + "@types/level-errors" "*" + "@types/node" "*" + "@types/lru-cache@^5.1.0": version "5.1.0" resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.0.tgz#57f228f2b80c046b4a1bd5cac031f81f207f4f03" @@ -1320,25 +1265,26 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" -abstract-leveldown@^5.0.0, abstract-leveldown@~5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-5.0.0.tgz#f7128e1f86ccabf7d2893077ce5d06d798e386c6" - integrity sha512-5mU5P1gXtsMIXg65/rsYGsi93+MlogXZ9FA8JnwKurHQg64bfXwGYVdVdijNTVNOlAsuIiOwHdvFFD5JqCJQ7A== - dependencies: - xtend "~4.0.0" - -abstract-leveldown@~2.6.0: - version "2.6.3" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.6.3.tgz#1c5e8c6a5ef965ae8c35dfb3a8770c476b82c4b8" - integrity sha512-2++wDf/DYqkPR3o5tbfdhF96EfMApo1GpPfzOsR/ZYXdkSmELlvOOEAl9iKkRsktMPHdGjO4rtkBpf2I7TiTeA== +abstract-leveldown@^6.2.1: + version "6.3.0" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz#d25221d1e6612f820c35963ba4bd739928f6026a" + integrity sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ== dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" xtend "~4.0.0" -abstract-leveldown@~2.7.1: - version "2.7.2" - resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-2.7.2.tgz#87a44d7ebebc341d59665204834c8b7e0932cc93" - integrity sha512-+OVvxH2rHVEhWLdbudP6p0+dNMXu8JA1CbhP19T8paTYAcX7oJ4OVjT+ZUVpv7mITxXHqDMej+GdqXBmXkw09w== +abstract-leveldown@~6.2.1: + version "6.2.3" + resolved "https://registry.yarnpkg.com/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz#036543d87e3710f2528e47040bc3261b77a9a8eb" + integrity sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ== dependencies: + buffer "^5.5.0" + immediate "^3.2.3" + level-concat-iterator "~2.0.0" + level-supports "~1.0.0" xtend "~4.0.0" accepts@~1.3.7: @@ -1588,7 +1534,7 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== -async-eventemitter@^0.2.2: +async-eventemitter@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" integrity sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw== @@ -1600,12 +1546,12 @@ async-limiter@~1.0.0: resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== -async@1.x, async@^1.4.2: +async@1.x: version "1.5.2" resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -async@^2.0.1, async@^2.1.2, async@^2.4.0, async@^2.6.1: +async@^2.4.0: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== @@ -1974,13 +1920,12 @@ cbor@^5.0.2, cbor@^5.1.0: bignumber.js "^9.0.1" nofilter "^1.0.4" -cbor@^7.0.0: - version "7.0.4" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-7.0.4.tgz#8a3ef39f07ac3fdb69dda461b87db7113233481b" - integrity sha512-9hBTn31l7+9qteBso7+HPp2R5ytqFRBd98fHK4ZTpvrba8V7CuoOsEL0S6vf7+11gubMTd3RW97lOgMTl5SNfg== +cbor@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.0.0.tgz#51657d26a99a6a1866f8c3258e948576eb17d709" + integrity sha512-nMmaLWbj7+bC6MsApKRIig8h+yjgNLhPLXaCelq5+C7mpWsHgIcseZSdvgexSY5uE1Q3m2uPvIDZwSdxdo7qig== dependencies: - "@cto.af/textdecoder" "^0.0.0" - nofilter "^2.0.3" + nofilter "^3.0.2" chai-bn@^0.2.1: version "0.2.1" @@ -2047,13 +1992,6 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= -checkpoint-store@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/checkpoint-store/-/checkpoint-store-1.1.0.tgz#04e4cb516b91433893581e6d4601a78e9552ea06" - integrity sha1-BOTLUWuRQziTWB5tRgGnjpVS6gY= - dependencies: - functional-red-black-tree "^1.0.1" - cheerio-select-tmp@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz#55bbef02a4771710195ad736d5e346763ca4e646" @@ -2388,6 +2326,14 @@ cosmiconfig@^7.0.0: path-type "^4.0.0" yaml "^1.10.0" +crc-32@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" + integrity sha512-1uBwHxF+Y/4yF5G48fwnKq6QsIXheor3ZLPT80yGBV1oEUwpPojlEhQbWKVw1VwcTQyMGHK1/XMmTjmlsmTTGA== + dependencies: + exit-on-epipe "~1.0.1" + printj "~1.1.0" + create-ecdh@^4.0.0: version "4.0.4" resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.4.tgz#d6e7f4bffa66736085a0762fd3a632684dabcc4e" @@ -2540,11 +2486,6 @@ decompress-response@^3.2.0, decompress-response@^3.3.0: dependencies: mimic-response "^1.0.0" -dedent@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" - integrity sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw= - deep-eql@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" @@ -2562,19 +2503,12 @@ defer-to-connect@^1.0.1: resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== -deferred-leveldown@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-1.2.2.tgz#3acd2e0b75d1669924bc0a4b642851131173e1eb" - integrity sha512-uukrWD2bguRtXilKt6cAWKyoXrTSMo5m7crUdLfWQmu8kIm88w3QZoUL+6nhpfKVmhHANER6Re3sKoNoZ3IKMA== - dependencies: - abstract-leveldown "~2.6.0" - -deferred-leveldown@~4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-4.0.2.tgz#0b0570087827bf480a23494b398f04c128c19a20" - integrity sha512-5fMC8ek8alH16QiV0lTCis610D1Zt1+LA4MS4d63JgS32lrCjTFDUFz2ao09/j2I4Bqb5jL4FZYwu7Jz0XO1ww== +deferred-leveldown@~5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz#27a997ad95408b61161aa69bd489b86c71b78058" + integrity sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw== dependencies: - abstract-leveldown "~5.0.0" + abstract-leveldown "~6.2.1" inherits "^2.0.3" define-properties@^1.1.2, define-properties@^1.1.3: @@ -2761,16 +2695,15 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= -encoding-down@~5.0.0: - version "5.0.4" - resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-5.0.4.tgz#1e477da8e9e9d0f7c8293d320044f8b2cd8e9614" - integrity sha512-8CIZLDcSKxgzT+zX8ZVfgNbu8Md2wq/iqa1Y7zyVR18QBEAc0Nmzuvj/N5ykSKpfGzjM8qxbaFntLPwnVoUhZw== +encoding-down@^6.3.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/encoding-down/-/encoding-down-6.3.0.tgz#b1c4eb0e1728c146ecaef8e32963c549e76d082b" + integrity sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw== dependencies: - abstract-leveldown "^5.0.0" + abstract-leveldown "^6.2.1" inherits "^2.0.3" level-codec "^9.0.0" level-errors "^2.0.0" - xtend "^4.0.1" end-of-stream@^1.1.0: version "1.4.4" @@ -2904,10 +2837,10 @@ eslint-config-prettier@^8.3.0: resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" integrity sha512-BgZuLUSeKzvlL/VUjx/Yb787VQ26RU3gGjA3iiFvdsp/2bMfVIWUVP7tjxtjS0e+HP409cPlPvNkQloz8C91ew== -eslint-plugin-prettier@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.4.0.tgz#cdbad3bf1dbd2b177e9825737fe63b476a08f0c7" - integrity sha512-UDK6rJT6INSfcOo545jiaOwB701uAIt2/dR7WnFQoGCVl1/EMqdANBmwUaqqQ45aXprsTGzSa39LI1PyuRBxxw== +eslint-plugin-prettier@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.0.0.tgz#8b99d1e4b8b24a762472b4567992023619cb98e0" + integrity sha512-98MqmCJ7vJodoQK359bqQWaxOE0CS8paAz/GgjaZLyex4TTk3g9HugoO89EqWCrFiOqn9EVvcoo7gZzONCWVwQ== dependencies: prettier-linter-helpers "^1.0.0" @@ -3185,16 +3118,6 @@ eth-sig-util@^3.0.1: tweetnacl "^1.0.3" tweetnacl-util "^0.15.0" -ethashjs@~0.0.7: - version "0.0.8" - resolved "https://registry.yarnpkg.com/ethashjs/-/ethashjs-0.0.8.tgz#227442f1bdee409a548fb04136e24c874f3aa6f9" - integrity sha512-/MSbf/r2/Ld8o0l15AymjOTlPqpN8Cr4ByUEA9GtR4x0yAh3TdtDzEg29zMjXCNPI7u6E5fOQdj/Cf9Tc7oVNw== - dependencies: - async "^2.1.2" - buffer-xor "^2.0.1" - ethereumjs-util "^7.0.2" - miller-rabin "^4.0.0" - ethereum-bloom-filters@^1.0.6: version "1.0.9" resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.9.tgz#4a59dead803af0c9e33834170bd7695df67061ec" @@ -3243,48 +3166,12 @@ ethereumjs-abi@0.6.8, ethereumjs-abi@^0.6.8: bn.js "^4.11.8" ethereumjs-util "^6.0.0" -ethereumjs-account@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ethereumjs-account/-/ethereumjs-account-3.0.0.tgz#728f060c8e0c6e87f1e987f751d3da25422570a9" - integrity sha512-WP6BdscjiiPkQfF9PVfMcwx/rDvfZTjFKY0Uwc09zSQr9JfIVH87dYIJu0gNhBhpmovV4yq295fdllS925fnBA== - dependencies: - ethereumjs-util "^6.0.0" - rlp "^2.2.1" - safe-buffer "^5.1.1" - -ethereumjs-block@^2.2.2, ethereumjs-block@~2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/ethereumjs-block/-/ethereumjs-block-2.2.2.tgz#c7654be7e22df489fda206139ecd63e2e9c04965" - integrity sha512-2p49ifhek3h2zeg/+da6XpdFR3GlqY3BIEiqxGF8j9aSRIgkb7M1Ky+yULBKJOu8PAZxfhsYA+HxUk2aCQp3vg== - dependencies: - async "^2.0.1" - ethereumjs-common "^1.5.0" - ethereumjs-tx "^2.1.1" - ethereumjs-util "^5.0.0" - merkle-patricia-tree "^2.1.2" - -ethereumjs-blockchain@^4.0.3: - version "4.0.4" - resolved "https://registry.yarnpkg.com/ethereumjs-blockchain/-/ethereumjs-blockchain-4.0.4.tgz#30f2228dc35f6dcf94423692a6902604ae34960f" - integrity sha512-zCxaRMUOzzjvX78DTGiKjA+4h2/sF0OYL1QuPux0DHpyq8XiNoF5GYHtb++GUxVlMsMfZV7AVyzbtgcRdIcEPQ== - dependencies: - async "^2.6.1" - ethashjs "~0.0.7" - ethereumjs-block "~2.2.2" - ethereumjs-common "^1.5.0" - ethereumjs-util "^6.1.0" - flow-stoplight "^1.0.0" - level-mem "^3.0.1" - lru-cache "^5.1.1" - rlp "^2.2.2" - semaphore "^1.1.0" - ethereumjs-common@^1.3.2, ethereumjs-common@^1.5.0: version "1.5.2" resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== -ethereumjs-tx@^2.1.1, ethereumjs-tx@^2.1.2: +ethereumjs-tx@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" integrity sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw== @@ -3305,7 +3192,7 @@ ethereumjs-util@6.2.0: rlp "^2.2.3" secp256k1 "^3.0.1" -ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumjs-util@^6.2.0: +ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0: version "6.2.1" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== @@ -3318,7 +3205,7 @@ ethereumjs-util@6.2.1, ethereumjs-util@^6.0.0, ethereumjs-util@^6.1.0, ethereumj ethjs-util "0.1.6" rlp "^2.2.3" -ethereumjs-util@^5.0.0, ethereumjs-util@^5.1.1, ethereumjs-util@^5.2.0: +ethereumjs-util@^5.1.1: version "5.2.1" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-5.2.1.tgz#a833f0e5fca7e5b361384dc76301a721f537bf65" integrity sha512-v3kT+7zdyCm1HIqWlLNrHGqHGLpGYIhjeHxQjnDXjLT2FyGJDsd3LWMYUo7pAFRrk86CR3nUJfhC81CCoJNNGQ== @@ -3331,10 +3218,10 @@ ethereumjs-util@^5.0.0, ethereumjs-util@^5.1.1, ethereumjs-util@^5.2.0: rlp "^2.0.0" safe-buffer "^5.1.1" -ethereumjs-util@^7.0.10: - version "7.0.10" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.10.tgz#5fb7b69fa1fda0acc59634cf39d6b0291180fc1f" - integrity sha512-c/xThw6A+EAnej5Xk5kOzFzyoSnw0WX0tSlZ6pAsfGVvQj3TItaDg9b1+Fz1RJXA+y2YksKwQnuzgt1eY6LKzw== +ethereumjs-util@^7.0.10, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.1.tgz#236ef435f46820f0c420a708c0559b5897952069" + integrity sha512-1CGBmCp3m8IMGHhAJF/icH8qjCJrfQtaZ9KW+cAVV8kyN5Lc1IRq3KjV77ILOutrCwiyf5y2gMyCrAUMoCf2Ag== dependencies: "@types/bn.js" "^5.1.0" bn.js "^5.1.2" @@ -3343,7 +3230,7 @@ ethereumjs-util@^7.0.10: ethjs-util "0.1.6" rlp "^2.2.4" -ethereumjs-util@^7.0.2, ethereumjs-util@^7.0.3: +ethereumjs-util@^7.0.3: version "7.0.9" resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.9.tgz#2038baeb30f370a3e576ec175bd70bbbb6807d42" integrity sha512-cRqvYYKJoitq6vMKMf8pXeVwvTrX+dRD0JwHaYqm8jvogK14tqIoCWH/KUHcRwnVxVXEYF/o6pup5jRG4V0xzg== @@ -3370,41 +3257,41 @@ ethers@^4.0.0-beta.1, ethers@^4.0.32, ethers@^4.0.40: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.1.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.1.4.tgz#8ae973705ed962f8f41dc59693704002a38dd18b" - integrity sha512-EAPQ/fgGRu0PoR/VNFnHTMOtG/IZ0AItdW55C9T8ffmVu0rnyllZL404eBF66elJehOLz2kxnUrhXpE7TCpW7g== - dependencies: - "@ethersproject/abi" "5.1.2" - "@ethersproject/abstract-provider" "5.1.0" - "@ethersproject/abstract-signer" "5.1.0" - "@ethersproject/address" "5.1.0" - "@ethersproject/base64" "5.1.0" - "@ethersproject/basex" "5.1.0" - "@ethersproject/bignumber" "5.1.1" - "@ethersproject/bytes" "5.1.0" - "@ethersproject/constants" "5.1.0" - "@ethersproject/contracts" "5.1.1" - "@ethersproject/hash" "5.1.0" - "@ethersproject/hdnode" "5.1.0" - "@ethersproject/json-wallets" "5.1.0" - "@ethersproject/keccak256" "5.1.0" - "@ethersproject/logger" "5.1.0" - "@ethersproject/networks" "5.1.0" - "@ethersproject/pbkdf2" "5.1.0" - "@ethersproject/properties" "5.1.0" - "@ethersproject/providers" "5.1.2" - "@ethersproject/random" "5.1.0" - "@ethersproject/rlp" "5.1.0" - "@ethersproject/sha2" "5.1.0" - "@ethersproject/signing-key" "5.1.0" - "@ethersproject/solidity" "5.1.0" - "@ethersproject/strings" "5.1.0" - "@ethersproject/transactions" "5.1.1" - "@ethersproject/units" "5.1.0" - "@ethersproject/wallet" "5.1.0" - "@ethersproject/web" "5.1.0" - "@ethersproject/wordlists" "5.1.0" +ethers@^5.4.7: + version "5.4.7" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.4.7.tgz#0fd491a5da7c9793de2d6058d76b41b1e7efba8f" + integrity sha512-iZc5p2nqfWK1sj8RabwsPM28cr37Bpq7ehTQ5rWExBr2Y09Sn1lDKZOED26n+TsZMye7Y6mIgQ/1cwpSD8XZew== + dependencies: + "@ethersproject/abi" "5.4.1" + "@ethersproject/abstract-provider" "5.4.1" + "@ethersproject/abstract-signer" "5.4.1" + "@ethersproject/address" "5.4.0" + "@ethersproject/base64" "5.4.0" + "@ethersproject/basex" "5.4.0" + "@ethersproject/bignumber" "5.4.2" + "@ethersproject/bytes" "5.4.0" + "@ethersproject/constants" "5.4.0" + "@ethersproject/contracts" "5.4.1" + "@ethersproject/hash" "5.4.0" + "@ethersproject/hdnode" "5.4.0" + "@ethersproject/json-wallets" "5.4.0" + "@ethersproject/keccak256" "5.4.0" + "@ethersproject/logger" "5.4.1" + "@ethersproject/networks" "5.4.2" + "@ethersproject/pbkdf2" "5.4.0" + "@ethersproject/properties" "5.4.1" + "@ethersproject/providers" "5.4.5" + "@ethersproject/random" "5.4.0" + "@ethersproject/rlp" "5.4.0" + "@ethersproject/sha2" "5.4.0" + "@ethersproject/signing-key" "5.4.0" + "@ethersproject/solidity" "5.4.0" + "@ethersproject/strings" "5.4.0" + "@ethersproject/transactions" "5.4.0" + "@ethersproject/units" "5.4.0" + "@ethersproject/wallet" "5.4.0" + "@ethersproject/web" "5.4.0" + "@ethersproject/wordlists" "5.4.0" ethjs-abi@^0.2.1: version "0.2.1" @@ -3487,6 +3374,11 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +exit-on-epipe@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" + integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== + express@^4.14.0: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -3554,13 +3446,6 @@ extsprintf@^1.2.0: resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= -fake-merkle-patricia-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fake-merkle-patricia-tree/-/fake-merkle-patricia-tree-1.0.1.tgz#4b8c3acfb520afadf9860b1f14cd8ce3402cddd3" - integrity sha1-S4w6z7Ugr635hgsfFM2M40As3dM= - dependencies: - checkpoint-store "^1.1.0" - fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" @@ -3702,11 +3587,6 @@ flatted@^3.1.0: resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== -flow-stoplight@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/flow-stoplight/-/flow-stoplight-1.0.0.tgz#4a292c5bcff8b39fa6cc0cb1a853d86f27eeff7b" - integrity sha1-SiksW8/4s5+mzAyxqFPYbyfu/3s= - follow-redirects@^1.12.1: version "1.13.3" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" @@ -3842,7 +3722,7 @@ functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -ganache-cli@^6.11.0: +ganache-cli@^6.12.2: version "6.12.2" resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.12.2.tgz#c0920f7db0d4ac062ffe2375cb004089806f627a" integrity sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw== @@ -4090,15 +3970,15 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" -hardhat-abi-exporter@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/hardhat-abi-exporter/-/hardhat-abi-exporter-2.2.1.tgz#98ad242d08987d34416c6315729f36f9d544e4fa" - integrity sha512-Um7+RPvJEj+OqWjPoPKlTTkO1Akr10pqpgMk8Pw2jz2wrGv5XQBGNW5aQgGVDUosYktUIWDaEhcwwFKbFsir9A== +hardhat-abi-exporter@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/hardhat-abi-exporter/-/hardhat-abi-exporter-2.3.0.tgz#f7aeb56f2ceef1ccdb75a5b8d81dc80cbbfeefc4" + integrity sha512-9EVhogHgFWsi4Bc46tv+WirOR+auGBZrv9V5/qAHBjOqYiZPbNXoFUo/yQhOAsF8Bz4Q9p4jHpdeQXnYt7g6Yw== -hardhat-contract-sizer@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/hardhat-contract-sizer/-/hardhat-contract-sizer-2.0.3.tgz#604455fd803865f81c29f60364e863eaa19395a7" - integrity sha512-iaixOzWxwOSIIE76cl2uk4m9VXI1hKU3bFt+gl7jDhyb2/JB2xOp5wECkfWqAoc4V5lD4JtjldZlpSTbzX+nPQ== +hardhat-contract-sizer@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/hardhat-contract-sizer/-/hardhat-contract-sizer-2.1.1.tgz#d861bfac8dff00cca859e14c5a4843367dd0f068" + integrity sha512-QgfuwdUkKT7Ugn6Zja26Eie7h6OLcBfWBewaaQtYMCzyglNafQPgUIznN2C42/iFmGrlqFPbqv4B98Iev89KSQ== dependencies: cli-table3 "^0.6.0" colors "^1.4.0" @@ -4111,15 +3991,20 @@ hardhat-gas-reporter@^1.0.4: eth-gas-reporter "^0.2.20" sha1 "^1.1.1" -hardhat@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.1.2.tgz#a2128b71b0fb216ffc978c85a2030835b4e306ea" - integrity sha512-42iOheDsDl6Gr7sBfpA0S+bQUIcXSDEUrrqmnFEcBHx9qBoQad3s212y2ODmmkdLt+PqqTM+Mq8N3bZDTdjoLg== +hardhat@^2.6.4: + version "2.6.4" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.6.4.tgz#9ff3f139f697bfc4e14836a3fef3ca4c62357d65" + integrity sha512-6QNfu1FptjtyGJ+jBR7LMX7AMY9gWWw9kAUD7v0YZNZH1ZBgsZdMHqXKiSzO5pLQXo+fy9zZovKAUNYbjQ/1fw== dependencies: - "@nomiclabs/ethereumjs-vm" "4.2.2" + "@ethereumjs/block" "^3.4.0" + "@ethereumjs/blockchain" "^5.4.0" + "@ethereumjs/common" "^2.4.0" + "@ethereumjs/tx" "^3.3.0" + "@ethereumjs/vm" "^5.5.2" + "@ethersproject/abi" "^5.1.2" "@sentry/node" "^5.18.1" "@solidity-parser/parser" "^0.11.0" - "@types/bn.js" "^4.11.5" + "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" abort-controller "^3.0.0" adm-zip "^0.4.16" @@ -4133,19 +4018,16 @@ hardhat@^2.1.2: eth-sig-util "^2.5.2" ethereum-cryptography "^0.1.2" ethereumjs-abi "^0.6.8" - ethereumjs-account "^3.0.0" - ethereumjs-block "^2.2.2" - ethereumjs-common "^1.5.0" - ethereumjs-tx "^2.1.2" - ethereumjs-util "^6.2.0" + ethereumjs-util "^7.1.0" find-up "^2.1.0" fp-ts "1.19.3" fs-extra "^7.0.1" glob "^7.1.3" + https-proxy-agent "^5.0.0" immutable "^4.0.0-rc.12" io-ts "1.10.4" lodash "^4.17.11" - merkle-patricia-tree "3.0.0" + merkle-patricia-tree "^4.2.0" mnemonist "^0.38.0" mocha "^7.1.2" node-fetch "^2.6.0" @@ -4160,7 +4042,7 @@ hardhat@^2.1.2: "true-case-path" "^2.2.1" tsort "0.0.1" uuid "^3.3.2" - ws "^7.2.1" + ws "^7.4.6" has-bigints@^1.0.1: version "1.0.1" @@ -4346,10 +4228,10 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -husky@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.1.tgz#579f4180b5da4520263e8713cc832942b48e1f1c" - integrity sha512-gceRaITVZ+cJH9sNHqx5tFwbzlLCVxtVZcusME8JYQ8Edy5mpGDOqD8QBCdMhpyo9a+JXddnujQ4rpY2Ff9SJA== +husky@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.2.tgz#21900da0f30199acca43a46c043c4ad84ae88dff" + integrity sha512-8yKEWNX4z2YsofXAMT7KvA1g8p+GxtB1ffV8XtpAEGuXNAbCV5wdNKH+qTpw8SM9fh4aMPDR+yQuKfgnreyZlg== iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" @@ -4671,11 +4553,6 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -4879,17 +4756,10 @@ level-codec@^9.0.0: dependencies: buffer "^5.6.0" -level-codec@~7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/level-codec/-/level-codec-7.0.1.tgz#341f22f907ce0f16763f24bddd681e395a0fb8a7" - integrity sha512-Ua/R9B9r3RasXdRmOtd+t9TCOEIIlts+TN/7XTT2unhDaL6sJn83S3rUyljbr6lVtw49N3/yA0HHjpV6Kzb2aQ== - -level-errors@^1.0.3: - version "1.1.2" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.1.2.tgz#4399c2f3d3ab87d0625f7e3676e2d807deff404d" - integrity sha512-Sw/IJwWbPKF5Ai4Wz60B52yj0zYeqzObLh8k1Tk88jVmD51cJSKWSYpRyhVIvFzZdvsPqlH5wfhp/yxdsaQH4w== - dependencies: - errno "~0.1.1" +level-concat-iterator@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz#1d1009cf108340252cb38c51f9727311193e6263" + integrity sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw== level-errors@^2.0.0, level-errors@~2.0.0: version "2.0.1" @@ -4898,86 +4768,56 @@ level-errors@^2.0.0, level-errors@~2.0.0: dependencies: errno "~0.1.1" -level-errors@~1.0.3: - version "1.0.5" - resolved "https://registry.yarnpkg.com/level-errors/-/level-errors-1.0.5.tgz#83dbfb12f0b8a2516bdc9a31c4876038e227b859" - integrity sha512-/cLUpQduF6bNrWuAC4pwtUKA5t669pCsCi2XbmojG2tFeOr9j6ShtdDCtFFQO1DRt+EVZhx9gPzP9G2bUaG4ig== - dependencies: - errno "~0.1.1" - -level-iterator-stream@~1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-1.3.1.tgz#e43b78b1a8143e6fa97a4f485eb8ea530352f2ed" - integrity sha1-5Dt4sagUPm+pek9IXrjqUwNS8u0= - dependencies: - inherits "^2.0.1" - level-errors "^1.0.3" - readable-stream "^1.0.33" - xtend "^4.0.0" - -level-iterator-stream@~3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-3.0.1.tgz#2c98a4f8820d87cdacab3132506815419077c730" - integrity sha512-nEIQvxEED9yRThxvOrq8Aqziy4EGzrxSZK+QzEFAVuJvQ8glfyZ96GB6BoI4sBbLfjMXm2w4vu3Tkcm9obcY0g== +level-iterator-stream@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz#7ceba69b713b0d7e22fcc0d1f128ccdc8a24f79c" + integrity sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q== dependencies: - inherits "^2.0.1" - readable-stream "^2.3.6" - xtend "^4.0.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + xtend "^4.0.2" -level-mem@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-3.0.1.tgz#7ce8cf256eac40f716eb6489654726247f5a89e5" - integrity sha512-LbtfK9+3Ug1UmvvhR2DqLqXiPW1OJ5jEh0a3m9ZgAipiwpSxGj/qaVVy54RG5vAQN1nCuXqjvprCuKSCxcJHBg== +level-mem@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/level-mem/-/level-mem-5.0.1.tgz#c345126b74f5b8aa376dc77d36813a177ef8251d" + integrity sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg== dependencies: - level-packager "~4.0.0" - memdown "~3.0.0" + level-packager "^5.0.3" + memdown "^5.0.0" -level-packager@~4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-4.0.1.tgz#7e7d3016af005be0869bc5fa8de93d2a7f56ffe6" - integrity sha512-svCRKfYLn9/4CoFfi+d8krOtrp6RoX8+xm0Na5cgXMqSyRru0AnDYdLl+YI8u1FyS6gGZ94ILLZDE5dh2but3Q== +level-packager@^5.0.3: + version "5.1.1" + resolved "https://registry.yarnpkg.com/level-packager/-/level-packager-5.1.1.tgz#323ec842d6babe7336f70299c14df2e329c18939" + integrity sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ== dependencies: - encoding-down "~5.0.0" - levelup "^3.0.0" + encoding-down "^6.3.0" + levelup "^4.3.2" -level-ws@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-0.0.0.tgz#372e512177924a00424b0b43aef2bb42496d228b" - integrity sha1-Ny5RIXeSSgBCSwtDrvK7QkltIos= +level-supports@~1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/level-supports/-/level-supports-1.0.1.tgz#2f530a596834c7301622521988e2c36bb77d122d" + integrity sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg== dependencies: - readable-stream "~1.0.15" - xtend "~2.1.1" + xtend "^4.0.2" -level-ws@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-1.0.0.tgz#19a22d2d4ac57b18cc7c6ecc4bd23d899d8f603b" - integrity sha512-RXEfCmkd6WWFlArh3X8ONvQPm8jNpfA0s/36M4QzLqrLEIt1iJE9WBHLZ5vZJK6haMjJPJGJCQWfjMNnRcq/9Q== +level-ws@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/level-ws/-/level-ws-2.0.0.tgz#207a07bcd0164a0ec5d62c304b4615c54436d339" + integrity sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA== dependencies: inherits "^2.0.3" - readable-stream "^2.2.8" + readable-stream "^3.1.0" xtend "^4.0.1" -levelup@^1.2.1: - version "1.3.9" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-1.3.9.tgz#2dbcae845b2bb2b6bea84df334c475533bbd82ab" - integrity sha512-VVGHfKIlmw8w1XqpGOAGwq6sZm2WwWLmlDcULkKWQXEA5EopA8OBNJ2Ck2v6bdk8HeEZSbCSEgzXadyQFm76sQ== - dependencies: - deferred-leveldown "~1.2.1" - level-codec "~7.0.0" - level-errors "~1.0.3" - level-iterator-stream "~1.3.0" - prr "~1.0.1" - semver "~5.4.1" - xtend "~4.0.0" - -levelup@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/levelup/-/levelup-3.1.1.tgz#c2c0b3be2b4dc316647c53b42e2f559e232d2189" - integrity sha512-9N10xRkUU4dShSRRFTBdNaBxofz+PGaIZO962ckboJZiNmLuhVT6FZ6ZKAsICKfUBO76ySaYU6fJWX/jnj3Lcg== +levelup@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/levelup/-/levelup-4.4.0.tgz#f89da3a228c38deb49c48f88a70fb71f01cafed6" + integrity sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ== dependencies: - deferred-leveldown "~4.0.0" + deferred-leveldown "~5.3.0" level-errors "~2.0.0" - level-iterator-stream "~3.0.0" + level-iterator-stream "~4.0.0" + level-supports "~1.0.0" xtend "~4.0.0" levn@^0.3.0, levn@~0.3.0: @@ -5001,17 +4841,16 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -lint-staged@11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.1.1.tgz#9c2018b872654cf80b2b1ff5a10b6b74aef6e300" - integrity sha512-eTNGe6i78PSUUH2BZi1gZmGmNfb8IeN4z2OzMYxSZ1qnP1WXKn1E7D+OHwLbRDm/wQINnzIj0bsKJ6lLVSuZiQ== +lint-staged@11.1.2: + version "11.1.2" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.1.2.tgz#4dd78782ae43ee6ebf2969cad9af67a46b33cd90" + integrity sha512-6lYpNoA9wGqkL6Hew/4n1H6lRqF3qCsujVT0Oq5Z4hiSAM7S6NksPJ3gnr7A7R52xCtiZMcEUNNQ6d6X5Bvh9w== dependencies: chalk "^4.1.1" cli-truncate "^2.1.0" commander "^7.2.0" cosmiconfig "^7.0.0" debug "^4.3.1" - dedent "^0.7.0" enquirer "^2.3.6" execa "^5.0.0" listr2 "^3.8.2" @@ -5196,6 +5035,11 @@ marked@^0.7.0: resolved "https://registry.yarnpkg.com/marked/-/marked-0.7.0.tgz#b64201f051d271b1edc10a04d1ae9b74bb8e5c0e" integrity sha512-c+yYdCZJQrsRjTPhUx7VKkApw9bwDkNbHUKo1ovgcfDjb2kc8rLuRbIFyXL5WOEUwzSSKo3IXpph2K6DqB/KZg== +mcl-wasm@^0.7.1: + version "0.7.9" + resolved "https://registry.yarnpkg.com/mcl-wasm/-/mcl-wasm-0.7.9.tgz#c1588ce90042a8700c3b60e40efb339fc07ab87f" + integrity sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ== + md5.js@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" @@ -5219,29 +5063,17 @@ mem@^4.0.0: mimic-fn "^2.0.0" p-is-promise "^2.0.0" -memdown@^1.0.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/memdown/-/memdown-1.4.1.tgz#b4e4e192174664ffbae41361aa500f3119efe215" - integrity sha1-tOThkhdGZP+65BNhqlAPMRnv4hU= - dependencies: - abstract-leveldown "~2.7.1" - functional-red-black-tree "^1.0.1" - immediate "^3.2.3" - inherits "~2.0.1" - ltgt "~2.2.0" - safe-buffer "~5.1.1" - -memdown@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/memdown/-/memdown-3.0.0.tgz#93aca055d743b20efc37492e9e399784f2958309" - integrity sha512-tbV02LfZMWLcHcq4tw++NuqMO+FZX8tNJEiD2aNRm48ZZusVg5N8NART+dmBkepJVye986oixErf7jfXboMGMA== +memdown@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/memdown/-/memdown-5.1.0.tgz#608e91a9f10f37f5b5fe767667a8674129a833cb" + integrity sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw== dependencies: - abstract-leveldown "~5.0.0" + abstract-leveldown "~6.2.1" functional-red-black-tree "~1.0.1" immediate "~3.2.3" inherits "~2.0.1" ltgt "~2.2.0" - safe-buffer "~5.1.1" + safe-buffer "~5.2.0" memorystream@^0.3.1: version "0.3.1" @@ -5263,32 +5095,18 @@ merge2@^1.2.3, merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -merkle-patricia-tree@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-3.0.0.tgz#448d85415565df72febc33ca362b8b614f5a58f8" - integrity sha512-soRaMuNf/ILmw3KWbybaCjhx86EYeBbD8ph0edQCTed0JN/rxDt1EBN52Ajre3VyGo+91f8+/rfPIRQnnGMqmQ== - dependencies: - async "^2.6.1" - ethereumjs-util "^5.2.0" - level-mem "^3.0.1" - level-ws "^1.0.0" - readable-stream "^3.0.6" - rlp "^2.0.0" - semaphore ">=1.0.1" - -merkle-patricia-tree@^2.1.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-2.3.2.tgz#982ca1b5a0fde00eed2f6aeed1f9152860b8208a" - integrity sha512-81PW5m8oz/pz3GvsAwbauj7Y00rqm81Tzad77tHBwU7pIAtN+TJnMSOJhxBKflSVYhptMMb9RskhqHqrSm1V+g== - dependencies: - async "^1.4.2" - ethereumjs-util "^5.0.0" - level-ws "0.0.0" - levelup "^1.2.1" - memdown "^1.0.0" - readable-stream "^2.0.0" - rlp "^2.0.0" - semaphore ">=1.0.1" +merkle-patricia-tree@^4.2.0, merkle-patricia-tree@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.1.tgz#fc43e7b162e597a0720ccdd702bf1d49765691d2" + integrity sha512-25reMgrT8PhJy0Ba0U7fMZD2oobS1FPWB9vQa0uBpJYIQYYuFXEHoqEkTqA/UzX+s9br3pmUVVY/TOsFt/x0oQ== + dependencies: + "@types/levelup" "^4.3.0" + ethereumjs-util "^7.1.0" + level-mem "^5.0.1" + level-ws "^2.0.0" + readable-stream "^3.6.0" + rlp "^2.2.4" + semaphore-async-await "^1.5.1" methods@~1.1.2: version "1.1.2" @@ -5596,12 +5414,10 @@ nofilter@^1.0.4: resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== -nofilter@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-2.0.3.tgz#f5460f3cb33147005883e3f5d4476239501fa187" - integrity sha512-FbuXC+lK+GU2+63D1kC1ETiZo+Z7SIi7B+mxKTCH1byrh6WFvfBCN/wpherFz0a0bjGd7EKTst/cz0yLeNngug== - dependencies: - "@cto.af/textdecoder" "^0.0.0" +nofilter@^3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.0.3.tgz#3ff3b142efdccb403434ccae4a0c2c835cb9b522" + integrity sha512-TN/MCrQmXQk5DyUJ8TGUq1Il8rv4fTsjddLmMopV006QP8DMkglmGgYfQKD5620vXLRXfr8iGI6ZZ4/ZWld2cQ== nopt@3.x: version "3.0.6" @@ -5669,11 +5485,6 @@ object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= - object.assign@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" @@ -6060,10 +5871,15 @@ prettier@^1.14.3: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== -prettier@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d" - integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ== +prettier@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.1.tgz#671e11c89c14a4cfc876ce564106c4a6726c9f5c" + integrity sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA== + +printj@~1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/printj/-/printj-1.1.2.tgz#d90deb2975a8b9f600fb3a1c94e3f4c53c78a222" + integrity sha512-zA2SmoLaxZyArQTOPj5LXecR+RagfPSU5Kw1qP+jkWeNlrq+eJZyY2oS68SU1Z/7/myXM4lo9716laOFAVStCQ== process-nextick-args@~2.0.0: version "2.0.1" @@ -6215,17 +6031,7 @@ raw-body@^2.4.1: iconv-lite "0.4.24" unpipe "1.0.0" -readable-stream@^1.0.33: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2.0.0, readable-stream@^2.2.2, readable-stream@^2.2.8, readable-stream@^2.3.6: +readable-stream@^2.2.2: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -6238,7 +6044,7 @@ readable-stream@^2.0.0, readable-stream@^2.2.2, readable-stream@^2.2.8, readable string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@^3.0.6, readable-stream@^3.6.0: +readable-stream@^3.1.0, readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -6247,16 +6053,6 @@ readable-stream@^3.0.6, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" -readable-stream@~1.0.15: - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - readdirp@~3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" @@ -6475,7 +6271,7 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^3.0.0" inherits "^2.0.1" -rlp@^2.0.0, rlp@^2.2.1, rlp@^2.2.2, rlp@^2.2.3, rlp@^2.2.4: +rlp@^2.0.0, rlp@^2.2.3, rlp@^2.2.4: version "2.2.6" resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c" integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg== @@ -6581,10 +6377,10 @@ secp256k1@^4.0.1: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" -semaphore@>=1.0.1, semaphore@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/semaphore/-/semaphore-1.1.0.tgz#aaad8b86b20fe8e9b32b16dc2ee682a8cd26a8aa" - integrity sha512-O4OZEaNtkMd/K0i6js9SL+gqy0ZCBMgUvlSqHKi4IBdjhe7wB8pwztUk1BbZ1fmrvpwFrPbHzqd2w5pTcJH6LA== +semaphore-async-await@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" + integrity sha1-hXvvXjZEYBykuVcLh+nfXKEpdPo= semver-compare@^1.0.0: version "1.0.0" @@ -6608,11 +6404,6 @@ semver@^7.2.1, semver@^7.3.4: dependencies: lru-cache "^6.0.0" -semver@~5.4.1: - version "5.4.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.4.1.tgz#e059c09d8571f0540823733433505d3a2f00b18e" - integrity sha512-WfG/X9+oATh81XtllIo/I8gOiY9EXRdv1cQdyykeXK17YcUW3EXUAi2To4pcH6nZtJPr7ZOpM5OMyWJZm+8Rsg== - send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -6824,18 +6615,18 @@ solidity-ast@^0.4.15: resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.19.tgz#3c6c27da922f2afd4a10522c8ecfc38f55095bdd" integrity sha512-Mzg2lLr3VMN8V6ukmuLRB0cf1wuvNw78lR8dIhZOxlHSb4Nsy1ABUXJ31oA9IrLJIlI2v+C2WajVu0pFfVb2qA== -solidity-coverage@^0.7.16: - version "0.7.16" - resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.7.16.tgz#c8c8c46baa361e2817bbf275116ddd2ec90a55fb" - integrity sha512-ttBOStywE6ZOTJmmABSg4b8pwwZfYKG8zxu40Nz+sRF5bQX7JULXWj/XbX0KXps3Fsp8CJXg8P29rH3W54ipxw== +solidity-coverage@^0.7.17: + version "0.7.17" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.7.17.tgz#5139de8f6666d4755d88f453d8e35632a7bb3444" + integrity sha512-Erw2hd2xdACAvDX8jUdYkmgJlIIazGznwDJA5dhRaw4def2SisXN9jUjneeyOZnl/E7j6D3XJYug4Zg9iwodsg== dependencies: - "@solidity-parser/parser" "^0.12.0" + "@solidity-parser/parser" "^0.13.2" "@truffle/provider" "^0.2.24" chalk "^2.4.2" death "^1.1.0" detect-port "^1.3.0" fs-extra "^8.1.0" - ganache-cli "^6.11.0" + ganache-cli "^6.12.2" ghost-testrpc "^0.0.2" global-modules "^2.0.0" globby "^10.0.1" @@ -6973,11 +6764,6 @@ string_decoder@^1.1.1: dependencies: safe-buffer "~5.2.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - string_decoder@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" @@ -7430,7 +7216,7 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util.promisify@^1.0.0: +util.promisify@^1.0.1: version "1.1.1" resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== @@ -7517,15 +7303,14 @@ web3-bzz@1.3.4: swarm-js "^0.1.40" underscore "1.9.1" -web3-bzz@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.5.tgz#f181a1319d9f867f4183b147e7aebd21aecff4a0" - integrity sha512-XiEUAbB1uKm/agqfwBsCW8fbw+sma85TfwuDpdcy591vinVk0S9TfWgLxro6v1KJ6nSELySIbKGbAJbh2GSyxw== +web3-bzz@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.5.3.tgz#e36456905ce051138f9c3ce3623cbc73da088c2b" + integrity sha512-SlIkAqG0eS6cBS9Q2eBOTI1XFzqh83RqGJWnyrNZMDxUwsTVHL+zNnaPShVPvrWQA1Ub5b0bx1Kc5+qJVxsTJg== dependencies: "@types/node" "^12.12.6" got "9.6.0" swarm-js "^0.1.40" - underscore "1.9.1" web3-core-helpers@1.2.9: version "1.2.9" @@ -7545,14 +7330,13 @@ web3-core-helpers@1.3.4: web3-eth-iban "1.3.4" web3-utils "1.3.4" -web3-core-helpers@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.5.tgz#9f0ff7ed40befb9f691986e66fd94c828c7b1b13" - integrity sha512-HYh3ix5FjysgT0jyzD8s/X5ym0b4BGU7I2QtuBiydMnE0mQEWy7GcT9XKpTySA8FTOHHIAQYvQS07DN/ky3UzA== +web3-core-helpers@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.5.3.tgz#099030235c477aadf39a94199ef40092151d563c" + integrity sha512-Ip1IjB3S8vN7Kf1PPjK41U5gskmMk6IJQlxIVuS8/1U7n/o0jC8krqtpRwiMfAgYyw3TXwBFtxSRTvJtnLyXZw== dependencies: - underscore "1.9.1" - web3-eth-iban "1.3.5" - web3-utils "1.3.5" + web3-eth-iban "1.5.3" + web3-utils "1.5.3" web3-core-method@1.2.9: version "1.2.9" @@ -7578,17 +7362,17 @@ web3-core-method@1.3.4: web3-core-subscriptions "1.3.4" web3-utils "1.3.4" -web3-core-method@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.5.tgz#995fe12f3b364469e5208a88d72736327b231faa" - integrity sha512-hCbmgQ+At6OTuaNGAdjXMsCr4eUCmp9yGKSuaB5HdkNVDpqFso4HHjVxcjNrTyJp3OZnyjKBzQzK1ZWLpLl84Q== +web3-core-method@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.5.3.tgz#6cff97ed19fe4ea2e9183d6f703823a079f5132c" + integrity sha512-8wJrwQ2qD9ibWieF9oHXwrJsUGrv3XAtEkNeyvyNMpktNTIjxJ2jaFGQUuLiyUrMubD18XXgLk4JS6PJU4Loeg== dependencies: + "@ethereumjs/common" "^2.4.0" "@ethersproject/transactions" "^5.0.0-beta.135" - underscore "1.9.1" - web3-core-helpers "1.3.5" - web3-core-promievent "1.3.5" - web3-core-subscriptions "1.3.5" - web3-utils "1.3.5" + web3-core-helpers "1.5.3" + web3-core-promievent "1.5.3" + web3-core-subscriptions "1.5.3" + web3-utils "1.5.3" web3-core-promievent@1.2.9: version "1.2.9" @@ -7604,10 +7388,10 @@ web3-core-promievent@1.3.4: dependencies: eventemitter3 "4.0.4" -web3-core-promievent@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.5.tgz#33c34811cc4e2987c56e5192f9a014368c42ca39" - integrity sha512-K0j8x3ZJr0eAyNvyUCxOUsSTd4hco0/9nxxlyOuijcsa6YV8l9NL6eqhniWbSyxCJT8ka5Mb7yAiUZe69EDLBQ== +web3-core-promievent@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.5.3.tgz#3f11833c3dc6495577c274350b61144e0a4dba01" + integrity sha512-CFfgqvk3Vk6PIAxtLLuX+pOMozxkKCY+/GdGr7weMh033mDXEPvwyVjoSRO1PqIKj668/hMGQsVoIgbyxkJ9Mg== dependencies: eventemitter3 "4.0.4" @@ -7634,17 +7418,16 @@ web3-core-requestmanager@1.3.4: web3-providers-ipc "1.3.4" web3-providers-ws "1.3.4" -web3-core-requestmanager@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.5.tgz#c452ea85fcffdf5b82b84c250707b638790d0e75" - integrity sha512-9l294U3Ga8qmvv8E37BqjQREfMs+kFnkU3PY28g9DZGYzKvl3V1dgDYqxyrOBdCFhc7rNSpHdgC4PrVHjouspg== +web3-core-requestmanager@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.5.3.tgz#b339525815fd40e3a2a81813c864ddc413f7b6f7" + integrity sha512-9k/Bze2rs8ONix5IZR+hYdMNQv+ark2Ek2kVcrFgWO+LdLgZui/rn8FikPunjE+ub7x7pJaKCgVRbYFXjo3ZWg== dependencies: - underscore "1.9.1" util "^0.12.0" - web3-core-helpers "1.3.5" - web3-providers-http "1.3.5" - web3-providers-ipc "1.3.5" - web3-providers-ws "1.3.5" + web3-core-helpers "1.5.3" + web3-providers-http "1.5.3" + web3-providers-ipc "1.5.3" + web3-providers-ws "1.5.3" web3-core-subscriptions@1.2.9: version "1.2.9" @@ -7664,14 +7447,13 @@ web3-core-subscriptions@1.3.4: underscore "1.9.1" web3-core-helpers "1.3.4" -web3-core-subscriptions@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.5.tgz#7c4dc9d559e344d852de2cf01bd0cc13c94023cb" - integrity sha512-6mtXdaEB1V1zKLqYBq7RF2W75AK5ZJNGpW6QYC7Zvbku7zq1ZlgaUkJo88JKMWJ7etfaHaYqQ/7VveHk5sQynA== +web3-core-subscriptions@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.5.3.tgz#d7d69c4caad65074212028656e9dc56ca5c2159d" + integrity sha512-L2m9vG1iRN6thvmv/HQwO2YLhOQlmZU8dpLG6GSo9FBN14Uch868Swk0dYVr3rFSYjZ/GETevSXU+O+vhCummA== dependencies: eventemitter3 "4.0.4" - underscore "1.9.1" - web3-core-helpers "1.3.5" + web3-core-helpers "1.5.3" web3-core@1.2.9: version "1.2.9" @@ -7699,18 +7481,18 @@ web3-core@1.3.4: web3-core-requestmanager "1.3.4" web3-utils "1.3.4" -web3-core@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.5.tgz#1e9335e6c4549dac09aaa07157242ebd6d097226" - integrity sha512-VQjTvnGTqJwDwjKEHSApea3RmgtFGLDSJ6bqrOyHROYNyTyKYjFQ/drG9zs3rjDkND9mgh8foI1ty37Qua3QCQ== +web3-core@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.5.3.tgz#59f8728b27c8305b349051326aa262b9b7e907bf" + integrity sha512-ACTbu8COCu+0eUNmd9pG7Q9EVsNkAg2w3Y7SqhDr+zjTgbSHZV01jXKlapm9z+G3AN/BziV3zGwudClJ4u4xXQ== dependencies: "@types/bn.js" "^4.11.5" "@types/node" "^12.12.6" bignumber.js "^9.0.0" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-core-requestmanager "1.3.5" - web3-utils "1.3.5" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-core-requestmanager "1.5.3" + web3-utils "1.5.3" web3-eth-abi@1.2.9: version "1.2.9" @@ -7730,14 +7512,13 @@ web3-eth-abi@1.3.4: underscore "1.9.1" web3-utils "1.3.4" -web3-eth-abi@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.5.tgz#eeffab0a4b318c47b8777de90983ca45614f8173" - integrity sha512-bkbG2v/mOW5DH6rF/SEgqunusjYoEi2IBw+fkmD3rzWDaEY7+/i1xY94AeO257d06QMgld75GtV/N+aEs7A6vQ== +web3-eth-abi@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.5.3.tgz#5aea9394d797f99ca0d9bd40c3417eb07241c96c" + integrity sha512-i/qhuFsoNrnV130CSRYX/z4SlCfSQ4mHntti5yTmmQpt70xZKYZ57BsU0R29ueSQ9/P+aQrL2t2rqkQkAloUxg== dependencies: "@ethersproject/abi" "5.0.7" - underscore "1.9.1" - web3-utils "1.3.5" + web3-utils "1.5.3" web3-eth-accounts@1.2.9: version "1.2.9" @@ -7773,22 +7554,22 @@ web3-eth-accounts@1.3.4: web3-core-method "1.3.4" web3-utils "1.3.4" -web3-eth-accounts@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.5.tgz#c23ee748759a6a06d6485a9322b106baa944dcdd" - integrity sha512-r3WOR21rgm6Cd6OFnifr3Tizdm5K+g2TsSOPySwX4FrgLrYDL6ck4zr5VXUPz+llpSExb/JztpE8pqEHr3U2NA== +web3-eth-accounts@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.5.3.tgz#076c816ff4d68c9dffebdc7fd2bfaddcfc163d77" + integrity sha512-pdGhXgeBaEJENMvRT6W9cmji3Zz/46ugFSvmnLLw79qi5EH7XJhKISNVb41eWCrs4am5GhI67GLx5d2s2a72iw== dependencies: + "@ethereumjs/common" "^2.3.0" + "@ethereumjs/tx" "^3.2.1" crypto-browserify "3.12.0" eth-lib "0.2.8" - ethereumjs-common "^1.3.2" - ethereumjs-tx "^2.1.1" + ethereumjs-util "^7.0.10" scrypt-js "^3.0.1" - underscore "1.9.1" uuid "3.3.2" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-utils "1.3.5" + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-utils "1.5.3" web3-eth-contract@1.2.9: version "1.2.9" @@ -7820,20 +7601,19 @@ web3-eth-contract@1.3.4: web3-eth-abi "1.3.4" web3-utils "1.3.4" -web3-eth-contract@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.5.tgz#b41ecf8612b379c4fb1c614e950135717aa8f919" - integrity sha512-WfGVeQquN3D7Qm+KEIN9EI7yrm/fL2V9Y4+YhDWiKA/ns1pX1LYcEWojTOnBXCnPF3tcvoKKL+KBxXg1iKm38A== +web3-eth-contract@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.5.3.tgz#12b03a4a16ce583a945f874bea2ff2fb4c5b81ad" + integrity sha512-Gdlt1L6cdHe83k7SdV6xhqCytVtOZkjD0kY/15x441AuuJ4JLubCHuqu69k2Dr3tWifHYVys/vG8QE/W16syGg== dependencies: "@types/bn.js" "^4.11.5" - underscore "1.9.1" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-core-promievent "1.3.5" - web3-core-subscriptions "1.3.5" - web3-eth-abi "1.3.5" - web3-utils "1.3.5" + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-core-promievent "1.5.3" + web3-core-subscriptions "1.5.3" + web3-eth-abi "1.5.3" + web3-utils "1.5.3" web3-eth-ens@1.2.9: version "1.2.9" @@ -7865,20 +7645,19 @@ web3-eth-ens@1.3.4: web3-eth-contract "1.3.4" web3-utils "1.3.4" -web3-eth-ens@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.5.tgz#5a28d23eb402fb1f6964da60ea60641e4d24d366" - integrity sha512-5bkpFTXV18CvaVP8kCbLZZm2r1TWUv9AsXH+80yz8bTZulUGvXsBMRfK6e5nfEr2Yv59xlIXCFoalmmySI9EJw== +web3-eth-ens@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.5.3.tgz#ef6eee1ddf32b1ff9536fc7c599a74f2656bafe1" + integrity sha512-QmGFFtTGElg0E+3xfCIFhiUF+1imFi9eg/cdsRMUZU4F1+MZCC/ee+IAelYLfNTGsEslCqfAusliKOT9DdGGnw== dependencies: content-hash "^2.5.2" eth-ens-namehash "2.0.8" - underscore "1.9.1" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-promievent "1.3.5" - web3-eth-abi "1.3.5" - web3-eth-contract "1.3.5" - web3-utils "1.3.5" + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-promievent "1.5.3" + web3-eth-abi "1.5.3" + web3-eth-contract "1.5.3" + web3-utils "1.5.3" web3-eth-iban@1.2.9: version "1.2.9" @@ -7896,13 +7675,13 @@ web3-eth-iban@1.3.4: bn.js "^4.11.9" web3-utils "1.3.4" -web3-eth-iban@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.5.tgz#dff1e37864e23a3387016ec4db96cdc290a6fbd6" - integrity sha512-x+BI/d2Vt0J1cKK8eFd4W0f1TDjgEOYCwiViTb28lLE+tqrgyPqWDA+l6UlKYLF/yMFX3Dym4ofcCOtgcn4q4g== +web3-eth-iban@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.5.3.tgz#91b1475893a877b10eac1de5cce6eb379fb81b5d" + integrity sha512-vMzmGqolYZvRHwP9P4Nf6G8uYM5aTLlQu2a34vz78p0KlDC+eV1th3+90Qeaupa28EG7OO0IT1F0BejiIauOPw== dependencies: bn.js "^4.11.9" - web3-utils "1.3.5" + web3-utils "1.5.3" web3-eth-personal@1.2.9: version "1.2.9" @@ -7928,17 +7707,17 @@ web3-eth-personal@1.3.4: web3-net "1.3.4" web3-utils "1.3.4" -web3-eth-personal@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.5.tgz#bc5d5b900bc4824139af2ef01eaf8e9855c644ba" - integrity sha512-xELQHNZ8p3VoO1582ghCaq+Bx7pSkOOalc6/ACOCGtHDMelqgVejrmSIZGScYl+k0HzngmQAzURZWQocaoGM1g== +web3-eth-personal@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.5.3.tgz#4ebe09e9a77dd49d23d93b36b36cfbf4a6dae713" + integrity sha512-JzibJafR7ak/Icas8uvos3BmUNrZw1vShuNR5Cxjo+vteOC8XMqz1Vr7RH65B4bmlfb3bm9xLxetUHO894+Sew== dependencies: "@types/node" "^12.12.6" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-net "1.3.5" - web3-utils "1.3.5" + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-net "1.5.3" + web3-utils "1.5.3" web3-eth@1.2.9: version "1.2.9" @@ -7978,24 +7757,23 @@ web3-eth@1.3.4: web3-net "1.3.4" web3-utils "1.3.4" -web3-eth@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.5.tgz#2a3d0db870ef7921942a5d798ba0569175cc4de1" - integrity sha512-5qqDPMMD+D0xRqOV2ePU2G7/uQmhn0FgCEhFzKDMHrssDQJyQLW/VgfA0NLn64lWnuUrGnQStGvNxrWf7MgsfA== - dependencies: - underscore "1.9.1" - web3-core "1.3.5" - web3-core-helpers "1.3.5" - web3-core-method "1.3.5" - web3-core-subscriptions "1.3.5" - web3-eth-abi "1.3.5" - web3-eth-accounts "1.3.5" - web3-eth-contract "1.3.5" - web3-eth-ens "1.3.5" - web3-eth-iban "1.3.5" - web3-eth-personal "1.3.5" - web3-net "1.3.5" - web3-utils "1.3.5" +web3-eth@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.5.3.tgz#d7d1ac7198f816ab8a2088c01e0bf1eda45862fe" + integrity sha512-saFurA1L23Bd7MEf7cBli6/jRdMhD4X/NaMiO2mdMMCXlPujoudlIJf+VWpRWJpsbDFdu7XJ2WHkmBYT5R3p1Q== + dependencies: + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-core-subscriptions "1.5.3" + web3-eth-abi "1.5.3" + web3-eth-accounts "1.5.3" + web3-eth-contract "1.5.3" + web3-eth-ens "1.5.3" + web3-eth-iban "1.5.3" + web3-eth-personal "1.5.3" + web3-net "1.5.3" + web3-utils "1.5.3" web3-net@1.2.9: version "1.2.9" @@ -8015,14 +7793,14 @@ web3-net@1.3.4: web3-core-method "1.3.4" web3-utils "1.3.4" -web3-net@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.5.tgz#06e3465a9fbbeec1240160e2fd66ddb07b6af944" - integrity sha512-usbFbuUpKK8s7jPLGoUzi/WpNnefGFPTj948aJv8BZ04UQA4L/XS5NNkkhk358zNMmhGfEFW8wrWy+0Oy0njtA== +web3-net@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.5.3.tgz#545fee49b8e213b0c55cbe74ffd0295766057463" + integrity sha512-0W/xHIPvgVXPSdLu0iZYnpcrgNnhzHMC888uMlGP5+qMCt8VuflUZHy7tYXae9Mzsg1kxaJAS5lHVNyeNw4CoQ== dependencies: - web3-core "1.3.5" - web3-core-method "1.3.5" - web3-utils "1.3.5" + web3-core "1.5.3" + web3-core-method "1.5.3" + web3-utils "1.5.3" web3-providers-http@1.2.9: version "1.2.9" @@ -8040,12 +7818,12 @@ web3-providers-http@1.3.4: web3-core-helpers "1.3.4" xhr2-cookies "1.1.0" -web3-providers-http@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.5.tgz#cdada6fb342e08fd75aea249fceb6eee467beffc" - integrity sha512-ZQOmceFjcajEZdiuqciXjijwIYWNmEJ1oxMtbrwB2eGxHRCMXEH2xGRUZuhOFNF88yQC/VXVi14yvYg5ZlFJlA== +web3-providers-http@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.5.3.tgz#74f170fc3d79eb7941d9fbc34e2a067d61ced0b2" + integrity sha512-5DpUyWGHtDAr2RYmBu34Fu+4gJuBAuNx2POeiJIooUtJ+Mu6pIx4XkONWH6V+Ez87tZAVAsFOkJRTYuzMr3rPw== dependencies: - web3-core-helpers "1.3.5" + web3-core-helpers "1.5.3" xhr2-cookies "1.1.0" web3-providers-ipc@1.2.9: @@ -8066,14 +7844,13 @@ web3-providers-ipc@1.3.4: underscore "1.9.1" web3-core-helpers "1.3.4" -web3-providers-ipc@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.5.tgz#2f5536abfe03f3824e00dedc614d8f46db72b57f" - integrity sha512-cbZOeb/sALiHjzMolJjIyHla/J5wdL2JKUtRO66Nh/uLALBCpU8JUgzNvpAdJ1ae3+A33+EdFStdzuDYHKtQew== +web3-providers-ipc@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.5.3.tgz#4bd7f5e445c2f3c2595fce0929c72bb879320a3f" + integrity sha512-JmeAptugVpmXI39LGxUSAymx0NOFdgpuI1hGQfIhbEAcd4sv7fhfd5D+ZU4oLHbRI8IFr4qfGU0uhR8BXhDzlg== dependencies: oboe "2.1.5" - underscore "1.9.1" - web3-core-helpers "1.3.5" + web3-core-helpers "1.5.3" web3-providers-ws@1.2.9: version "1.2.9" @@ -8095,14 +7872,13 @@ web3-providers-ws@1.3.4: web3-core-helpers "1.3.4" websocket "^1.0.32" -web3-providers-ws@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.5.tgz#7f841ec79358d90c4a803d1291157b5ffb15aeb7" - integrity sha512-zeZ4LMvKhYaJBDCqA//Bzgp4r/T0tNq5U/xvN0axA4YflzF7yqlsbzGwCkcZYDbrUaK3Ltl2uOmvwjbWALOZ1A== +web3-providers-ws@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.5.3.tgz#eec6cfb32bb928a4106de506f13a49070a21eabf" + integrity sha512-6DhTw4Q7nm5CFYEUHOJM0gAb3xFx+9gWpVveg3YxJ/ybR1BUvEWo3bLgIJJtX56cYX0WyY6DS35a7f0LOI1kVg== dependencies: eventemitter3 "4.0.4" - underscore "1.9.1" - web3-core-helpers "1.3.5" + web3-core-helpers "1.5.3" websocket "^1.0.32" web3-shh@1.2.9: @@ -8125,15 +7901,15 @@ web3-shh@1.3.4: web3-core-subscriptions "1.3.4" web3-net "1.3.4" -web3-shh@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.5.tgz#af0b8ebca90a3652dbbb90d351395f36ca91f40b" - integrity sha512-aRwzCduXvuGVslLL/Y15VcOHa70Qr2kxZI7UwOzQVhaaOdxuRRvo3AK/cmyln1Tsd54/n93Yk8I3qg5I2+6alw== +web3-shh@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.5.3.tgz#3c04aa4cda9ba0b746d7225262401160f8e38b13" + integrity sha512-COfEXfsqoV/BkcsNLRxQqnWc1Teb8/9GxdGag5GtPC5gQC/vsN+7hYVJUwNxY9LtJPKYTij2DHHnx6UkITng+Q== dependencies: - web3-core "1.3.5" - web3-core-method "1.3.5" - web3-core-subscriptions "1.3.5" - web3-net "1.3.5" + web3-core "1.5.3" + web3-core-method "1.5.3" + web3-core-subscriptions "1.5.3" + web3-net "1.5.3" web3-utils@1.2.9: version "1.2.9" @@ -8163,10 +7939,10 @@ web3-utils@1.3.4, web3-utils@^1.2.5, web3-utils@^1.3.0: underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.5.tgz#14ee2ff1a7a226867698d6eaffd21aa97aed422e" - integrity sha512-5apMRm8ElYjI/92GHqijmaLC+s+d5lgjpjHft+rJSs/dsnX8I8tQreqev0dmU+wzU+2EEe4Sx9a/OwGWHhQv3A== +web3-utils@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.5.3.tgz#e914c9320cd663b2a09a5cb920ede574043eb437" + integrity sha512-56nRgA+Ad9SEyCv39g36rTcr5fpsd4L9LgV3FK0aB66nAMazLAA6Qz4lH5XrUKPDyBIPGJIR+kJsyRtwcu2q1Q== dependencies: bn.js "^4.11.9" eth-lib "0.2.8" @@ -8174,7 +7950,6 @@ web3-utils@1.3.5: ethjs-unit "0.1.6" number-to-bn "1.7.0" randombytes "^2.1.0" - underscore "1.9.1" utf8 "3.0.0" web3@1.2.9: @@ -8203,18 +7978,18 @@ web3@^1.0.0-beta.34, web3@^1.2.5: web3-shh "1.3.4" web3-utils "1.3.4" -web3@^1.3.5: - version "1.3.5" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.5.tgz#ef4c3a2241fdd74f2f7794e839f30bc6f9814e46" - integrity sha512-UyQW/MT5EIGBrXPCh/FDIaD7RtJTn5/rJUNw2FOglp0qoXnCQHNKvntiR1ylztk05fYxIF6UgsC76IrazlKJjw== +web3@^1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.5.3.tgz#11882679453c645bf33620fbc255a243343075aa" + integrity sha512-eyBg/1K44flfv0hPjXfKvNwcUfIVDI4NX48qHQe6wd7C8nPSdbWqo9vLy6ksZIt9NLa90HjI8HsGYgnMSUxn6w== dependencies: - web3-bzz "1.3.5" - web3-core "1.3.5" - web3-eth "1.3.5" - web3-eth-personal "1.3.5" - web3-net "1.3.5" - web3-shh "1.3.5" - web3-utils "1.3.5" + web3-bzz "1.5.3" + web3-core "1.5.3" + web3-eth "1.5.3" + web3-eth-personal "1.5.3" + web3-net "1.5.3" + web3-shh "1.5.3" + web3-utils "1.5.3" websocket@^1.0.31, websocket@^1.0.32: version "1.0.33" @@ -8327,10 +8102,10 @@ write@1.0.3: dependencies: mkdirp "^0.5.1" -ws@7.2.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" - integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== ws@^3.0.0: version "3.3.3" @@ -8341,10 +8116,10 @@ ws@^3.0.0: safe-buffer "~5.1.0" ultron "~1.1.0" -ws@^7.2.1: - version "7.4.4" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.4.tgz#383bc9742cb202292c9077ceab6f6047b17f2d59" - integrity sha512-Qm8k8ojNQIMx7S+Zp8u/uHOx7Qazv3Yv4q68MiWWWOJhiwG5W3x7iqmRtJo8xxrciZUY4vRxUTJCKuRnF28ZZw== +ws@^7.4.6: + version "7.5.5" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" + integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== xhr-request-promise@^0.1.2: version "0.1.3" @@ -8388,18 +8163,11 @@ xmlhttprequest@1.8.0: resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= -xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0: +xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -xtend@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= - dependencies: - object-keys "~0.4.0" - y18n@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" From 26c0173f08cb417cc4162f5b37106372a594138a Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 9 Nov 2021 21:50:10 +0200 Subject: [PATCH 18/55] RET-01M: Circumvention of Checkpointing Mechanism --- .openzeppelin/goerli.json | 578 +++++++++++- abi/Roles.json | 52 - contracts/Roles.sol | 16 - contracts/interfaces/IRoles.sol | 24 - contracts/pool/PoolValidators.sol | 6 +- contracts/tokens/RewardEthToken.sol | 2 +- deployments/index.js | 16 + deployments/settings.js | 23 +- networks/goerli.md | 30 +- package.json | 22 +- test/Roles.test.js | 60 +- test/pool/PoolValidators.test.js | 113 ++- test/pool/stake.test.js | 6 +- test/tokens/toggleRewards.test.js | 87 ++ test/utils.js | 2 +- yarn.lock | 1364 +++++++++++++++------------ 16 files changed, 1487 insertions(+), 914 deletions(-) diff --git a/.openzeppelin/goerli.json b/.openzeppelin/goerli.json index 1dda7450..aef67f8b 100755 --- a/.openzeppelin/goerli.json +++ b/.openzeppelin/goerli.json @@ -1,5 +1,66 @@ { "manifestVersion": "3.2", + "admin": { + "address": "0xbba3f4dDD4F705aD2028ee2da64fF3166bDe8cA8", + "txHash": "0x8f4bd6ede50b7fc589807a9277c3cd2624d2b5b4f9cda20b589aa2cb8b5a0cc5" + }, + "proxies": [ + { + "address": "0xE2F13059454b626e42e04845815E9Ed2E9774bF3", + "txHash": "0x9a5736954e33ca69b290d07d804114ea7aa4817a871b9940a19a87e3a9958974", + "kind": "transparent" + }, + { + "address": "0x8c1EfEcFb5c4F1099AB0460b5659342943764Df7", + "txHash": "0x35323b9efb3871df2852134fc15c76dba1233a665d8f3224c48e4ef55e9f1232", + "kind": "transparent" + }, + { + "address": "0x221D9812823DBAb0F1fB40b0D294D9875980Ac19", + "txHash": "0xd745ea1ff1ada4725d40b2c7e73ba4bbc7171ab513822a0838e21a55d1c3a44c", + "kind": "transparent" + }, + { + "address": "0x826f88d423440c305D9096cC1581Ae751eFCAfB0", + "txHash": "0xdf77776425e06f9d045c33315ed8223dd274abf807687158a39bd34556dd01a6", + "kind": "transparent" + }, + { + "address": "0x0e2497aACec2755d831E4AFDEA25B4ef1B823855", + "txHash": "0xa4e348e58f8144e3cf6973983001e7fb6e74f0bb423f5a37ba87c686cf178314", + "kind": "transparent" + }, + { + "address": "0xE54486fa4eB45716c5725d7A46FDDe810B8E8914", + "txHash": "0xf8ef8983fb157d8606e06a9ccedd4a6b057d170f0871961e285d84957a7f246c", + "kind": "transparent" + }, + { + "address": "0xbA91cdD484893c1f8F75DB55733ccaDcd0fE5f59", + "txHash": "0xdcb1d1dfbb6a0bdfe5f2dfd9cc83a91f1a3e0fefd6c655f3afa6f3a29a012d7f", + "kind": "transparent" + }, + { + "address": "0x6Ef0172b79131C66c7012Db3545D637B116feb12", + "txHash": "0x6f4a9d39776a4eb4cfd41738e0e8718aa240da00d2ceda44b1527b771a978535", + "kind": "transparent" + }, + { + "address": "0xe3daeBE5D6Cd72372d03059BF8A2d9A53ABBdb8f", + "txHash": "0xfd2d2f8d1b4dd575ac88238b1705a812d0222e38e11675ee2561ce1ec42c6565", + "kind": "transparent" + }, + { + "address": "0x696b622baFA1747333BeE5D1142bb530E41d1063", + "txHash": "0xe2e64089029fda80229418f8c74128ed1feba0939209394000e703186ce1c9f6", + "kind": "transparent" + }, + { + "address": "0x039FF733aA9736D66bFA96aD61Fa635E97464D66", + "txHash": "0xba8a985fd5618230288732e864561667673042b04dd33118999f9b149863d68e", + "kind": "transparent" + } + ], "impls": { "84dece82968538be3061b96eba9ebf393b48892f1cc2d730d20711cfa3f49e86": { "address": "0x70318289179C01FdBcce8c4071c6556cbd2C613b", @@ -2490,52 +2551,483 @@ } } } - } - }, - "proxies": [ - { - "address": "0xE2F13059454b626e42e04845815E9Ed2E9774bF3", - "kind": "transparent", - "txHash": "0x9a5736954e33ca69b290d07d804114ea7aa4817a871b9940a19a87e3a9958974" - }, - { - "address": "0x8c1EfEcFb5c4F1099AB0460b5659342943764Df7", - "kind": "transparent", - "txHash": "0x35323b9efb3871df2852134fc15c76dba1233a665d8f3224c48e4ef55e9f1232" - }, - { - "address": "0x221D9812823DBAb0F1fB40b0D294D9875980Ac19", - "kind": "transparent", - "txHash": "0xd745ea1ff1ada4725d40b2c7e73ba4bbc7171ab513822a0838e21a55d1c3a44c" - }, - { - "address": "0x826f88d423440c305D9096cC1581Ae751eFCAfB0", - "kind": "transparent", - "txHash": "0xdf77776425e06f9d045c33315ed8223dd274abf807687158a39bd34556dd01a6" - }, - { - "address": "0x0e2497aACec2755d831E4AFDEA25B4ef1B823855", - "kind": "transparent", - "txHash": "0xa4e348e58f8144e3cf6973983001e7fb6e74f0bb423f5a37ba87c686cf178314" }, - { - "address": "0xE54486fa4eB45716c5725d7A46FDDe810B8E8914", - "kind": "transparent", - "txHash": "0xf8ef8983fb157d8606e06a9ccedd4a6b057d170f0871961e285d84957a7f246c" + "3ed406b186d307f07f9bddccd020038668a000ca60bf30e827cde815e0604f80": { + "address": "0x29c364B7e5D65e24F73d0c2468aA6B69bB5D024e", + "txHash": "0x1a2f667cd1c36987fb2480e44ab063a033d7f128da6fd2d2e64c343bb76262b1", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" + }, + { + "contract": "ReentrancyGuardUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" + }, + { + "contract": "PoolValidators", + "label": "validatorStatuses", + "type": "t_mapping(t_bytes32,t_enum(ValidatorStatus)6690)", + "src": "contracts/pool/PoolValidators.sol:24" + }, + { + "contract": "PoolValidators", + "label": "collaterals", + "type": "t_mapping(t_address,t_uint256)", + "src": "contracts/pool/PoolValidators.sol:27" + }, + { + "contract": "PoolValidators", + "label": "operators", + "type": "t_mapping(t_address,t_struct(Operator)6674_storage)", + "src": "contracts/pool/PoolValidators.sol:30" + }, + { + "contract": "PoolValidators", + "label": "pool", + "type": "t_contract(IPool)6604", + "src": "contracts/pool/PoolValidators.sol:33" + }, + { + "contract": "PoolValidators", + "label": "oracles", + "type": "t_address", + "src": "contracts/pool/PoolValidators.sol:36" + } + ], + "types": { + "t_mapping(t_bytes32,t_enum(ValidatorStatus)6690)": { + "label": "mapping(bytes32 => enum IPoolValidators.ValidatorStatus)" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_enum(ValidatorStatus)6690": { + "label": "enum IPoolValidators.ValidatorStatus", + "members": [ + "Uninitialized", + "Initialized", + "Finalized", + "Failed" + ] + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)" + }, + "t_address": { + "label": "address" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_address,t_struct(Operator)6674_storage)": { + "label": "mapping(address => struct IPoolValidators.Operator)" + }, + "t_struct(Operator)6674_storage": { + "label": "struct IPoolValidators.Operator", + "members": [ + { + "label": "initializeMerkleRoot", + "type": "t_bytes32" + }, + { + "label": "finalizeMerkleRoot", + "type": "t_bytes32" + }, + { + "label": "locked", + "type": "t_bool" + }, + { + "label": "committed", + "type": "t_bool" + } + ] + }, + "t_bool": { + "label": "bool" + }, + "t_contract(IPool)6604": { + "label": "contract IPool" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } }, - { - "address": "0xbA91cdD484893c1f8F75DB55733ccaDcd0fE5f59", - "kind": "transparent", - "txHash": "0xdcb1d1dfbb6a0bdfe5f2dfd9cc83a91f1a3e0fefd6c655f3afa6f3a29a012d7f" + "5224a7ce19b6cc5d5de4321bcd9e0c2db26f5238a019a580242aeb8cce83c586": { + "address": "0xE03B63730a917757c8BbC8Bbe8D0f7A57e7075d2", + "txHash": "0x7cfa36bc27d8a1c589fdae2fbcca07bab1f9b7c0d3d8d9c820f89c7e68d860de", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "Oracles", + "label": "rewardsNonce", + "type": "t_struct(Counter)1781_storage", + "src": "contracts/Oracles.sol:49" + }, + { + "contract": "Oracles", + "label": "validatorsNonce", + "type": "t_struct(Counter)1781_storage", + "src": "contracts/Oracles.sol:52" + }, + { + "contract": "Oracles", + "label": "rewardEthToken", + "type": "t_contract(IRewardEthToken)6987", + "src": "contracts/Oracles.sol:55" + }, + { + "contract": "Oracles", + "label": "pool", + "type": "t_contract(IPool)6604", + "src": "contracts/Oracles.sol:58" + }, + { + "contract": "Oracles", + "label": "poolValidators", + "type": "t_contract(IPoolValidators)6831", + "src": "contracts/Oracles.sol:61" + }, + { + "contract": "Oracles", + "label": "merkleDistributor", + "type": "t_contract(IMerkleDistributor)6059", + "src": "contracts/Oracles.sol:64" + } + ], + "types": { + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, + "t_uint256": { + "label": "uint256" + }, + "t_contract(IRewardEthToken)6987": { + "label": "contract IRewardEthToken" + }, + "t_contract(IPool)6604": { + "label": "contract IPool" + }, + "t_contract(IPoolValidators)6831": { + "label": "contract IPoolValidators" + }, + "t_contract(IMerkleDistributor)6059": { + "label": "contract IMerkleDistributor" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } }, - { - "address": "0x6Ef0172b79131C66c7012Db3545D637B116feb12", - "kind": "transparent", - "txHash": "0x6f4a9d39776a4eb4cfd41738e0e8718aa240da00d2ceda44b1527b771a978535" + "94f527d3d9ee34ef4e4b50eb45fa61007d2ce4bb566d8cdc28b18e4a8b869038": { + "address": "0x906447B38C296311aCDb75Be36772F8Fd52D9275", + "txHash": "0x16badf54367972f9a9b26e5214afe873f82c2a4091a63038d21cb576eab8a2c1", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + } + ], + "types": { + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_uint256": { + "label": "uint256" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } } - ], - "admin": { - "address": "0xbba3f4dDD4F705aD2028ee2da64fF3166bDe8cA8", - "txHash": "0x8f4bd6ede50b7fc589807a9277c3cd2624d2b5b4f9cda20b589aa2cb8b5a0cc5" } } diff --git a/abi/Roles.json b/abi/Roles.json index b343e0d3..b8792e46 100644 --- a/abi/Roles.json +++ b/abi/Roles.json @@ -76,32 +76,6 @@ "name": "Paused", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "referrer", - "type": "address" - } - ], - "name": "ReferrerAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "referrer", - "type": "address" - } - ], - "name": "ReferrerRemoved", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -242,19 +216,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "addReferrer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -482,19 +443,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "name": "removeReferrer", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { diff --git a/contracts/Roles.sol b/contracts/Roles.sol index b5bc418d..fa2314a2 100644 --- a/contracts/Roles.sol +++ b/contracts/Roles.sol @@ -51,20 +51,4 @@ contract Roles is IRoles, OwnablePausableUpgradeable { require(account != address(0), "Roles: account is the zero address"); emit PartnerRemoved(account); } - - /** - * @dev See {IRoles-addReferrer}. - */ - function addReferrer(address account) external override onlyAdmin whenNotPaused { - require(account != address(0), "Roles: account is the zero address"); - emit ReferrerAdded(account); - } - - /** - * @dev See {IRoles-removeReferrer}. - */ - function removeReferrer(address account) external override onlyAdmin whenNotPaused { - require(account != address(0), "Roles: account is the zero address"); - emit ReferrerRemoved(account); - } } diff --git a/contracts/interfaces/IRoles.sol b/contracts/interfaces/IRoles.sol index 00116bf5..664ea1f4 100644 --- a/contracts/interfaces/IRoles.sol +++ b/contracts/interfaces/IRoles.sol @@ -32,18 +32,6 @@ interface IRoles { */ event PartnerRemoved(address indexed partner); - /** - * @dev Event for tracking referrers' additions. - * @param referrer - address of the referrer. - */ - event ReferrerAdded(address indexed referrer); - - /** - * @dev Event for tracking referrers' removals. - * @param referrer - address of the referrer. - */ - event ReferrerRemoved(address indexed referrer); - /** * @dev Constructor for initializing the Roles contract. * @param admin - address of the contract admin. @@ -75,16 +63,4 @@ interface IRoles { * @param account - address of the account to remove. */ function removePartner(address account) external; - - /** - * @dev Function for adding the referrer. Can only be called by account with `admin` privilege. - * @param account - address of the account to add. - */ - function addReferrer(address account) external; - - /** - * @dev Function for removing the referrer. Can only be called by account with `admin` privilege. - * @param account - address of the account to remove. - */ - function removeReferrer(address account) external; } diff --git a/contracts/pool/PoolValidators.sol b/contracts/pool/PoolValidators.sol index 4b7952c0..eff1ac2c 100644 --- a/contracts/pool/PoolValidators.sol +++ b/contracts/pool/PoolValidators.sol @@ -104,7 +104,7 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran function commitOperator() external payable override whenNotPaused { // mark operator as committed Operator storage operator = operators[msg.sender]; - require(operator.initializeMerkleRoot != "", "PoolValidators: invalid operator"); + require(operator.initializeMerkleRoot != "" && !operator.committed, "PoolValidators: invalid operator"); operator.committed = true; uint256 newCollateral = collaterals[msg.sender].add(msg.value); @@ -203,7 +203,7 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran /** * @dev See {IPoolValidators-initializeValidator}. */ - function initializeValidator(DepositData memory depositData, bytes32[] memory merkleProof) external override whenNotPaused { + function initializeValidator(DepositData memory depositData, bytes32[] memory merkleProof) external override { require(msg.sender == oracles, "PoolValidators: access denied"); // mark validator as initialized -> prevents from initializing the same validator twice @@ -255,7 +255,7 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran /** * @dev See {IPoolValidators-finalizeValidator}. */ - function finalizeValidator(DepositData memory depositData, bytes32[] memory merkleProof) external override whenNotPaused { + function finalizeValidator(DepositData memory depositData, bytes32[] memory merkleProof) external override { require(msg.sender == oracles, "PoolValidators: access denied"); // mark validator as finalized -> prevents from finalizing the same validator twice diff --git a/contracts/tokens/RewardEthToken.sol b/contracts/tokens/RewardEthToken.sol index 592d0078..e00804c1 100644 --- a/contracts/tokens/RewardEthToken.sol +++ b/contracts/tokens/RewardEthToken.sol @@ -170,7 +170,7 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per if (stakedEthAmount == 0) { checkpoints[account] = Checkpoint({ reward: cp.reward, - rewardPerToken: cp.rewardPerToken + rewardPerToken: newRewardPerToken }); } else { uint256 periodRewardPerToken = uint256(newRewardPerToken).sub(cp.rewardPerToken); diff --git a/deployments/index.js b/deployments/index.js index f5531237..64a27840 100644 --- a/deployments/index.js +++ b/deployments/index.js @@ -62,6 +62,13 @@ async function deployAndInitializeRoles() { return proxy.address; } +async function deployAndInitializeContractChecker() { + const ContractChecker = await ethers.getContractFactory('ContractChecker'); + const contractChecker = await ContractChecker.deploy(); + await contractChecker.deployed(); + return contractChecker.address; +} + async function upgradeMerkleDistributor(oraclesContractAddress) { const signer = await ethers.provider.getSigner(contractSettings.admin); const MerkleDistributor = await ethers.getContractFactory( @@ -149,6 +156,15 @@ async function deployContracts() { const roles = await deployAndInitializeRoles(); log(white(`Deployed and initialized Roles contract: ${green(roles)}`)); + const contractChecker = await deployAndInitializeContractChecker(); + log( + white( + `Deployed and initialized ContractChecker contract: ${green( + contractChecker + )}` + ) + ); + return { poolValidators, oracles, diff --git a/deployments/settings.js b/deployments/settings.js index 1251b355..c0613acb 100644 --- a/deployments/settings.js +++ b/deployments/settings.js @@ -4,8 +4,9 @@ let contracts, contractSettings; if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { contracts = { validators: '0xE2F13059454b626e42e04845815E9Ed2E9774bF3', - oracles: '0xE54486fa4eB45716c5725d7A46FDDe810B8E8914', + oracles: '0x696b622baFA1747333BeE5D1142bb530E41d1063', pool: '0x8c1EfEcFb5c4F1099AB0460b5659342943764Df7', + poolValidators: '0xe3daeBE5D6Cd72372d03059BF8A2d9A53ABBdb8f', poolEscrow: '0x040F15C6b5Bfc5F324eCaB5864C38D4e1EEF4218', stakedEthToken: '0x221D9812823DBAb0F1fB40b0D294D9875980Ac19', rewardEthToken: '0x826f88d423440c305D9096cC1581Ae751eFCAfB0', @@ -13,21 +14,14 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { vestingEscrowFactory: '0xbA91cdD484893c1f8F75DB55733ccaDcd0fE5f59', merkleDrop: '0xFc3513E92799F0169e5f14F354d0097E4b790498', merkleDistributor: '0x6Ef0172b79131C66c7012Db3545D637B116feb12', + roles: '0x039FF733aA9736D66bFA96aD61Fa635E97464D66', + contractChecker: '0x85ee326f839Bc430655A3fad447837072ef52C2F', proxyAdmin: '0xbba3f4dDD4F705aD2028ee2da64fF3166bDe8cA8', }; contractSettings = { - cancelLockDuration: '86400', // 1 day - validatorPrice: '10000000000000000000', // 10 DAI / month - protocolFee: '1000', // 10%, admin: '0x1867c96601bc5fE24F685d112314B8F3Fe228D5A', - protocolFeeRecipient: '0x1867c96601bc5fE24F685d112314B8F3Fe228D5A', - VRC: '0x8c5fecdC472E27Bc447696F431E425D02dd46a8c', vestingEscrow: '0x4CDAe3f1Eaa84b88fFc97627Ef1c77F762794287', - withdrawalCredentials: - '0x003e294ffc37978496f1b9298d5984ad4d55d4e2d1e6a06ee6904810c7b9e0d5', - minActivatingDeposit: '5000000000000000000', // 5 ETH - pendingValidatorsLimit: '500', // 5 % }; } else { contracts = { @@ -45,17 +39,8 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { }; contractSettings = { - cancelLockDuration: '86400', // 1 day - validatorPrice: '10000000000000000000', // 10 DAI / month - protocolFee: '1000', // 10 %, admin: '0x144a98cb1CdBb23610501fE6108858D9B7D24934', - protocolFeeRecipient: '0xf91AA4a655B6F43243ed4C2853F3508314DaA2aB', - VRC: '0x00000000219ab540356cbb839cbe05303d7705fa', vestingEscrow: '0x1E6d872CE26C8711e7D47b8E0C47aB91d95a6dF3', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - minActivatingDeposit: '32000000000000000000', // 32 ETH - pendingValidatorsLimit: '500', // 5 % }; } diff --git a/networks/goerli.md b/networks/goerli.md index 9bf7a6f7..4eda8551 100755 --- a/networks/goerli.md +++ b/networks/goerli.md @@ -1,10 +1,5 @@ # Goerli Contracts -## Validators - -- Contract: [0xE2F13059454b626e42e04845815E9Ed2E9774bF3](https://goerli.etherscan.io/address/0xE2F13059454b626e42e04845815E9Ed2E9774bF3) -- Transaction: [0x9a5736954e33ca69b290d07d804114ea7aa4817a871b9940a19a87e3a9958974](https://goerli.etherscan.io/tx/0x9a5736954e33ca69b290d07d804114ea7aa4817a871b9940a19a87e3a9958974) - ## Pool - Contract: [0x8c1EfEcFb5c4F1099AB0460b5659342943764Df7](https://goerli.etherscan.io/address/0x8c1EfEcFb5c4F1099AB0460b5659342943764Df7) @@ -20,10 +15,10 @@ - Contract: [0x040F15C6b5Bfc5F324eCaB5864C38D4e1EEF4218](https://goerli.etherscan.io/address/0x040f15c6b5bfc5f324ecab5864c38d4e1eef4218) - Transaction: [0x7d0aa2f273c715ee913ffc45a1f830faac52fb84bf384b6fa3ac58308f375602](https://goerli.etherscan.io/tx/0x7d0aa2f273c715ee913ffc45a1f830faac52fb84bf384b6fa3ac58308f375602) -## Solos +## Pool Validators -- Contract: [0xcf809A020EE599034C010b387F2116237a5B22Bc](https://goerli.etherscan.io/address/0xcf809A020EE599034C010b387F2116237a5B22Bc) -- Transaction: [0x19ef944992fb27c80db82dce243fba62749dc563c0920c65c05c06b1ac2a8a39](https://goerli.etherscan.io/tx/0x19ef944992fb27c80db82dce243fba62749dc563c0920c65c05c06b1ac2a8a39) +- Contract: [0xe3daeBE5D6Cd72372d03059BF8A2d9A53ABBdb8f](https://goerli.etherscan.io/address/0xe3daeBE5D6Cd72372d03059BF8A2d9A53ABBdb8f) +- Transaction: [0xfd2d2f8d1b4dd575ac88238b1705a812d0222e38e11675ee2561ce1ec42c6565](https://goerli.etherscan.io/tx/0xfd2d2f8d1b4dd575ac88238b1705a812d0222e38e11675ee2561ce1ec42c6565) ## StakedEthToken @@ -42,13 +37,8 @@ ## Oracles -- Contract: [0xE54486fa4eB45716c5725d7A46FDDe810B8E8914](https://goerli.etherscan.io/address/0xE54486fa4eB45716c5725d7A46FDDe810B8E8914) -- Transaction: [0xf8ef8983fb157d8606e06a9ccedd4a6b057d170f0871961e285d84957a7f246c](https://goerli.etherscan.io/tx/0xf8ef8983fb157d8606e06a9ccedd4a6b057d170f0871961e285d84957a7f246c) - -### Upgrade to v1.1.0 - -- Implementation: [0x35e467609D1982BCd7EcAff4e3f1fb22640CF4EF](https://goerli.etherscan.io/address/0x35e467609D1982BCd7EcAff4e3f1fb22640CF4EF) -- Transaction: [0x3922f5ae602033e445f8e191c522d4696a7834c83a03dbb7b548975e6734d015](https://goerli.etherscan.io/tx/0x3922f5ae602033e445f8e191c522d4696a7834c83a03dbb7b548975e6734d015) +- Contract: [0x696b622baFA1747333BeE5D1142bb530E41d1063](https://goerli.etherscan.io/address/0x696b622baFA1747333BeE5D1142bb530E41d1063) +- Transaction: [0xe2e64089029fda80229418f8c74128ed1feba0939209394000e703186ce1c9f6](https://goerli.etherscan.io/tx/0xe2e64089029fda80229418f8c74128ed1feba0939209394000e703186ce1c9f6) ## Vesting Escrow @@ -80,6 +70,16 @@ - Contract: [0x6Ef0172b79131C66c7012Db3545D637B116feb12](https://goerli.etherscan.io/address/0x6Ef0172b79131C66c7012Db3545D637B116feb12) - Transaction: [0x6f4a9d39776a4eb4cfd41738e0e8718aa240da00d2ceda44b1527b771a978535](https://goerli.etherscan.io/tx/0x6f4a9d39776a4eb4cfd41738e0e8718aa240da00d2ceda44b1527b771a978535) +## Roles + +- Contract: [0x039FF733aA9736D66bFA96aD61Fa635E97464D66](https://goerli.etherscan.io/address/0x039FF733aA9736D66bFA96aD61Fa635E97464D66) +- Transaction: [0xba8a985fd5618230288732e864561667673042b04dd33118999f9b149863d68e](https://goerli.etherscan.io/tx/0xba8a985fd5618230288732e864561667673042b04dd33118999f9b149863d68e) + +## Contract Checker + +- Contract: [0x85ee326f839Bc430655A3fad447837072ef52C2F](https://goerli.etherscan.io/address/0x85ee326f839Bc430655A3fad447837072ef52C2F) +- Transaction: [0x80254a6b782b5146ba311a3b1d21fd9a2002025a343dcac10907789b49974439](https://goerli.etherscan.io/tx/0x80254a6b782b5146ba311a3b1d21fd9a2002025a343dcac10907789b49974439) + ## Proxy Admin - Implementation: [0xbba3f4dDD4F705aD2028ee2da64fF3166bDe8cA8](https://goerli.etherscan.io/address/0xbba3f4dDD4F705aD2028ee2da64fF3166bDe8cA8) diff --git a/package.json b/package.json index b4bacaa7..06d318f5 100644 --- a/package.json +++ b/package.json @@ -45,32 +45,32 @@ "url": "https://github.com/stakewise/contracts/issues" }, "devDependencies": { - "@codechecks/client": "^0.1.11", + "@codechecks/client": "^0.1.12", "@nomiclabs/hardhat-ethers": "^2.0.2", - "@nomiclabs/hardhat-etherscan": "^2.1.6", + "@nomiclabs/hardhat-etherscan": "^2.1.7", "@nomiclabs/hardhat-truffle5": "^2.0.0", "@nomiclabs/hardhat-web3": "^2.0.0", "@openzeppelin/contracts": "3.4.1", "@openzeppelin/contracts-upgradeable": "3.4.1", - "@openzeppelin/hardhat-upgrades": "^1.10.0", - "@openzeppelin/test-helpers": "^0.5.13", + "@openzeppelin/hardhat-upgrades": "^1.12.0", + "@openzeppelin/test-helpers": "^0.5.15", "chai": "^4.3.4", "chalk": "^4.1.2", - "eslint": "^7.32.0", + "eslint": "^8.1.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", "eth-sig-util": "^3.0.1", - "ethers": "^5.4.7", - "hardhat": "^2.6.4", - "hardhat-abi-exporter": "^2.3.0", + "ethers": "^5.5.1", + "hardhat": "^2.6.8", + "hardhat-abi-exporter": "^2.3.1", "hardhat-contract-sizer": "^2.1.1", "hardhat-gas-reporter": "^1.0.4", - "husky": "^7.0.2", - "lint-staged": "11.1.2", + "husky": "^7.0.4", + "lint-staged": "11.2.6", "prettier": "^2.4.1", "solhint": "^3.3.6", "solidity-coverage": "^0.7.17", - "web3": "^1.5.3" + "web3": "^1.6.0" }, "dependencies": {} } diff --git a/test/Roles.test.js b/test/Roles.test.js index 21935a56..414e216c 100644 --- a/test/Roles.test.js +++ b/test/Roles.test.js @@ -16,7 +16,7 @@ const { const Roles = artifacts.require('Roles'); -contract('Roles', ([anyone, operator, referrer, partner]) => { +contract('Roles', ([anyone, operator, partner]) => { const admin = contractSettings.admin; let revenueShare = new BN(3000); let roles; @@ -168,62 +168,4 @@ contract('Roles', ([anyone, operator, referrer, partner]) => { ); }); }); - - describe('referrers', () => { - it('not admin fails to add referrer', async () => { - await expectRevert( - roles.addReferrer(referrer, { - from: anyone, - }), - 'OwnablePausable: access denied' - ); - }); - - it('fails to add referrer to zero address', async () => { - await expectRevert( - roles.addReferrer(constants.ZERO_ADDRESS, { - from: admin, - }), - 'Roles: account is the zero address' - ); - }); - - it('fails to add referrer when paused', async () => { - await roles.pause({ from: admin }); - await expectRevert( - roles.addReferrer(referrer, { - from: admin, - }), - 'Pausable: paused' - ); - }); - - it('admin can add referrer', async () => { - let receipt = await roles.addReferrer(referrer, { - from: admin, - }); - await expectEvent(receipt, 'ReferrerAdded', { - referrer, - }); - }); - - it('fails to remove zero address referrer', async () => { - await expectRevert( - roles.removeReferrer(constants.ZERO_ADDRESS, { - from: admin, - }), - 'Roles: account is the zero address' - ); - }); - - it('fails to remove referrer when paused', async () => { - await roles.pause({ from: admin }); - await expectRevert( - roles.removeReferrer(operator, { - from: admin, - }), - 'Pausable: paused' - ); - }); - }); }); diff --git a/test/pool/PoolValidators.test.js b/test/pool/PoolValidators.test.js index 6fae0156..f47f90b8 100644 --- a/test/pool/PoolValidators.test.js +++ b/test/pool/PoolValidators.test.js @@ -214,9 +214,9 @@ contract('Pool Validators', (accounts) => { } ); - await validators.depositCollateral(operator, { + await validators.commitOperator({ value: initAmount, - from: anyone, + from: operator, }); let { @@ -358,9 +358,9 @@ contract('Pool Validators', (accounts) => { }); it('fails to remove locked operator', async () => { - await validators.depositCollateral(operator, { + await validators.commitOperator({ value: initAmount, - from: anyone, + from: operator, }); let { @@ -406,10 +406,23 @@ contract('Pool Validators', (accounts) => { }); }); - describe('deposit collateral', () => { - it('fails to deposit with zero operator address', async () => { + describe('commit operator', () => { + beforeEach(async () => { + await validators.addOperator( + operator, + initializeMerkleRoot, + initializeMerkleProofs, + finalizeMerkleRoot, + finalizeMerkleProofs, + { + from: admin, + } + ); + }); + + it('fails to commit invalid operator', async () => { await expectRevert( - validators.depositCollateral(constants.ZERO_ADDRESS, { + validators.commitOperator({ value: initAmount, from: anyone, }), @@ -417,37 +430,37 @@ contract('Pool Validators', (accounts) => { ); }); - it('fails to deposit when collateral exists', async () => { - await validators.depositCollateral(operator, { + it('fails to commit operator twice', async () => { + await validators.commitOperator({ value: initAmount, - from: anyone, + from: operator, }); await expectRevert( - validators.depositCollateral(operator, { + validators.commitOperator({ value: initAmount, - from: anyone, + from: operator, }), - 'PoolValidators: collateral exists' + 'PoolValidators: invalid operator' ); }); - it('fails to deposit with invalid collateral value', async () => { + it('fails to commit with invalid collateral value', async () => { await expectRevert( - validators.depositCollateral(operator, { + validators.commitOperator({ value: initAmount.sub(new BN(1)), - from: anyone, + from: operator, }), 'PoolValidators: invalid collateral' ); }); - it('anyone can deposit collateral', async () => { - let receipt = await validators.depositCollateral(operator, { + it('can commit operator', async () => { + let receipt = await validators.commitOperator({ value: initAmount, - from: anyone, + from: operator, }); - await expectEvent(receipt, 'CollateralDeposited', { + await expectEvent(receipt, 'OperatorCommitted', { operator, collateral: initAmount, }); @@ -460,9 +473,19 @@ contract('Pool Validators', (accounts) => { describe('withdraw collateral', () => { const collateralRecipient = otherAccounts[0]; beforeEach(async () => { - await validators.depositCollateral(operator, { + await validators.addOperator( + operator, + initializeMerkleRoot, + initializeMerkleProofs, + finalizeMerkleRoot, + finalizeMerkleProofs, + { + from: admin, + } + ); + await validators.commitOperator({ value: initAmount, - from: anyone, + from: operator, }); }); @@ -476,16 +499,6 @@ contract('Pool Validators', (accounts) => { }); it('fails to withdraw for the existing operator', async () => { - await validators.addOperator( - operator, - initializeMerkleRoot, - initializeMerkleProofs, - finalizeMerkleRoot, - finalizeMerkleProofs, - { - from: admin, - } - ); await expectRevert( validators.withdrawCollateral(collateralRecipient, { from: operator, @@ -495,6 +508,7 @@ contract('Pool Validators', (accounts) => { }); it('fails to withdraw twice', async () => { + await validators.removeOperator(operator, { from: operator }); await validators.withdrawCollateral(collateralRecipient, { from: operator, }); @@ -507,6 +521,7 @@ contract('Pool Validators', (accounts) => { }); it('operator can withdraw collateral', async () => { + await validators.removeOperator(operator, { from: admin }); let currentBalance = await balance.current(collateralRecipient); let receipt = await validators.withdrawCollateral(collateralRecipient, { from: operator, @@ -545,9 +560,9 @@ contract('Pool Validators', (accounts) => { from: admin, } ); - await validators.depositCollateral(operator, { + await validators.commitOperator({ value: initAmount, - from: anyone, + from: operator, }); }); @@ -754,9 +769,9 @@ contract('Pool Validators', (accounts) => { }); it('fails to initialize twice', async () => { - await validators.depositCollateral(operator, { + await validators.commitOperator({ value: initAmount, - from: anyone, + from: operator, }); await initializeValidator({ operator, @@ -784,7 +799,7 @@ contract('Pool Validators', (accounts) => { ); }); - it('fails to initialize without collateral', async () => { + it('fails to initialize validator for not committed operator', async () => { await expectRevert( initializeValidator({ operator, @@ -796,11 +811,15 @@ contract('Pool Validators', (accounts) => { oracleAccounts, withdrawalCredentials, }), - 'PoolValidators: invalid operator collateral' + 'PoolValidators: operator not committed' ); }); it('fails to initialize for invalid operator', async () => { + await validators.commitOperator({ + value: initAmount, + from: operator, + }); await expectRevert( initializeValidator({ operator: anyone, @@ -812,14 +831,14 @@ contract('Pool Validators', (accounts) => { oracleAccounts, withdrawalCredentials, }), - 'PoolValidators: invalid operator' + 'PoolValidators: operator not committed' ); }); it('fails to initialize for invalid deposit data', async () => { - await validators.depositCollateral(operator, { + await validators.commitOperator({ value: initAmount, - from: anyone, + from: operator, }); await expectRevert( initializeValidator({ @@ -837,9 +856,9 @@ contract('Pool Validators', (accounts) => { }); it('fails to initialize for already locked operator', async () => { - await validators.depositCollateral(operator, { + await validators.commitOperator({ value: initAmount, - from: anyone, + from: operator, }); await initializeValidator({ operator, @@ -868,9 +887,9 @@ contract('Pool Validators', (accounts) => { }); it('oracles can initialize validator', async () => { - await validators.depositCollateral(operator, { + await validators.commitOperator({ value: initAmount, - from: anyone, + from: operator, }); let poolBalance = await balance.current(pool.address); @@ -928,9 +947,9 @@ contract('Pool Validators', (accounts) => { } ); - await validators.depositCollateral(operator, { + await validators.commitOperator({ value: initAmount, - from: anyone, + from: operator, }); let { diff --git a/test/pool/stake.test.js b/test/pool/stake.test.js index ad88fea3..02b33aea 100644 --- a/test/pool/stake.test.js +++ b/test/pool/stake.test.js @@ -97,8 +97,9 @@ contract('Pool (stake)', (accounts) => { it('mints tokens for users with deposit less than min activating', async () => { // User 1 creates a deposit + let maxAmount = await pool.minActivatingDeposit(); let depositAmount1 = getDepositAmount({ - max: new BN(contractSettings.minActivatingDeposit), + max: maxAmount, }); totalSupply = totalSupply.add(depositAmount1); poolBalance = poolBalance.add(depositAmount1); @@ -115,8 +116,9 @@ contract('Pool (stake)', (accounts) => { }); // User 2 creates a deposit + maxAmount = await pool.minActivatingDeposit(); let depositAmount2 = getDepositAmount({ - max: new BN(contractSettings.minActivatingDeposit), + max: maxAmount, }); totalSupply = totalSupply.add(depositAmount2); poolBalance = poolBalance.add(depositAmount2); diff --git a/test/tokens/toggleRewards.test.js b/test/tokens/toggleRewards.test.js index 0b8c0433..2fabdeb7 100644 --- a/test/tokens/toggleRewards.test.js +++ b/test/tokens/toggleRewards.test.js @@ -120,6 +120,93 @@ contract('StakedEthToken (toggle rewards)', ([_, ...accounts]) => { ); }); + it('balance is not updated for disabled rewards account', async () => { + await stakedEthToken.toggleRewards(account, true, { + from: admin, + }); + let deposit = ether('5'); + + // mint sETH2 for disabled account + await pool.stake({ + from: account, + value: deposit, + }); + expect(await stakedEthToken.balanceOf(account)).to.be.bignumber.equal( + deposit + ); + expect(await rewardEthToken.balanceOf(account)).to.be.bignumber.equal( + new BN(0) + ); + + // distributor principal updated + expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( + distributorPrincipal.add(deposit) + ); + expect( + await rewardEthToken.balanceOf(constants.ZERO_ADDRESS) + ).to.be.bignumber.equal(distributorReward); + + // mint sETH2 for normal account + await pool.stake({ + from: anyone, + value: ether('5'), + }); + expect(await stakedEthToken.balanceOf(anyone)).to.be.bignumber.equal( + deposit + ); + expect(await rewardEthToken.balanceOf(anyone)).to.be.bignumber.equal( + new BN(0) + ); + + // new rewards arrive + let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); + await setTotalRewards({ + rewardEthToken, + oracles, + oracleAccounts, + pool, + totalRewards, + }); + + // arrived reward + let balance = await rewardEthToken.balanceOf(anyone); + expect(balance).to.be.bignumber.greaterThan(new BN(0)); + + // check disabled account balance + expect(await stakedEthToken.balanceOf(account)).to.be.bignumber.equal( + deposit + ); + expect(await rewardEthToken.balanceOf(account)).to.be.bignumber.equal( + new BN(0) + ); + + // check distributor balance + expect(await stakedEthToken.distributorPrincipal()).to.bignumber.equal( + distributorPrincipal.add(deposit) + ); + expect( + await rewardEthToken.balanceOf(constants.ZERO_ADDRESS) + ).to.be.bignumber.greaterThan(distributorReward); + + // check normal account balance + expect(await stakedEthToken.balanceOf(anyone)).to.be.bignumber.equal( + deposit + ); + + // check transfer for disabled account + await expectRevert( + rewardEthToken.transfer(anyone, balance, { + from: account, + }), + 'SafeMath: subtraction overflow' + ); + + // check transfer for normal account + await rewardEthToken.transfer(account, balance, { + from: anyone, + }); + }); + it('toggling rewards does not affect current rewards balance', async () => { // mint sETH2 for disabled account let deposit = ether('5'); diff --git a/test/utils.js b/test/utils.js index e9f0e089..197fdaf8 100644 --- a/test/utils.js +++ b/test/utils.js @@ -299,7 +299,7 @@ async function registerValidator({ } if ((await validators.collaterals(operator)).lt(initAmount)) { - await validators.depositCollateral(operator, { + await validators.commitOperator({ value: initAmount, from: operator, }); diff --git a/yarn.lock b/yarn.lock index 5653a1ea..fe96f699 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,13 +2,6 @@ # yarn lockfile v1 -"@babel/code-frame@7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" - integrity sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw== - dependencies: - "@babel/highlight" "^7.10.4" - "@babel/code-frame@^7.0.0": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" @@ -21,7 +14,7 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== -"@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": +"@babel/highlight@^7.12.13": version "7.13.10" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== @@ -30,10 +23,10 @@ chalk "^2.0.0" js-tokens "^4.0.0" -"@codechecks/client@^0.1.11": - version "0.1.11" - resolved "https://registry.yarnpkg.com/@codechecks/client/-/client-0.1.11.tgz#5ca0cb3b0d99fed1c397033c981efeedd8e2ea37" - integrity sha512-dSIzHnGNcXxDZtnVQEXWQHXH2v9KrpnK4mDGDxdwSu3l00rOIVwJcttj0wzx0bC0Q6gs65VsQdZH4gkanLdXOA== +"@codechecks/client@^0.1.12": + version "0.1.12" + resolved "https://registry.yarnpkg.com/@codechecks/client/-/client-0.1.12.tgz#519f11be8fcaa581c6ee8d5e8457e35bbbe5d9b1" + integrity sha512-2GHHvhO3kaOyxFXxOaiznlY8ARmz33/p+WQdhc2y6wzWw5eOl2wSwg1eZxx3LsWlAnB963Y4bd1YjZcGIhKRzA== dependencies: bluebird "^3.5.3" chalk "^2.4.2" @@ -56,14 +49,14 @@ ts-node "^8.0.2" url-join "^4.0.0" -"@eslint/eslintrc@^0.4.3": - version "0.4.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-0.4.3.tgz#9e42981ef035beb3dd49add17acb96e8ff6f394c" - integrity sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw== +"@eslint/eslintrc@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.3.tgz#41f08c597025605f672251dcc4e8be66b5ed7366" + integrity sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg== dependencies: ajv "^6.12.4" - debug "^4.1.1" - espree "^7.3.0" + debug "^4.3.2" + espree "^9.0.0" globals "^13.9.0" ignore "^4.0.6" import-fresh "^3.2.1" @@ -172,20 +165,20 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.4" -"@ethersproject/abi@5.4.1", "@ethersproject/abi@^5.4.0": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.4.1.tgz#6ac28fafc9ef6f5a7a37e30356a2eb31fa05d39b" - integrity sha512-9mhbjUk76BiSluiiW4BaYyI58KSbDMMQpCLdsAR+RsT2GyATiNYxVv+pGWRrekmsIdY3I+hOqsYQSTkc8L/mcg== - dependencies: - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/hash" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/strings" "^5.4.0" +"@ethersproject/abi@5.5.0", "@ethersproject/abi@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.5.0.tgz#fb52820e22e50b854ff15ce1647cc508d6660613" + integrity sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w== + dependencies: + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" "@ethersproject/abi@^5.0.0-beta.146": version "5.0.13" @@ -217,18 +210,18 @@ "@ethersproject/properties" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@ethersproject/abstract-provider@5.4.1": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.4.1.tgz#e404309a29f771bd4d28dbafadcaa184668c2a6e" - integrity sha512-3EedfKI3LVpjSKgAxoUaI+gB27frKsxzm+r21w9G60Ugk+3wVLQwhi1LsEJAKNV7WoZc8CIpNrATlL1QFABjtQ== +"@ethersproject/abstract-provider@5.5.1", "@ethersproject/abstract-provider@^5.5.0": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz#2f1f6e8a3ab7d378d8ad0b5718460f85649710c5" + integrity sha512-m+MA/ful6eKbxpr99xUYeRvLkfnlqzrF8SZ46d/xFB1A7ZVknYc/sXJG0RcufF52Qn2jeFj1hhcoQ7IXjNKUqg== dependencies: - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/networks" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/web" "^5.4.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/networks" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/web" "^5.5.0" "@ethersproject/abstract-provider@^5.0.8": version "5.0.10" @@ -256,16 +249,16 @@ "@ethersproject/transactions" "^5.4.0" "@ethersproject/web" "^5.4.0" -"@ethersproject/abstract-signer@5.4.1", "@ethersproject/abstract-signer@^5.4.0": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.4.1.tgz#e4e9abcf4dd4f1ba0db7dff9746a5f78f355ea81" - integrity sha512-SkkFL5HVq1k4/25dM+NWP9MILgohJCgGv5xT5AcRruGz4ILpfHeBtO/y6j+Z3UN/PAjDeb4P7E51Yh8wcGNLGA== +"@ethersproject/abstract-signer@5.5.0", "@ethersproject/abstract-signer@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz#590ff6693370c60ae376bf1c7ada59eb2a8dd08d" + integrity sha512-lj//7r250MXVLKI7sVarXAbZXbv9P50lgmJQGr2/is82EwEb8r7HrxsmMqAjTsztMYy7ohrIhGMIml+Gx4D3mA== dependencies: - "@ethersproject/abstract-provider" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" "@ethersproject/abstract-signer@^5.0.10": version "5.0.14" @@ -278,16 +271,27 @@ "@ethersproject/logger" "^5.0.8" "@ethersproject/properties" "^5.0.7" -"@ethersproject/address@5.4.0", "@ethersproject/address@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.4.0.tgz#ba2d00a0f8c4c0854933b963b9a3a9f6eb4a37a3" - integrity sha512-SD0VgOEkcACEG/C6xavlU1Hy3m5DGSXW3CUHkaaEHbAPPsgi0coP5oNPsxau8eTlZOk/bpa/hKeCNoK5IzVI2Q== +"@ethersproject/abstract-signer@^5.4.0": + version "5.4.1" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.4.1.tgz#e4e9abcf4dd4f1ba0db7dff9746a5f78f355ea81" + integrity sha512-SkkFL5HVq1k4/25dM+NWP9MILgohJCgGv5xT5AcRruGz4ILpfHeBtO/y6j+Z3UN/PAjDeb4P7E51Yh8wcGNLGA== dependencies: + "@ethersproject/abstract-provider" "^5.4.0" "@ethersproject/bignumber" "^5.4.0" "@ethersproject/bytes" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" "@ethersproject/logger" "^5.4.0" - "@ethersproject/rlp" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + +"@ethersproject/address@5.5.0", "@ethersproject/address@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.5.0.tgz#bcc6f576a553f21f3dd7ba17248f81b473c9c78f" + integrity sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw== + dependencies: + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" "@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.0.9": version "5.0.11" @@ -300,12 +304,23 @@ "@ethersproject/logger" "^5.0.8" "@ethersproject/rlp" "^5.0.7" -"@ethersproject/base64@5.4.0", "@ethersproject/base64@^5.4.0": +"@ethersproject/address@^5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.4.0.tgz#7252bf65295954c9048c7ca5f43e5c86441b2a9a" - integrity sha512-CjQw6E17QDSSC5jiM9YpF7N1aSCHmYGMt9bWD8PWv6YPMxjsys2/Q8xLrROKI3IWJ7sFfZ8B3flKDTM5wlWuZQ== + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.4.0.tgz#ba2d00a0f8c4c0854933b963b9a3a9f6eb4a37a3" + integrity sha512-SD0VgOEkcACEG/C6xavlU1Hy3m5DGSXW3CUHkaaEHbAPPsgi0coP5oNPsxau8eTlZOk/bpa/hKeCNoK5IzVI2Q== dependencies: + "@ethersproject/bignumber" "^5.4.0" "@ethersproject/bytes" "^5.4.0" + "@ethersproject/keccak256" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/rlp" "^5.4.0" + +"@ethersproject/base64@5.5.0", "@ethersproject/base64@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.5.0.tgz#881e8544e47ed976930836986e5eb8fab259c090" + integrity sha512-tdayUKhU1ljrlHzEWbStXazDpsx4eg1dBXUSI6+mHlYklOXoXF6lZvw8tnD6oVaWfnMxAgRSKROg3cVKtCcppA== + dependencies: + "@ethersproject/bytes" "^5.5.0" "@ethersproject/base64@^5.0.7": version "5.0.9" @@ -314,21 +329,28 @@ dependencies: "@ethersproject/bytes" "^5.0.9" -"@ethersproject/basex@5.4.0", "@ethersproject/basex@^5.4.0": +"@ethersproject/base64@^5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.4.0.tgz#0a2da0f4e76c504a94f2b21d3161ed9438c7f8a6" - integrity sha512-J07+QCVJ7np2bcpxydFVf/CuYo9mZ7T73Pe7KQY4c1lRlrixMeblauMxHXD0MPwFmUHZIILDNViVkykFBZylbg== + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.4.0.tgz#7252bf65295954c9048c7ca5f43e5c86441b2a9a" + integrity sha512-CjQw6E17QDSSC5jiM9YpF7N1aSCHmYGMt9bWD8PWv6YPMxjsys2/Q8xLrROKI3IWJ7sFfZ8B3flKDTM5wlWuZQ== dependencies: "@ethersproject/bytes" "^5.4.0" - "@ethersproject/properties" "^5.4.0" -"@ethersproject/bignumber@5.4.2": - version "5.4.2" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.4.2.tgz#44232e015ae4ce82ac034de549eb3583c71283d8" - integrity sha512-oIBDhsKy5bs7j36JlaTzFgNPaZjiNDOXsdSgSpXRucUl+UA6L/1YLlFeI3cPAoodcenzF4nxNPV13pcy7XbWjA== +"@ethersproject/basex@5.5.0", "@ethersproject/basex@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.5.0.tgz#e40a53ae6d6b09ab4d977bd037010d4bed21b4d3" + integrity sha512-ZIodwhHpVJ0Y3hUCfUucmxKsWQA5TMnavp5j/UOuDdzZWzJlRmuOjcTMIGgHCYuZmHt36BfiSyQPSRskPxbfaQ== dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + +"@ethersproject/bignumber@5.5.0", "@ethersproject/bignumber@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.5.0.tgz#875b143f04a216f4f8b96245bde942d42d279527" + integrity sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" bn.js "^4.11.9" "@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.13", "@ethersproject/bignumber@^5.0.7": @@ -349,12 +371,12 @@ "@ethersproject/logger" "^5.4.0" bn.js "^4.11.9" -"@ethersproject/bytes@5.4.0", "@ethersproject/bytes@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.4.0.tgz#56fa32ce3bf67153756dbaefda921d1d4774404e" - integrity sha512-H60ceqgTHbhzOj4uRc/83SCN9d+BSUnOkrr2intevqdtEMO1JFVZ1XL84OEZV+QjV36OaZYxtnt4lGmxcGsPfA== +"@ethersproject/bytes@5.5.0", "@ethersproject/bytes@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c" + integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog== dependencies: - "@ethersproject/logger" "^5.4.0" + "@ethersproject/logger" "^5.5.0" "@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.0.9": version "5.0.11" @@ -363,12 +385,19 @@ dependencies: "@ethersproject/logger" "^5.0.8" -"@ethersproject/constants@5.4.0", "@ethersproject/constants@^5.4.0": +"@ethersproject/bytes@^5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.4.0.tgz#ee0bdcb30bf1b532d2353c977bf2ef1ee117958a" - integrity sha512-tzjn6S7sj9+DIIeKTJLjK9WGN2Tj0P++Z8ONEIlZjyoTkBuODN+0VfhAyYksKi43l1Sx9tX2VlFfzjfmr5Wl3Q== + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.4.0.tgz#56fa32ce3bf67153756dbaefda921d1d4774404e" + integrity sha512-H60ceqgTHbhzOj4uRc/83SCN9d+BSUnOkrr2intevqdtEMO1JFVZ1XL84OEZV+QjV36OaZYxtnt4lGmxcGsPfA== dependencies: - "@ethersproject/bignumber" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + +"@ethersproject/constants@5.5.0", "@ethersproject/constants@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.5.0.tgz#d2a2cd7d94bd1d58377d1d66c4f53c9be4d0a45e" + integrity sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ== + dependencies: + "@ethersproject/bignumber" "^5.5.0" "@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.0.8": version "5.0.10" @@ -377,35 +406,42 @@ dependencies: "@ethersproject/bignumber" "^5.0.13" -"@ethersproject/contracts@5.4.1": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.4.1.tgz#3eb4f35b7fe60a962a75804ada2746494df3e470" - integrity sha512-m+z2ZgPy4pyR15Je//dUaymRUZq5MtDajF6GwFbGAVmKz/RF+DNIPwF0k5qEcL3wPGVqUjFg2/krlCRVTU4T5w== - dependencies: - "@ethersproject/abi" "^5.4.0" - "@ethersproject/abstract-provider" "^5.4.0" - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - -"@ethersproject/hash@5.4.0", "@ethersproject/hash@^5.4.0": +"@ethersproject/constants@^5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.4.0.tgz#d18a8e927e828e22860a011f39e429d388344ae0" - integrity sha512-xymAM9tmikKgbktOCjW60Z5sdouiIIurkZUr9oW5NOex5uwxrbsYG09kb5bMcNjlVeJD3yPivTNzViIs1GCbqA== + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.4.0.tgz#ee0bdcb30bf1b532d2353c977bf2ef1ee117958a" + integrity sha512-tzjn6S7sj9+DIIeKTJLjK9WGN2Tj0P++Z8ONEIlZjyoTkBuODN+0VfhAyYksKi43l1Sx9tX2VlFfzjfmr5Wl3Q== dependencies: - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/address" "^5.4.0" "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/strings" "^5.4.0" + +"@ethersproject/contracts@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.5.0.tgz#b735260d4bd61283a670a82d5275e2a38892c197" + integrity sha512-2viY7NzyvJkh+Ug17v7g3/IJC8HqZBDcOjYARZLdzRxrfGlRgmYgl6xPRKVbEzy1dWKw/iv7chDcS83pg6cLxg== + dependencies: + "@ethersproject/abi" "^5.5.0" + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + +"@ethersproject/hash@5.5.0", "@ethersproject/hash@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.5.0.tgz#7cee76d08f88d1873574c849e0207dcb32380cc9" + integrity sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" "@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.10", "@ethersproject/hash@^5.0.4": version "5.0.12" @@ -421,50 +457,64 @@ "@ethersproject/properties" "^5.0.7" "@ethersproject/strings" "^5.0.8" -"@ethersproject/hdnode@5.4.0", "@ethersproject/hdnode@^5.4.0": +"@ethersproject/hash@^5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.4.0.tgz#4bc9999b9a12eb5ce80c5faa83114a57e4107cac" - integrity sha512-pKxdS0KAaeVGfZPp1KOiDLB0jba11tG6OP1u11QnYfb7pXn6IZx0xceqWRr6ygke8+Kw74IpOoSi7/DwANhy8Q== - dependencies: - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/basex" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/pbkdf2" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/sha2" "^5.4.0" - "@ethersproject/signing-key" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/wordlists" "^5.4.0" - -"@ethersproject/json-wallets@5.4.0", "@ethersproject/json-wallets@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.4.0.tgz#2583341cfe313fc9856642e8ace3080154145e95" - integrity sha512-igWcu3fx4aiczrzEHwG1xJZo9l1cFfQOWzTqwRw/xcvxTk58q4f9M7cjh51EKphMHvrJtcezJ1gf1q1AUOfEQQ== + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.4.0.tgz#d18a8e927e828e22860a011f39e429d388344ae0" + integrity sha512-xymAM9tmikKgbktOCjW60Z5sdouiIIurkZUr9oW5NOex5uwxrbsYG09kb5bMcNjlVeJD3yPivTNzViIs1GCbqA== dependencies: "@ethersproject/abstract-signer" "^5.4.0" "@ethersproject/address" "^5.4.0" + "@ethersproject/bignumber" "^5.4.0" "@ethersproject/bytes" "^5.4.0" - "@ethersproject/hdnode" "^5.4.0" "@ethersproject/keccak256" "^5.4.0" "@ethersproject/logger" "^5.4.0" - "@ethersproject/pbkdf2" "^5.4.0" "@ethersproject/properties" "^5.4.0" - "@ethersproject/random" "^5.4.0" "@ethersproject/strings" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" + +"@ethersproject/hdnode@5.5.0", "@ethersproject/hdnode@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.5.0.tgz#4a04e28f41c546f7c978528ea1575206a200ddf6" + integrity sha512-mcSOo9zeUg1L0CoJH7zmxwUG5ggQHU1UrRf8jyTYy6HxdZV+r0PBoL1bxr+JHIPXRzS6u/UW4mEn43y0tmyF8Q== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/basex" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/pbkdf2" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/wordlists" "^5.5.0" + +"@ethersproject/json-wallets@5.5.0", "@ethersproject/json-wallets@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.5.0.tgz#dd522d4297e15bccc8e1427d247ec8376b60e325" + integrity sha512-9lA21XQnCdcS72xlBn1jfQdj2A1VUxZzOzi9UkNdnokNKke/9Ya2xA9aIK1SC3PQyBDLt4C+dfps7ULpkvKikQ== + dependencies: + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hdnode" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/pbkdf2" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.4.0", "@ethersproject/keccak256@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.4.0.tgz#7143b8eea4976080241d2bd92e3b1f1bf7025318" - integrity sha512-FBI1plWet+dPUvAzPAeHzRKiPpETQzqSUWR1wXJGHVWi4i8bOSrpC3NwpkPjgeXG7MnugVc1B42VbfnQikyC/A== +"@ethersproject/keccak256@5.5.0", "@ethersproject/keccak256@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.5.0.tgz#e4b1f9d7701da87c564ffe336f86dcee82983492" + integrity sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg== dependencies: - "@ethersproject/bytes" "^5.4.0" - js-sha3 "0.5.7" + "@ethersproject/bytes" "^5.5.0" + js-sha3 "0.8.0" "@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.0.7": version "5.0.9" @@ -474,10 +524,18 @@ "@ethersproject/bytes" "^5.0.9" js-sha3 "0.5.7" -"@ethersproject/logger@5.4.1": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.4.1.tgz#503bd33683538b923c578c07d1c2c0dd18672054" - integrity sha512-DZ+bRinnYLPw1yAC64oRl0QyVZj43QeHIhVKfD/+YwSz4wsv1pfwb5SOFjz+r710YEWzU6LrhuSjpSO+6PeE4A== +"@ethersproject/keccak256@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.4.0.tgz#7143b8eea4976080241d2bd92e3b1f1bf7025318" + integrity sha512-FBI1plWet+dPUvAzPAeHzRKiPpETQzqSUWR1wXJGHVWi4i8bOSrpC3NwpkPjgeXG7MnugVc1B42VbfnQikyC/A== + dependencies: + "@ethersproject/bytes" "^5.4.0" + js-sha3 "0.5.7" + +"@ethersproject/logger@5.5.0", "@ethersproject/logger@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d" + integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg== "@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.0.8": version "5.0.10" @@ -489,12 +547,12 @@ resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.4.0.tgz#f39adadf62ad610c420bcd156fd41270e91b3ca9" integrity sha512-xYdWGGQ9P2cxBayt64d8LC8aPFJk6yWCawQi/4eJ4+oJdMMjEBMrIcIMZ9AxhwpPVmnBPrsB10PcXGmGAqgUEQ== -"@ethersproject/networks@5.4.2": - version "5.4.2" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.4.2.tgz#2247d977626e97e2c3b8ee73cd2457babde0ce35" - integrity sha512-eekOhvJyBnuibfJnhtK46b8HimBc5+4gqpvd1/H9LEl7Q7/qhsIhM81dI9Fcnjpk3jB1aTy6bj0hz3cifhNeYw== +"@ethersproject/networks@5.5.0", "@ethersproject/networks@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.5.0.tgz#babec47cab892c51f8dd652ce7f2e3e14283981a" + integrity sha512-KWfP3xOnJeF89Uf/FCJdV1a2aDJe5XTN2N52p4fcQ34QhDqQFkgQKZ39VGtiqUgHcLI8DfT0l9azC3KFTunqtA== dependencies: - "@ethersproject/logger" "^5.4.0" + "@ethersproject/logger" "^5.5.0" "@ethersproject/networks@^5.0.7": version "5.0.9" @@ -510,20 +568,20 @@ dependencies: "@ethersproject/logger" "^5.4.0" -"@ethersproject/pbkdf2@5.4.0", "@ethersproject/pbkdf2@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.4.0.tgz#ed88782a67fda1594c22d60d0ca911a9d669641c" - integrity sha512-x94aIv6tiA04g6BnazZSLoRXqyusawRyZWlUhKip2jvoLpzJuLb//KtMM6PEovE47pMbW+Qe1uw+68ameJjB7g== +"@ethersproject/pbkdf2@5.5.0", "@ethersproject/pbkdf2@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz#e25032cdf02f31505d47afbf9c3e000d95c4a050" + integrity sha512-SaDvQFvXPnz1QGpzr6/HToLifftSXGoXrbpZ6BvoZhmx4bNLHrxDe8MZisuecyOziP1aVEwzC2Hasj+86TgWVg== dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/sha2" "^5.4.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" -"@ethersproject/properties@5.4.1": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.4.1.tgz#9f051f976ce790142c6261ccb7b826eaae1f2f36" - integrity sha512-cyCGlF8wWlIZyizsj2PpbJ9I7rIlUAfnHYwy/T90pdkSn/NFTa5YWZx2wTJBe9V7dD65dcrrEMisCRUJiq6n3w== +"@ethersproject/properties@5.5.0", "@ethersproject/properties@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.5.0.tgz#61f00f2bb83376d2071baab02245f92070c59995" + integrity sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA== dependencies: - "@ethersproject/logger" "^5.4.0" + "@ethersproject/logger" "^5.5.0" "@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.0.7": version "5.0.9" @@ -539,46 +597,46 @@ dependencies: "@ethersproject/logger" "^5.4.0" -"@ethersproject/providers@5.4.5": - version "5.4.5" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.4.5.tgz#eb2ea2a743a8115f79604a8157233a3a2c832928" - integrity sha512-1GkrvkiAw3Fj28cwi1Sqm8ED1RtERtpdXmRfwIBGmqBSN5MoeRUHuwHPppMtbPayPgpFcvD7/Gdc9doO5fGYgw== - dependencies: - "@ethersproject/abstract-provider" "^5.4.0" - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/address" "^5.4.0" - "@ethersproject/basex" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/hash" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/networks" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/random" "^5.4.0" - "@ethersproject/rlp" "^5.4.0" - "@ethersproject/sha2" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/web" "^5.4.0" +"@ethersproject/providers@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.5.0.tgz#bc2876a8fe5e0053ed9828b1f3767ae46e43758b" + integrity sha512-xqMbDnS/FPy+J/9mBLKddzyLLAQFjrVff5g00efqxPzcAwXiR+SiCGVy6eJ5iAIirBOATjx7QLhDNPGV+AEQsw== + dependencies: + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/basex" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/networks" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/web" "^5.5.0" bech32 "1.1.4" ws "7.4.6" -"@ethersproject/random@5.4.0", "@ethersproject/random@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.4.0.tgz#9cdde60e160d024be39cc16f8de3b9ce39191e16" - integrity sha512-pnpWNQlf0VAZDEOVp1rsYQosmv2o0ITS/PecNw+mS2/btF8eYdspkN0vIXrCMtkX09EAh9bdk8GoXmFXM1eAKw== +"@ethersproject/random@5.5.0", "@ethersproject/random@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.5.0.tgz#305ed9e033ca537735365ac12eed88580b0f81f9" + integrity sha512-egGYZwZ/YIFKMHcoBUo8t3a8Hb/TKYX8BCBoLjudVCZh892welR3jOxgOmb48xznc9bTcMm7Tpwc1gHC1PFNFQ== dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" -"@ethersproject/rlp@5.4.0", "@ethersproject/rlp@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.4.0.tgz#de61afda5ff979454e76d3b3310a6c32ad060931" - integrity sha512-0I7MZKfi+T5+G8atId9QaQKHRvvasM/kqLyAH4XxBCBchAooH2EX5rL9kYZWwcm3awYV+XC7VF6nLhfeQFKVPg== +"@ethersproject/rlp@5.5.0", "@ethersproject/rlp@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.5.0.tgz#530f4f608f9ca9d4f89c24ab95db58ab56ab99a0" + integrity sha512-hLv8XaQ8PTI9g2RHoQGf/WSxBfTB/NudRacbzdxmst5VHAqd1sMibWG7SENzT5Dj3yZ3kJYx+WiRYEcQTAkcYA== dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" "@ethersproject/rlp@^5.0.7": version "5.0.9" @@ -588,23 +646,31 @@ "@ethersproject/bytes" "^5.0.9" "@ethersproject/logger" "^5.0.8" -"@ethersproject/sha2@5.4.0", "@ethersproject/sha2@^5.4.0": +"@ethersproject/rlp@^5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.4.0.tgz#c9a8db1037014cbc4e9482bd662f86c090440371" - integrity sha512-siheo36r1WD7Cy+bDdE1BJ8y0bDtqXCOxRMzPa4bV1TGt/eTUUt03BHoJNB6reWJD8A30E/pdJ8WFkq+/uz4Gg== + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.4.0.tgz#de61afda5ff979454e76d3b3310a6c32ad060931" + integrity sha512-0I7MZKfi+T5+G8atId9QaQKHRvvasM/kqLyAH4XxBCBchAooH2EX5rL9kYZWwcm3awYV+XC7VF6nLhfeQFKVPg== dependencies: "@ethersproject/bytes" "^5.4.0" "@ethersproject/logger" "^5.4.0" + +"@ethersproject/sha2@5.5.0", "@ethersproject/sha2@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.5.0.tgz#a40a054c61f98fd9eee99af2c3cc6ff57ec24db7" + integrity sha512-B5UBoglbCiHamRVPLA110J+2uqsifpZaTmid2/7W5rbtYVz6gus6/hSDieIU/6gaKIDcOj12WnOdiymEUHIAOA== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" hash.js "1.1.7" -"@ethersproject/signing-key@5.4.0", "@ethersproject/signing-key@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.4.0.tgz#2f05120984e81cf89a3d5f6dec5c68ee0894fbec" - integrity sha512-q8POUeywx6AKg2/jX9qBYZIAmKSB4ubGXdQ88l40hmATj29JnG5pp331nAWwwxPn2Qao4JpWHNZsQN+bPiSW9A== +"@ethersproject/signing-key@5.5.0", "@ethersproject/signing-key@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.5.0.tgz#2aa37169ce7e01e3e80f2c14325f624c29cedbe0" + integrity sha512-5VmseH7qjtNmDdZBswavhotYbWB0bOwKIlOTSlX14rKn5c11QmJwGt4GHeo7NrL/Ycl7uo9AHvEqs5xZgFBTng== dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" bn.js "^4.11.9" elliptic "6.5.4" hash.js "1.1.7" @@ -619,25 +685,38 @@ "@ethersproject/properties" "^5.0.7" elliptic "6.5.4" -"@ethersproject/solidity@5.4.0": +"@ethersproject/signing-key@^5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.4.0.tgz#1305e058ea02dc4891df18b33232b11a14ece9ec" - integrity sha512-XFQTZ7wFSHOhHcV1DpcWj7VXECEiSrBuv7JErJvB9Uo+KfCdc3QtUZV+Vjh/AAaYgezUEKbCtE6Khjm44seevQ== + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.4.0.tgz#2f05120984e81cf89a3d5f6dec5c68ee0894fbec" + integrity sha512-q8POUeywx6AKg2/jX9qBYZIAmKSB4ubGXdQ88l40hmATj29JnG5pp331nAWwwxPn2Qao4JpWHNZsQN+bPiSW9A== dependencies: - "@ethersproject/bignumber" "^5.4.0" "@ethersproject/bytes" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/sha2" "^5.4.0" - "@ethersproject/strings" "^5.4.0" + "@ethersproject/logger" "^5.4.0" + "@ethersproject/properties" "^5.4.0" + bn.js "^4.11.9" + elliptic "6.5.4" + hash.js "1.1.7" -"@ethersproject/strings@5.4.0", "@ethersproject/strings@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.4.0.tgz#fb12270132dd84b02906a8d895ae7e7fa3d07d9a" - integrity sha512-k/9DkH5UGDhv7aReXLluFG5ExurwtIpUfnDNhQA29w896Dw3i4uDTz01Quaptbks1Uj9kI8wo9tmW73wcIEaWA== +"@ethersproject/solidity@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.5.0.tgz#2662eb3e5da471b85a20531e420054278362f93f" + integrity sha512-9NgZs9LhGMj6aCtHXhtmFQ4AN4sth5HuFXVvAQtzmm0jpSCNOTGtrHZJAeYTh7MBjRR8brylWZxBZR9zDStXbw== dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/logger" "^5.4.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/sha2" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@ethersproject/strings@5.5.0", "@ethersproject/strings@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.5.0.tgz#e6784d00ec6c57710755699003bc747e98c5d549" + integrity sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" "@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.0.8": version "5.0.10" @@ -648,20 +727,29 @@ "@ethersproject/constants" "^5.0.8" "@ethersproject/logger" "^5.0.8" -"@ethersproject/transactions@5.4.0", "@ethersproject/transactions@^5.4.0": +"@ethersproject/strings@^5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.4.0.tgz#a159d035179334bd92f340ce0f77e83e9e1522e0" - integrity sha512-s3EjZZt7xa4BkLknJZ98QGoIza94rVjaEed0rzZ/jB9WrIuu/1+tjvYCWzVrystXtDswy7TPBeIepyXwSYa4WQ== + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.4.0.tgz#fb12270132dd84b02906a8d895ae7e7fa3d07d9a" + integrity sha512-k/9DkH5UGDhv7aReXLluFG5ExurwtIpUfnDNhQA29w896Dw3i4uDTz01Quaptbks1Uj9kI8wo9tmW73wcIEaWA== dependencies: - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" "@ethersproject/bytes" "^5.4.0" "@ethersproject/constants" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/rlp" "^5.4.0" - "@ethersproject/signing-key" "^5.4.0" + +"@ethersproject/transactions@5.5.0", "@ethersproject/transactions@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.5.0.tgz#7e9bf72e97bcdf69db34fe0d59e2f4203c7a2908" + integrity sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA== + dependencies: + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/rlp" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.0.9": version "5.0.11" @@ -678,46 +766,61 @@ "@ethersproject/rlp" "^5.0.7" "@ethersproject/signing-key" "^5.0.8" -"@ethersproject/units@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.4.0.tgz#d57477a4498b14b88b10396062c8cbbaf20c79fe" - integrity sha512-Z88krX40KCp+JqPCP5oPv5p750g+uU6gopDYRTBGcDvOASh6qhiEYCRatuM/suC4S2XW9Zz90QI35MfSrTIaFg== - dependencies: - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - -"@ethersproject/wallet@5.4.0": +"@ethersproject/transactions@^5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.4.0.tgz#fa5b59830b42e9be56eadd45a16a2e0933ad9353" - integrity sha512-wU29majLjM6AjCjpat21mPPviG+EpK7wY1+jzKD0fg3ui5fgedf2zEu1RDgpfIMsfn8fJHJuzM4zXZ2+hSHaSQ== + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.4.0.tgz#a159d035179334bd92f340ce0f77e83e9e1522e0" + integrity sha512-s3EjZZt7xa4BkLknJZ98QGoIza94rVjaEed0rzZ/jB9WrIuu/1+tjvYCWzVrystXtDswy7TPBeIepyXwSYa4WQ== dependencies: - "@ethersproject/abstract-provider" "^5.4.0" - "@ethersproject/abstract-signer" "^5.4.0" "@ethersproject/address" "^5.4.0" "@ethersproject/bignumber" "^5.4.0" "@ethersproject/bytes" "^5.4.0" - "@ethersproject/hash" "^5.4.0" - "@ethersproject/hdnode" "^5.4.0" - "@ethersproject/json-wallets" "^5.4.0" + "@ethersproject/constants" "^5.4.0" "@ethersproject/keccak256" "^5.4.0" "@ethersproject/logger" "^5.4.0" "@ethersproject/properties" "^5.4.0" - "@ethersproject/random" "^5.4.0" + "@ethersproject/rlp" "^5.4.0" "@ethersproject/signing-key" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/wordlists" "^5.4.0" -"@ethersproject/web@5.4.0", "@ethersproject/web@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.4.0.tgz#49fac173b96992334ed36a175538ba07a7413d1f" - integrity sha512-1bUusGmcoRLYgMn6c1BLk1tOKUIFuTg8j+6N8lYlbMpDesnle+i3pGSagGNvwjaiLo4Y5gBibwctpPRmjrh4Og== +"@ethersproject/units@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.5.0.tgz#104d02db5b5dc42cc672cc4587bafb87a95ee45e" + integrity sha512-7+DpjiZk4v6wrikj+TCyWWa9dXLNU73tSTa7n0TSJDxkYbV3Yf1eRh9ToMLlZtuctNYu9RDNNy2USq3AdqSbag== dependencies: - "@ethersproject/base64" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/strings" "^5.4.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/constants" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + +"@ethersproject/wallet@5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.5.0.tgz#322a10527a440ece593980dca6182f17d54eae75" + integrity sha512-Mlu13hIctSYaZmUOo7r2PhNSd8eaMPVXe1wxrz4w4FCE4tDYBywDH+bAR1Xz2ADyXGwqYMwstzTrtUVIsKDO0Q== + dependencies: + "@ethersproject/abstract-provider" "^5.5.0" + "@ethersproject/abstract-signer" "^5.5.0" + "@ethersproject/address" "^5.5.0" + "@ethersproject/bignumber" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/hdnode" "^5.5.0" + "@ethersproject/json-wallets" "^5.5.0" + "@ethersproject/keccak256" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/random" "^5.5.0" + "@ethersproject/signing-key" "^5.5.0" + "@ethersproject/transactions" "^5.5.0" + "@ethersproject/wordlists" "^5.5.0" + +"@ethersproject/web@5.5.0", "@ethersproject/web@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.5.0.tgz#0e5bb21a2b58fb4960a705bfc6522a6acf461e28" + integrity sha512-BEgY0eL5oH4mAo37TNYVrFeHsIXLRxggCRG/ksRIxI2X5uj5IsjGmcNiRN/VirQOlBxcUhCgHhaDLG4m6XAVoA== + dependencies: + "@ethersproject/base64" "^5.5.0" + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" "@ethersproject/web@^5.0.12": version "5.0.14" @@ -730,21 +833,32 @@ "@ethersproject/properties" "^5.0.7" "@ethersproject/strings" "^5.0.8" -"@ethersproject/wordlists@5.4.0", "@ethersproject/wordlists@^5.4.0": +"@ethersproject/web@^5.4.0": version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.4.0.tgz#f34205ec3bbc9e2c49cadaee774cf0b07e7573d7" - integrity sha512-FemEkf6a+EBKEPxlzeVgUaVSodU7G0Na89jqKjmWMlDB0tomoU8RlEMgUvXyqtrg8N4cwpLh8nyRnm1Nay1isA== + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.4.0.tgz#49fac173b96992334ed36a175538ba07a7413d1f" + integrity sha512-1bUusGmcoRLYgMn6c1BLk1tOKUIFuTg8j+6N8lYlbMpDesnle+i3pGSagGNvwjaiLo4Y5gBibwctpPRmjrh4Og== dependencies: + "@ethersproject/base64" "^5.4.0" "@ethersproject/bytes" "^5.4.0" - "@ethersproject/hash" "^5.4.0" "@ethersproject/logger" "^5.4.0" "@ethersproject/properties" "^5.4.0" "@ethersproject/strings" "^5.4.0" -"@humanwhocodes/config-array@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.5.0.tgz#1407967d4c6eecd7388f83acf1eaf4d0c6e58ef9" - integrity sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg== +"@ethersproject/wordlists@5.5.0", "@ethersproject/wordlists@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.5.0.tgz#aac74963aa43e643638e5172353d931b347d584f" + integrity sha512-bL0UTReWDiaQJJYOC9sh/XcRu/9i2jMrzf8VLRmPKx58ckSlOJiohODkECCO50dtLZHcGU6MLXQ4OOrgBwP77Q== + dependencies: + "@ethersproject/bytes" "^5.5.0" + "@ethersproject/hash" "^5.5.0" + "@ethersproject/logger" "^5.5.0" + "@ethersproject/properties" "^5.5.0" + "@ethersproject/strings" "^5.5.0" + +"@humanwhocodes/config-array@^0.6.0": + version "0.6.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.6.0.tgz#b5621fdb3b32309d2d16575456cbc277fa8f021a" + integrity sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A== dependencies: "@humanwhocodes/object-schema" "^1.2.0" debug "^4.1.1" @@ -781,10 +895,10 @@ resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz#c472abcba0c5185aaa4ad4070146e95213c68511" integrity sha512-6quxWe8wwS4X5v3Au8q1jOvXYEPkS1Fh+cME5u6AwNdnI4uERvPlVjlgRWzpnb+Rrt1l/cEqiNRH9GlsBMSDQg== -"@nomiclabs/hardhat-etherscan@^2.1.6": - version "2.1.6" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.6.tgz#8d1502f42adc6f7b8ef16fb917c0b5a8780cb83a" - integrity sha512-gCvT5fj8GbXS9+ACS3BzrX0pzYHHZqAHCb+NcipOkl2cy48FakUXlzrCf4P4sTH+Y7W10OgT62ezD1sJ+/NikQ== +"@nomiclabs/hardhat-etherscan@^2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.7.tgz#f76ce0da1b503d3e506bffbd044967b1a9443675" + integrity sha512-9nt9EXubnkd2aTMnQIqKtp80bQFhun88krfB31FN2wB0T54b8YuK0riG2d+EKq/D3t1Kb00oA7oFSFpHLIbLDQ== dependencies: "@ethersproject/abi" "^5.1.2" "@ethersproject/address" "^5.0.2" @@ -845,17 +959,17 @@ resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-3.4.1.tgz#03c891fec7f93be0ae44ed74e57a122a38732ce7" integrity sha512-cUriqMauq1ylzP2TxePNdPqkwI7Le3Annh4K9rrpvKfSBB/bdW+Iu1ihBaTIABTAAJ85LmKL5SSPPL9ry8d1gQ== -"@openzeppelin/hardhat-upgrades@^1.10.0": - version "1.10.0" - resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.10.0.tgz#e7751e3b9a005ccc9cef4e0de190628b181b59b6" - integrity sha512-iGe058iV7Ba/g11RxlbqBG47nbqbZn1FRdg1FCQq7xPmvjRhXmFsoI/5gGw5el0aZlLDRtpFOBZbzMZvI/S7iw== +"@openzeppelin/hardhat-upgrades@^1.12.0": + version "1.12.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/hardhat-upgrades/-/hardhat-upgrades-1.12.0.tgz#35b4dd9bdefb203e7e0ba4b1c38df133bf721ddf" + integrity sha512-C5eOSt01zHKYUaRRDunqCsP5fXLpqFatIEs+NywVKLfVV6LNatugaNiRC4oHT8FF8wnr38uSoWrJJVTRoXUECw== dependencies: - "@openzeppelin/upgrades-core" "^1.9.0" + "@openzeppelin/upgrades-core" "^1.10.0" -"@openzeppelin/test-helpers@^0.5.13": - version "0.5.13" - resolved "https://registry.yarnpkg.com/@openzeppelin/test-helpers/-/test-helpers-0.5.13.tgz#d208bdbf0f7ad3cbe579d0b8434074c5f60d8e73" - integrity sha512-H9LUHM0nqZVObWyzJrXJ9FLDgtcBZZK0L+LhA0wdcvK3M4Um2LpLX4KbP/mUYcgvHK03pK7Ub4T6RYp3Vjy/mg== +"@openzeppelin/test-helpers@^0.5.15": + version "0.5.15" + resolved "https://registry.yarnpkg.com/@openzeppelin/test-helpers/-/test-helpers-0.5.15.tgz#7727d4bb1535e1fa2372d65d1dcee335ce8d36af" + integrity sha512-10fS0kyOjc/UObo9iEWPNbC6MCeiQ7z97LDOJBj68g+AAs5pIGEI2h3V6G9TYTIq8VxOdwMQbfjKrx7Y3YZJtA== dependencies: "@openzeppelin/contract-loader" "^0.6.2" "@truffle/contract" "^4.0.35" @@ -868,10 +982,10 @@ web3 "^1.2.5" web3-utils "^1.2.5" -"@openzeppelin/upgrades-core@^1.9.0": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.9.2.tgz#9d7497f58b1f2bb704c162c716302bfff7923749" - integrity sha512-LU2NMvnz+6jXheh3Rnfql4UgtS7ViHWwcivS3JRI9DMCazmlyibwMYz5QMakrNNGAF7bY0t0Sw1UCfe5qTYxjA== +"@openzeppelin/upgrades-core@^1.10.0": + version "1.10.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/upgrades-core/-/upgrades-core-1.10.0.tgz#d3aa72b7a23827e0e6daff08ddfb8dcd75171abb" + integrity sha512-N20t1i1wlHrVmu3etVZLiaRxT6XLkCrO9gIo4mUZNpsaVftl8V+WBu8o940AjoYXvzTEqj7O0re2DSFzjpkRBw== dependencies: bn.js "^5.1.2" cbor "^8.0.0" @@ -955,11 +1069,6 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== -"@solidity-parser/parser@^0.11.0": - version "0.11.1" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.11.1.tgz#fa840af64840c930f24a9c82c08d4a092a068add" - integrity sha512-H8BSBoKE8EubJa0ONqecA2TviT3TnHeC4NpgnAHSUiuhZoQBfPB4L2P9bs8R6AoTW10Endvh3vc+fomVMIDIYQ== - "@solidity-parser/parser@^0.12.0": version "0.12.0" resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.12.0.tgz#18a0fb2a9d2484b23176f63b16093c64794fc323" @@ -972,6 +1081,13 @@ dependencies: antlr4ts "^0.5.0-alpha.4" +"@solidity-parser/parser@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.0.tgz#d51f074efb0acce0e953ec48133561ed710cebc0" + integrity sha512-cX0JJRcmPtNUJpzD2K7FdA7qQsTOk1UZnFx2k7qAg9ZRvuaH5NBe5IEdBMXGlmf2+FmjhqbygJ26H8l2SV7aKQ== + dependencies: + antlr4ts "^0.5.0-alpha.4" + "@szmarczak/http-timer@^1.1.2": version "1.1.2" resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" @@ -1305,10 +1421,10 @@ acorn@^6.0.7: resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^7.4.0: - version "7.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" - integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" + integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== address@^1.0.1: version "1.1.2" @@ -1350,16 +1466,6 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.6.1, ajv@^6.9.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" -ajv@^8.0.1: - version "8.6.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.6.2.tgz#2fb45e0e5fcbc0813326c1c3da535d1881bb0571" - integrity sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w== - dependencies: - fast-deep-equal "^3.1.1" - json-schema-traverse "^1.0.0" - require-from-string "^2.0.2" - uri-js "^4.2.2" - amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" @@ -1467,6 +1573,11 @@ argparse@^1.0.7: dependencies: sprintf-js "~1.0.2" +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + array-filter@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" @@ -1961,14 +2072,6 @@ chalk@^4.0.0, chalk@^4.1.0: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.1.tgz#c80b3fab28bf6371e6863325eee67e618b77e6ad" - integrity sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -2126,7 +2229,7 @@ cli-table@^0.3.1: dependencies: colors "1.0.3" -cli-truncate@^2.1.0: +cli-truncate@2.1.0, cli-truncate@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== @@ -2155,6 +2258,11 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" +clone@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" + integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= + color-convert@^1.9.0: version "1.9.3" resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" @@ -2179,10 +2287,15 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" - integrity sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w== +colorette@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" + integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== + +colorette@^2.0.16: + version "2.0.16" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" + integrity sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g== colors@1.0.3: version "1.0.3" @@ -2221,10 +2334,10 @@ commander@^2.15.0, commander@^2.19.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== +commander@^8.2.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== compare-versions@^3.6.0: version "3.6.0" @@ -2315,10 +2428,10 @@ cosmiconfig@^5.0.7: js-yaml "^3.13.1" parse-json "^4.0.0" -cosmiconfig@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.0.tgz#ef9b44d773959cae63ddecd122de23853b60f8d3" - integrity sha512-pondGvTuVYDk++upghXJabWzL6Kxu6f26ljFw64Swq9v6sQPUL3EUlVDV56diOjpCayKihL6hVe8exIACU4XcA== +cosmiconfig@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" + integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== dependencies: "@types/parse-json" "^4.0.0" import-fresh "^3.2.1" @@ -2469,6 +2582,13 @@ debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: dependencies: ms "2.1.2" +debug@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" + integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== + dependencies: + ms "2.1.2" + decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" @@ -2852,13 +2972,13 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" - integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== +eslint-scope@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-6.0.0.tgz#9cf45b13c5ac8f3d4c50f46a5121f61b3e318978" + integrity sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA== dependencies: esrecurse "^4.3.0" - estraverse "^4.1.1" + estraverse "^5.2.0" eslint-utils@^1.3.1: version "1.4.3" @@ -2867,14 +2987,14 @@ eslint-utils@^1.3.1: dependencies: eslint-visitor-keys "^1.1.0" -eslint-utils@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" - integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== +eslint-utils@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-3.0.0.tgz#8aebaface7345bb33559db0a1f13a1d2d48c3672" + integrity sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA== dependencies: - eslint-visitor-keys "^1.1.0" + eslint-visitor-keys "^2.0.0" -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0, eslint-visitor-keys@^1.3.0: +eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: version "1.3.0" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== @@ -2884,6 +3004,11 @@ eslint-visitor-keys@^2.0.0: resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== +eslint-visitor-keys@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz#e32e99c6cdc2eb063f204eda5db67bfe58bb4186" + integrity sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q== + eslint@^5.6.0: version "5.16.0" resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" @@ -2926,37 +3051,36 @@ eslint@^5.6.0: table "^5.2.3" text-table "^0.2.0" -eslint@^7.32.0: - version "7.32.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-7.32.0.tgz#c6d328a14be3fb08c8d1d21e12c02fdb7a2a812d" - integrity sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA== +eslint@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.1.0.tgz#00f1f7dbf4134f26588e6c9f2efe970760f64664" + integrity sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw== dependencies: - "@babel/code-frame" "7.12.11" - "@eslint/eslintrc" "^0.4.3" - "@humanwhocodes/config-array" "^0.5.0" + "@eslint/eslintrc" "^1.0.3" + "@humanwhocodes/config-array" "^0.6.0" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" - debug "^4.0.1" + debug "^4.3.2" doctrine "^3.0.0" enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^5.1.1" - eslint-utils "^2.1.0" - eslint-visitor-keys "^2.0.0" - espree "^7.3.1" + eslint-scope "^6.0.0" + eslint-utils "^3.0.0" + eslint-visitor-keys "^3.0.0" + espree "^9.0.0" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" file-entry-cache "^6.0.1" functional-red-black-tree "^1.0.1" - glob-parent "^5.1.2" + glob-parent "^6.0.1" globals "^13.6.0" ignore "^4.0.6" import-fresh "^3.0.0" imurmurhash "^0.1.4" is-glob "^4.0.0" - js-yaml "^3.13.1" + js-yaml "^4.1.0" json-stable-stringify-without-jsonify "^1.0.1" levn "^0.4.1" lodash.merge "^4.6.2" @@ -2964,11 +3088,10 @@ eslint@^7.32.0: natural-compare "^1.4.0" optionator "^0.9.1" progress "^2.0.0" - regexpp "^3.1.0" + regexpp "^3.2.0" semver "^7.2.1" strip-ansi "^6.0.0" strip-json-comments "^3.1.0" - table "^6.0.9" text-table "^0.2.0" v8-compile-cache "^2.0.3" @@ -2981,14 +3104,14 @@ espree@^5.0.1: acorn-jsx "^5.0.0" eslint-visitor-keys "^1.0.0" -espree@^7.3.0, espree@^7.3.1: - version "7.3.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-7.3.1.tgz#f2df330b752c6f55019f8bd89b7660039c1bbbb6" - integrity sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g== +espree@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.0.0.tgz#e90a2965698228502e771c7a58489b1a9d107090" + integrity sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ== dependencies: - acorn "^7.4.0" + acorn "^8.5.0" acorn-jsx "^5.3.1" - eslint-visitor-keys "^1.3.0" + eslint-visitor-keys "^3.0.0" esprima@2.7.x, esprima@^2.7.1: version "2.7.3" @@ -3257,41 +3380,41 @@ ethers@^4.0.0-beta.1, ethers@^4.0.32, ethers@^4.0.40: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.4.7: - version "5.4.7" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.4.7.tgz#0fd491a5da7c9793de2d6058d76b41b1e7efba8f" - integrity sha512-iZc5p2nqfWK1sj8RabwsPM28cr37Bpq7ehTQ5rWExBr2Y09Sn1lDKZOED26n+TsZMye7Y6mIgQ/1cwpSD8XZew== - dependencies: - "@ethersproject/abi" "5.4.1" - "@ethersproject/abstract-provider" "5.4.1" - "@ethersproject/abstract-signer" "5.4.1" - "@ethersproject/address" "5.4.0" - "@ethersproject/base64" "5.4.0" - "@ethersproject/basex" "5.4.0" - "@ethersproject/bignumber" "5.4.2" - "@ethersproject/bytes" "5.4.0" - "@ethersproject/constants" "5.4.0" - "@ethersproject/contracts" "5.4.1" - "@ethersproject/hash" "5.4.0" - "@ethersproject/hdnode" "5.4.0" - "@ethersproject/json-wallets" "5.4.0" - "@ethersproject/keccak256" "5.4.0" - "@ethersproject/logger" "5.4.1" - "@ethersproject/networks" "5.4.2" - "@ethersproject/pbkdf2" "5.4.0" - "@ethersproject/properties" "5.4.1" - "@ethersproject/providers" "5.4.5" - "@ethersproject/random" "5.4.0" - "@ethersproject/rlp" "5.4.0" - "@ethersproject/sha2" "5.4.0" - "@ethersproject/signing-key" "5.4.0" - "@ethersproject/solidity" "5.4.0" - "@ethersproject/strings" "5.4.0" - "@ethersproject/transactions" "5.4.0" - "@ethersproject/units" "5.4.0" - "@ethersproject/wallet" "5.4.0" - "@ethersproject/web" "5.4.0" - "@ethersproject/wordlists" "5.4.0" +ethers@^5.5.1: + version "5.5.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.5.1.tgz#d3259a95a42557844aa543906c537106c0406fbf" + integrity sha512-RodEvUFZI+EmFcE6bwkuJqpCYHazdzeR1nMzg+YWQSmQEsNtfl1KHGfp/FWZYl48bI/g7cgBeP2IlPthjiVngw== + dependencies: + "@ethersproject/abi" "5.5.0" + "@ethersproject/abstract-provider" "5.5.1" + "@ethersproject/abstract-signer" "5.5.0" + "@ethersproject/address" "5.5.0" + "@ethersproject/base64" "5.5.0" + "@ethersproject/basex" "5.5.0" + "@ethersproject/bignumber" "5.5.0" + "@ethersproject/bytes" "5.5.0" + "@ethersproject/constants" "5.5.0" + "@ethersproject/contracts" "5.5.0" + "@ethersproject/hash" "5.5.0" + "@ethersproject/hdnode" "5.5.0" + "@ethersproject/json-wallets" "5.5.0" + "@ethersproject/keccak256" "5.5.0" + "@ethersproject/logger" "5.5.0" + "@ethersproject/networks" "5.5.0" + "@ethersproject/pbkdf2" "5.5.0" + "@ethersproject/properties" "5.5.0" + "@ethersproject/providers" "5.5.0" + "@ethersproject/random" "5.5.0" + "@ethersproject/rlp" "5.5.0" + "@ethersproject/sha2" "5.5.0" + "@ethersproject/signing-key" "5.5.0" + "@ethersproject/solidity" "5.5.0" + "@ethersproject/strings" "5.5.0" + "@ethersproject/transactions" "5.5.0" + "@ethersproject/units" "5.5.0" + "@ethersproject/wallet" "5.5.0" + "@ethersproject/web" "5.5.0" + "@ethersproject/wordlists" "5.5.0" ethjs-abi@^0.2.1: version "0.2.1" @@ -3359,7 +3482,7 @@ execa@^1.0.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -execa@^5.0.0: +execa@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== @@ -3799,13 +3922,20 @@ ghost-testrpc@^0.0.2: chalk "^2.4.2" node-emoji "^1.10.0" -glob-parent@^5.1.0, glob-parent@^5.1.2, glob-parent@~5.1.0: +glob-parent@^5.1.0, glob-parent@~5.1.0: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== dependencies: is-glob "^4.0.1" +glob-parent@^6.0.1: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob@7.1.3: version "7.1.3" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" @@ -3970,10 +4100,10 @@ har-validator@~5.1.3: ajv "^6.12.3" har-schema "^2.0.0" -hardhat-abi-exporter@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/hardhat-abi-exporter/-/hardhat-abi-exporter-2.3.0.tgz#f7aeb56f2ceef1ccdb75a5b8d81dc80cbbfeefc4" - integrity sha512-9EVhogHgFWsi4Bc46tv+WirOR+auGBZrv9V5/qAHBjOqYiZPbNXoFUo/yQhOAsF8Bz4Q9p4jHpdeQXnYt7g6Yw== +hardhat-abi-exporter@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/hardhat-abi-exporter/-/hardhat-abi-exporter-2.3.1.tgz#0efe56a9d51c3b1c15fe4e66864852e289611372" + integrity sha512-p55zxuCI6JwKSOC2Yp7IRqib41lVczL/h7gwL6xYytG0GCwrT9TJ3Su/18oc6gI4kXbOMYPo/LcXEV/s3P5ONg== hardhat-contract-sizer@^2.1.1: version "2.1.1" @@ -3991,10 +4121,10 @@ hardhat-gas-reporter@^1.0.4: eth-gas-reporter "^0.2.20" sha1 "^1.1.1" -hardhat@^2.6.4: - version "2.6.4" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.6.4.tgz#9ff3f139f697bfc4e14836a3fef3ca4c62357d65" - integrity sha512-6QNfu1FptjtyGJ+jBR7LMX7AMY9gWWw9kAUD7v0YZNZH1ZBgsZdMHqXKiSzO5pLQXo+fy9zZovKAUNYbjQ/1fw== +hardhat@^2.6.8: + version "2.6.8" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.6.8.tgz#9ef6f8c16f9044acb95609d15a760b89177b8181" + integrity sha512-iRVd5DgcIVV3rNXMlogOfwlXAhHp7Wy/OjjFiUhTey8Unvo6oq5+Is5ANiKVN+Iw07Pcb/HpkGt7jCB6a4ITgg== dependencies: "@ethereumjs/block" "^3.4.0" "@ethereumjs/blockchain" "^5.4.0" @@ -4003,7 +4133,7 @@ hardhat@^2.6.4: "@ethereumjs/vm" "^5.5.2" "@ethersproject/abi" "^5.1.2" "@sentry/node" "^5.18.1" - "@solidity-parser/parser" "^0.11.0" + "@solidity-parser/parser" "^0.14.0" "@types/bn.js" "^5.1.0" "@types/lru-cache" "^5.1.0" abort-controller "^3.0.0" @@ -4228,10 +4358,10 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -husky@^7.0.2: - version "7.0.2" - resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.2.tgz#21900da0f30199acca43a46c043c4ad84ae88dff" - integrity sha512-8yKEWNX4z2YsofXAMT7KvA1g8p+GxtB1ffV8XtpAEGuXNAbCV5wdNKH+qTpw8SM9fh4aMPDR+yQuKfgnreyZlg== +husky@^7.0.4: + version "7.0.4" + resolved "https://registry.yarnpkg.com/husky/-/husky-7.0.4.tgz#242048245dc49c8fb1bf0cc7cfb98dd722531535" + integrity sha512-vbaCKN2QLtP/vD4yvs6iz6hBEo6wkSzs8HpRah1Z6aGmF2KW5PdYuAd7uX5a+OyBZHBhd+TFLqgjUgytQr4RvQ== iconv-lite@0.4.24, iconv-lite@^0.4.24: version "0.4.24" @@ -4457,6 +4587,13 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + is-hex-prefixed@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" @@ -4548,11 +4685,6 @@ is-typedarray@^1.0.0, is-typedarray@~1.0.0: resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" @@ -4617,6 +4749,13 @@ js-yaml@3.x, js-yaml@^3.12.0, js-yaml@^3.13.0, js-yaml@^3.13.1: argparse "^1.0.7" esprima "^4.0.0" +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" @@ -4642,11 +4781,6 @@ json-schema-traverse@^0.4.1: resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema-traverse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" - integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== - json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" @@ -4841,36 +4975,37 @@ lines-and-columns@^1.1.6: resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= -lint-staged@11.1.2: - version "11.1.2" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.1.2.tgz#4dd78782ae43ee6ebf2969cad9af67a46b33cd90" - integrity sha512-6lYpNoA9wGqkL6Hew/4n1H6lRqF3qCsujVT0Oq5Z4hiSAM7S6NksPJ3gnr7A7R52xCtiZMcEUNNQ6d6X5Bvh9w== +lint-staged@11.2.6: + version "11.2.6" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.2.6.tgz#f477b1af0294db054e5937f171679df63baa4c43" + integrity sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg== dependencies: - chalk "^4.1.1" - cli-truncate "^2.1.0" - commander "^7.2.0" - cosmiconfig "^7.0.0" - debug "^4.3.1" + cli-truncate "2.1.0" + colorette "^1.4.0" + commander "^8.2.0" + cosmiconfig "^7.0.1" + debug "^4.3.2" enquirer "^2.3.6" - execa "^5.0.0" - listr2 "^3.8.2" - log-symbols "^4.1.0" + execa "^5.1.1" + listr2 "^3.12.2" micromatch "^4.0.4" normalize-path "^3.0.0" please-upgrade-node "^3.2.0" string-argv "0.3.1" - stringify-object "^3.3.0" + stringify-object "3.3.0" + supports-color "8.1.1" -listr2@^3.8.2: - version "3.11.0" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.11.0.tgz#9771b02407875aa78e73d6e0ff6541bbec0aaee9" - integrity sha512-XLJVe2JgXCyQTa3FbSv11lkKExYmEyA4jltVo8z4FX10Vt1Yj8IMekBfwim0BSOM9uj1QMTJvDQQpHyuPbB/dQ== +listr2@^3.12.2: + version "3.13.3" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.13.3.tgz#d8f6095c9371b382c9b1c2bc33c5941d8e177f11" + integrity sha512-VqAgN+XVfyaEjSaFewGPcDs5/3hBbWVaX1VgWv2f52MF7US45JuARlArULctiB44IIcEk3JF7GtoFCLqEdeuPA== dependencies: cli-truncate "^2.1.0" - colorette "^1.2.2" + clone "^2.1.2" + colorette "^2.0.16" log-update "^4.0.0" p-map "^4.0.0" - rxjs "^6.6.7" + rxjs "^7.4.0" through "^2.3.8" wrap-ansi "^7.0.0" @@ -4932,11 +5067,6 @@ lodash.toarray@^4.4.0: resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= -lodash.truncate@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" - integrity sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM= - lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" @@ -4949,14 +5079,6 @@ log-symbols@3.0.0: dependencies: chalk "^2.4.2" -log-symbols@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - log-update@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" @@ -6093,10 +6215,10 @@ regexpp@^2.0.1: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== -regexpp@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" - integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== +regexpp@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" + integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== req-cwd@^2.0.0: version "2.0.0" @@ -6169,7 +6291,7 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= -require-from-string@^2.0.0, require-from-string@^2.0.2: +require-from-string@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== @@ -6302,12 +6424,12 @@ rxjs@^6.4.0: dependencies: tslib "^1.9.0" -rxjs@^6.6.7: - version "6.6.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" - integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== +rxjs@^7.4.0: + version "7.4.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.4.0.tgz#a12a44d7eebf016f5ff2441b87f28c9a51cebc68" + integrity sha512-7SQDi7xeTMCJpqViXh8gL/lebcwlp3d831F05+9B44A4B0WfsEwUQHR64gsH1kvJ+Ep/J9K2+n1hVl1CsGN23w== dependencies: - tslib "^1.9.0" + tslib "~2.1.0" safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: version "5.1.2" @@ -6771,7 +6893,7 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-object@^3.3.0: +stringify-object@3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== @@ -6845,6 +6967,13 @@ supports-color@6.0.0: dependencies: has-flag "^3.0.0" +supports-color@8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + supports-color@^3.1.0: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" @@ -6917,18 +7046,6 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" -table@^6.0.9: - version "6.7.1" - resolved "https://registry.yarnpkg.com/table/-/table-6.7.1.tgz#ee05592b7143831a8c94f3cee6aae4c1ccef33e2" - integrity sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg== - dependencies: - ajv "^8.0.1" - lodash.clonedeep "^4.5.0" - lodash.truncate "^4.4.2" - slice-ansi "^4.0.0" - string-width "^4.2.0" - strip-ansi "^6.0.0" - tar@^4.0.2: version "4.4.13" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" @@ -7032,6 +7149,11 @@ tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" + integrity sha512-hcVC3wYEziELGGmEEXue7D75zbwIIVUMWAVbHItGPx0ziyXxrOMQx4rQEVEV45Ut/1IotuEvwqPopzIOkDMf0A== + tsort@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" @@ -7303,10 +7425,10 @@ web3-bzz@1.3.4: swarm-js "^0.1.40" underscore "1.9.1" -web3-bzz@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.5.3.tgz#e36456905ce051138f9c3ce3623cbc73da088c2b" - integrity sha512-SlIkAqG0eS6cBS9Q2eBOTI1XFzqh83RqGJWnyrNZMDxUwsTVHL+zNnaPShVPvrWQA1Ub5b0bx1Kc5+qJVxsTJg== +web3-bzz@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.6.0.tgz#584b51339f21eedff159abc9239b4b7ef6ded840" + integrity sha512-ugYV6BsinwhIi0CsLWINBz4mqN9wR9vNG0WmyEbdECjxcPyr6vkaWt4qi0zqlUxEnYAwGj4EJXNrbjPILntQTQ== dependencies: "@types/node" "^12.12.6" got "9.6.0" @@ -7330,13 +7452,13 @@ web3-core-helpers@1.3.4: web3-eth-iban "1.3.4" web3-utils "1.3.4" -web3-core-helpers@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.5.3.tgz#099030235c477aadf39a94199ef40092151d563c" - integrity sha512-Ip1IjB3S8vN7Kf1PPjK41U5gskmMk6IJQlxIVuS8/1U7n/o0jC8krqtpRwiMfAgYyw3TXwBFtxSRTvJtnLyXZw== +web3-core-helpers@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz#77e161b6ba930a4008a0df804ab379e0aa7e1e7f" + integrity sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg== dependencies: - web3-eth-iban "1.5.3" - web3-utils "1.5.3" + web3-eth-iban "1.6.0" + web3-utils "1.6.0" web3-core-method@1.2.9: version "1.2.9" @@ -7362,17 +7484,17 @@ web3-core-method@1.3.4: web3-core-subscriptions "1.3.4" web3-utils "1.3.4" -web3-core-method@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.5.3.tgz#6cff97ed19fe4ea2e9183d6f703823a079f5132c" - integrity sha512-8wJrwQ2qD9ibWieF9oHXwrJsUGrv3XAtEkNeyvyNMpktNTIjxJ2jaFGQUuLiyUrMubD18XXgLk4JS6PJU4Loeg== +web3-core-method@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.6.0.tgz#ebe4ea51f5a4fa809bb68185576186359d3982e9" + integrity sha512-cHekyEil4mtcCOk6Q1Zh4y+2o5pTwsLIxP6Bpt4BRtZgdsyPiadYJpkLAVT/quch5xN7Qs5ZwG5AvRCS3VwD2g== dependencies: "@ethereumjs/common" "^2.4.0" "@ethersproject/transactions" "^5.0.0-beta.135" - web3-core-helpers "1.5.3" - web3-core-promievent "1.5.3" - web3-core-subscriptions "1.5.3" - web3-utils "1.5.3" + web3-core-helpers "1.6.0" + web3-core-promievent "1.6.0" + web3-core-subscriptions "1.6.0" + web3-utils "1.6.0" web3-core-promievent@1.2.9: version "1.2.9" @@ -7388,10 +7510,10 @@ web3-core-promievent@1.3.4: dependencies: eventemitter3 "4.0.4" -web3-core-promievent@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.5.3.tgz#3f11833c3dc6495577c274350b61144e0a4dba01" - integrity sha512-CFfgqvk3Vk6PIAxtLLuX+pOMozxkKCY+/GdGr7weMh033mDXEPvwyVjoSRO1PqIKj668/hMGQsVoIgbyxkJ9Mg== +web3-core-promievent@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.6.0.tgz#8b6053ae83cb47164540167fc361469fc604d2dd" + integrity sha512-ZzsevjMXWkhqW9dnVfTfb1OUcK7jKcKPvPIbQ4boJccNgvNZPZKlo8xB4pkAX38n4c59O5mC7Lt/z2QL/M5CeQ== dependencies: eventemitter3 "4.0.4" @@ -7418,16 +7540,16 @@ web3-core-requestmanager@1.3.4: web3-providers-ipc "1.3.4" web3-providers-ws "1.3.4" -web3-core-requestmanager@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.5.3.tgz#b339525815fd40e3a2a81813c864ddc413f7b6f7" - integrity sha512-9k/Bze2rs8ONix5IZR+hYdMNQv+ark2Ek2kVcrFgWO+LdLgZui/rn8FikPunjE+ub7x7pJaKCgVRbYFXjo3ZWg== +web3-core-requestmanager@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.6.0.tgz#8ef3a3b89cd08983bd94574f9c5893f70a8a6aea" + integrity sha512-CY5paPdiDXKTXPWaEUZekDfUXSuoE2vPxolwqzsvKwFWH5+H1NaXgrc+D5HpufgSvTXawTw0fy7IAicg8+PWqA== dependencies: util "^0.12.0" - web3-core-helpers "1.5.3" - web3-providers-http "1.5.3" - web3-providers-ipc "1.5.3" - web3-providers-ws "1.5.3" + web3-core-helpers "1.6.0" + web3-providers-http "1.6.0" + web3-providers-ipc "1.6.0" + web3-providers-ws "1.6.0" web3-core-subscriptions@1.2.9: version "1.2.9" @@ -7447,13 +7569,13 @@ web3-core-subscriptions@1.3.4: underscore "1.9.1" web3-core-helpers "1.3.4" -web3-core-subscriptions@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.5.3.tgz#d7d69c4caad65074212028656e9dc56ca5c2159d" - integrity sha512-L2m9vG1iRN6thvmv/HQwO2YLhOQlmZU8dpLG6GSo9FBN14Uch868Swk0dYVr3rFSYjZ/GETevSXU+O+vhCummA== +web3-core-subscriptions@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.6.0.tgz#8c23b15b434a7c9f937652ecca45d7108e2c54df" + integrity sha512-kY9WZUY/m1URSOv3uTLshoZD9ZDiFKReIzHuPUkxFpD5oYNmr1/aPQNPCrrMxKODR7UVX/D90FxWwCYqHhLaxQ== dependencies: eventemitter3 "4.0.4" - web3-core-helpers "1.5.3" + web3-core-helpers "1.6.0" web3-core@1.2.9: version "1.2.9" @@ -7481,18 +7603,18 @@ web3-core@1.3.4: web3-core-requestmanager "1.3.4" web3-utils "1.3.4" -web3-core@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.5.3.tgz#59f8728b27c8305b349051326aa262b9b7e907bf" - integrity sha512-ACTbu8COCu+0eUNmd9pG7Q9EVsNkAg2w3Y7SqhDr+zjTgbSHZV01jXKlapm9z+G3AN/BziV3zGwudClJ4u4xXQ== +web3-core@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.6.0.tgz#144eb00f651c9812faf7176abd7ee99d5f45e212" + integrity sha512-o0WsLrJ2yD+HAAc29lGMWJef/MutTyuzpJC0UzLJtIAQJqtpDalzWINEu4j8XYXGk34N/V6vudtzRPo23QEE6g== dependencies: "@types/bn.js" "^4.11.5" "@types/node" "^12.12.6" bignumber.js "^9.0.0" - web3-core-helpers "1.5.3" - web3-core-method "1.5.3" - web3-core-requestmanager "1.5.3" - web3-utils "1.5.3" + web3-core-helpers "1.6.0" + web3-core-method "1.6.0" + web3-core-requestmanager "1.6.0" + web3-utils "1.6.0" web3-eth-abi@1.2.9: version "1.2.9" @@ -7512,13 +7634,13 @@ web3-eth-abi@1.3.4: underscore "1.9.1" web3-utils "1.3.4" -web3-eth-abi@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.5.3.tgz#5aea9394d797f99ca0d9bd40c3417eb07241c96c" - integrity sha512-i/qhuFsoNrnV130CSRYX/z4SlCfSQ4mHntti5yTmmQpt70xZKYZ57BsU0R29ueSQ9/P+aQrL2t2rqkQkAloUxg== +web3-eth-abi@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.6.0.tgz#4225608f61ebb0607d80849bb2b20f910780253d" + integrity sha512-fImomGE9McuTMJLwK8Tp0lTUzXqCkWeMm00qPVIwpJ/h7lCw9UFYV9+4m29wSqW6FF+FIZKwc6UBEf9dlx3orA== dependencies: "@ethersproject/abi" "5.0.7" - web3-utils "1.5.3" + web3-utils "1.6.0" web3-eth-accounts@1.2.9: version "1.2.9" @@ -7554,10 +7676,10 @@ web3-eth-accounts@1.3.4: web3-core-method "1.3.4" web3-utils "1.3.4" -web3-eth-accounts@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.5.3.tgz#076c816ff4d68c9dffebdc7fd2bfaddcfc163d77" - integrity sha512-pdGhXgeBaEJENMvRT6W9cmji3Zz/46ugFSvmnLLw79qi5EH7XJhKISNVb41eWCrs4am5GhI67GLx5d2s2a72iw== +web3-eth-accounts@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.6.0.tgz#530927f4c5b78df93b3ea1203abbb467de29cd04" + integrity sha512-2f6HS4KIH4laAsNCOfbNX3dRiQosqSY2TRK86C8jtAA/QKGdx+5qlPfYzbI2RjG81iayb2+mVbHIaEaBGZ8sGw== dependencies: "@ethereumjs/common" "^2.3.0" "@ethereumjs/tx" "^3.2.1" @@ -7566,10 +7688,10 @@ web3-eth-accounts@1.5.3: ethereumjs-util "^7.0.10" scrypt-js "^3.0.1" uuid "3.3.2" - web3-core "1.5.3" - web3-core-helpers "1.5.3" - web3-core-method "1.5.3" - web3-utils "1.5.3" + web3-core "1.6.0" + web3-core-helpers "1.6.0" + web3-core-method "1.6.0" + web3-utils "1.6.0" web3-eth-contract@1.2.9: version "1.2.9" @@ -7601,19 +7723,19 @@ web3-eth-contract@1.3.4: web3-eth-abi "1.3.4" web3-utils "1.3.4" -web3-eth-contract@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.5.3.tgz#12b03a4a16ce583a945f874bea2ff2fb4c5b81ad" - integrity sha512-Gdlt1L6cdHe83k7SdV6xhqCytVtOZkjD0kY/15x441AuuJ4JLubCHuqu69k2Dr3tWifHYVys/vG8QE/W16syGg== +web3-eth-contract@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.6.0.tgz#deb946867ad86d32bcbba899d733b681b25ea674" + integrity sha512-ZUtO77zFnxuFtrc+D+iJ3AzNgFXAVcKnhEYN7f1PNz/mFjbtE6dJ+ujO0mvMbxIZF02t9IZv0CIXRpK0rDvZAw== dependencies: "@types/bn.js" "^4.11.5" - web3-core "1.5.3" - web3-core-helpers "1.5.3" - web3-core-method "1.5.3" - web3-core-promievent "1.5.3" - web3-core-subscriptions "1.5.3" - web3-eth-abi "1.5.3" - web3-utils "1.5.3" + web3-core "1.6.0" + web3-core-helpers "1.6.0" + web3-core-method "1.6.0" + web3-core-promievent "1.6.0" + web3-core-subscriptions "1.6.0" + web3-eth-abi "1.6.0" + web3-utils "1.6.0" web3-eth-ens@1.2.9: version "1.2.9" @@ -7645,19 +7767,19 @@ web3-eth-ens@1.3.4: web3-eth-contract "1.3.4" web3-utils "1.3.4" -web3-eth-ens@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.5.3.tgz#ef6eee1ddf32b1ff9536fc7c599a74f2656bafe1" - integrity sha512-QmGFFtTGElg0E+3xfCIFhiUF+1imFi9eg/cdsRMUZU4F1+MZCC/ee+IAelYLfNTGsEslCqfAusliKOT9DdGGnw== +web3-eth-ens@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.6.0.tgz#af13852168d56fa71b9198eb097e96fb93831c2a" + integrity sha512-AG24PNv9qbYHSpjHcU2pViOII0jvIR7TeojJ2bxXSDqfcgHuRp3NZGKv6xFvT4uNI4LEQHUhSC7bzHoNF5t8CA== dependencies: content-hash "^2.5.2" eth-ens-namehash "2.0.8" - web3-core "1.5.3" - web3-core-helpers "1.5.3" - web3-core-promievent "1.5.3" - web3-eth-abi "1.5.3" - web3-eth-contract "1.5.3" - web3-utils "1.5.3" + web3-core "1.6.0" + web3-core-helpers "1.6.0" + web3-core-promievent "1.6.0" + web3-eth-abi "1.6.0" + web3-eth-contract "1.6.0" + web3-utils "1.6.0" web3-eth-iban@1.2.9: version "1.2.9" @@ -7675,13 +7797,13 @@ web3-eth-iban@1.3.4: bn.js "^4.11.9" web3-utils "1.3.4" -web3-eth-iban@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.5.3.tgz#91b1475893a877b10eac1de5cce6eb379fb81b5d" - integrity sha512-vMzmGqolYZvRHwP9P4Nf6G8uYM5aTLlQu2a34vz78p0KlDC+eV1th3+90Qeaupa28EG7OO0IT1F0BejiIauOPw== +web3-eth-iban@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz#edbe46cedc5b148d53fa455edea6b4eef53b2be7" + integrity sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw== dependencies: bn.js "^4.11.9" - web3-utils "1.5.3" + web3-utils "1.6.0" web3-eth-personal@1.2.9: version "1.2.9" @@ -7707,17 +7829,17 @@ web3-eth-personal@1.3.4: web3-net "1.3.4" web3-utils "1.3.4" -web3-eth-personal@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.5.3.tgz#4ebe09e9a77dd49d23d93b36b36cfbf4a6dae713" - integrity sha512-JzibJafR7ak/Icas8uvos3BmUNrZw1vShuNR5Cxjo+vteOC8XMqz1Vr7RH65B4bmlfb3bm9xLxetUHO894+Sew== +web3-eth-personal@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.6.0.tgz#b75a61c0737b8b8bcc11d05db2ed7bfce7e4b262" + integrity sha512-8ohf4qAwbShf4RwES2tLHVqa+pHZnS5Q6tV80sU//bivmlZeyO1W4UWyNn59vu9KPpEYvLseOOC6Muxuvr8mFQ== dependencies: "@types/node" "^12.12.6" - web3-core "1.5.3" - web3-core-helpers "1.5.3" - web3-core-method "1.5.3" - web3-net "1.5.3" - web3-utils "1.5.3" + web3-core "1.6.0" + web3-core-helpers "1.6.0" + web3-core-method "1.6.0" + web3-net "1.6.0" + web3-utils "1.6.0" web3-eth@1.2.9: version "1.2.9" @@ -7757,23 +7879,23 @@ web3-eth@1.3.4: web3-net "1.3.4" web3-utils "1.3.4" -web3-eth@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.5.3.tgz#d7d1ac7198f816ab8a2088c01e0bf1eda45862fe" - integrity sha512-saFurA1L23Bd7MEf7cBli6/jRdMhD4X/NaMiO2mdMMCXlPujoudlIJf+VWpRWJpsbDFdu7XJ2WHkmBYT5R3p1Q== - dependencies: - web3-core "1.5.3" - web3-core-helpers "1.5.3" - web3-core-method "1.5.3" - web3-core-subscriptions "1.5.3" - web3-eth-abi "1.5.3" - web3-eth-accounts "1.5.3" - web3-eth-contract "1.5.3" - web3-eth-ens "1.5.3" - web3-eth-iban "1.5.3" - web3-eth-personal "1.5.3" - web3-net "1.5.3" - web3-utils "1.5.3" +web3-eth@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.6.0.tgz#4c9d5fb4eccf9f8744828281757e6ea76af58cbd" + integrity sha512-qJMvai//r0be6I9ghU24/152f0zgJfYC23TMszN3Y6jse1JtjCBP2TlTibFcvkUN1RRdIUY5giqO7ZqAYAmp7w== + dependencies: + web3-core "1.6.0" + web3-core-helpers "1.6.0" + web3-core-method "1.6.0" + web3-core-subscriptions "1.6.0" + web3-eth-abi "1.6.0" + web3-eth-accounts "1.6.0" + web3-eth-contract "1.6.0" + web3-eth-ens "1.6.0" + web3-eth-iban "1.6.0" + web3-eth-personal "1.6.0" + web3-net "1.6.0" + web3-utils "1.6.0" web3-net@1.2.9: version "1.2.9" @@ -7793,14 +7915,14 @@ web3-net@1.3.4: web3-core-method "1.3.4" web3-utils "1.3.4" -web3-net@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.5.3.tgz#545fee49b8e213b0c55cbe74ffd0295766057463" - integrity sha512-0W/xHIPvgVXPSdLu0iZYnpcrgNnhzHMC888uMlGP5+qMCt8VuflUZHy7tYXae9Mzsg1kxaJAS5lHVNyeNw4CoQ== +web3-net@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.6.0.tgz#2c28f8787073110a7c2310336889d2dad647e500" + integrity sha512-LFfG95ovTT2sNHkO1TEfsaKpYcxOSUtbuwHQ0K3G0e5nevKDJkPEFIqIcob40yiwcWoqEjENJP9Bjk8CRrZ99Q== dependencies: - web3-core "1.5.3" - web3-core-method "1.5.3" - web3-utils "1.5.3" + web3-core "1.6.0" + web3-core-method "1.6.0" + web3-utils "1.6.0" web3-providers-http@1.2.9: version "1.2.9" @@ -7818,12 +7940,12 @@ web3-providers-http@1.3.4: web3-core-helpers "1.3.4" xhr2-cookies "1.1.0" -web3-providers-http@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.5.3.tgz#74f170fc3d79eb7941d9fbc34e2a067d61ced0b2" - integrity sha512-5DpUyWGHtDAr2RYmBu34Fu+4gJuBAuNx2POeiJIooUtJ+Mu6pIx4XkONWH6V+Ez87tZAVAsFOkJRTYuzMr3rPw== +web3-providers-http@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.6.0.tgz#8db4e589abf7197f5d65b12af1bf9726c45f4160" + integrity sha512-sNxHFNv3lnxpmULt34AS6M36IYB/Hzm2Et4yPNzdP1XE644D8sQBZQZaJQdTaza5HfrlwoqU6AOK935armqGuA== dependencies: - web3-core-helpers "1.5.3" + web3-core-helpers "1.6.0" xhr2-cookies "1.1.0" web3-providers-ipc@1.2.9: @@ -7844,13 +7966,13 @@ web3-providers-ipc@1.3.4: underscore "1.9.1" web3-core-helpers "1.3.4" -web3-providers-ipc@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.5.3.tgz#4bd7f5e445c2f3c2595fce0929c72bb879320a3f" - integrity sha512-JmeAptugVpmXI39LGxUSAymx0NOFdgpuI1hGQfIhbEAcd4sv7fhfd5D+ZU4oLHbRI8IFr4qfGU0uhR8BXhDzlg== +web3-providers-ipc@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.6.0.tgz#6a3410fd47a67c4a36719fb97f99534ae12aac98" + integrity sha512-ETYdfhpGiGoWpmmSJnONvnPfd3TPivHEGjXyuX+L5FUsbMOVZj9MFLNIS19Cx/YGL8UWJ/8alLJoTcWSIdz/aA== dependencies: oboe "2.1.5" - web3-core-helpers "1.5.3" + web3-core-helpers "1.6.0" web3-providers-ws@1.2.9: version "1.2.9" @@ -7872,13 +7994,13 @@ web3-providers-ws@1.3.4: web3-core-helpers "1.3.4" websocket "^1.0.32" -web3-providers-ws@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.5.3.tgz#eec6cfb32bb928a4106de506f13a49070a21eabf" - integrity sha512-6DhTw4Q7nm5CFYEUHOJM0gAb3xFx+9gWpVveg3YxJ/ybR1BUvEWo3bLgIJJtX56cYX0WyY6DS35a7f0LOI1kVg== +web3-providers-ws@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.6.0.tgz#dc15dc18c30089efda992015fd5254bd2b77af5f" + integrity sha512-eNRmlhOPCpuVYwBrKBBQRLGPFb4U1Uo44r9EWV69Cpo4gP6XeBTl6nkawhLz6DS0fq79apyPfItJVuSfAy77pA== dependencies: eventemitter3 "4.0.4" - web3-core-helpers "1.5.3" + web3-core-helpers "1.6.0" websocket "^1.0.32" web3-shh@1.2.9: @@ -7901,15 +8023,15 @@ web3-shh@1.3.4: web3-core-subscriptions "1.3.4" web3-net "1.3.4" -web3-shh@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.5.3.tgz#3c04aa4cda9ba0b746d7225262401160f8e38b13" - integrity sha512-COfEXfsqoV/BkcsNLRxQqnWc1Teb8/9GxdGag5GtPC5gQC/vsN+7hYVJUwNxY9LtJPKYTij2DHHnx6UkITng+Q== +web3-shh@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.6.0.tgz#838a3435dce1039f669a48e53e948062de197931" + integrity sha512-ymN0OFL81WtEeSyb+PFpuUv39fR3frGwsZnIg5EVPZvrOIdaDSFcGSLDmafUt0vKSubvLMVYIBOCskRD6YdtEQ== dependencies: - web3-core "1.5.3" - web3-core-method "1.5.3" - web3-core-subscriptions "1.5.3" - web3-net "1.5.3" + web3-core "1.6.0" + web3-core-method "1.6.0" + web3-core-subscriptions "1.6.0" + web3-net "1.6.0" web3-utils@1.2.9: version "1.2.9" @@ -7939,14 +8061,14 @@ web3-utils@1.3.4, web3-utils@^1.2.5, web3-utils@^1.3.0: underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.5.3.tgz#e914c9320cd663b2a09a5cb920ede574043eb437" - integrity sha512-56nRgA+Ad9SEyCv39g36rTcr5fpsd4L9LgV3FK0aB66nAMazLAA6Qz4lH5XrUKPDyBIPGJIR+kJsyRtwcu2q1Q== +web3-utils@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.6.0.tgz#1975c5ee5b7db8a0836eb7004848a7cd962d1ddc" + integrity sha512-bgCAWAeQnJF035YTFxrcHJ5mGEfTi/McsjqldZiXRwlHK7L1PyOqvXiQLE053dlzvy1kdAxWl/sSSfLMyNUAXg== dependencies: bn.js "^4.11.9" - eth-lib "0.2.8" ethereum-bloom-filters "^1.0.6" + ethereumjs-util "^7.1.0" ethjs-unit "0.1.6" number-to-bn "1.7.0" randombytes "^2.1.0" @@ -7978,18 +8100,18 @@ web3@^1.0.0-beta.34, web3@^1.2.5: web3-shh "1.3.4" web3-utils "1.3.4" -web3@^1.5.3: - version "1.5.3" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.5.3.tgz#11882679453c645bf33620fbc255a243343075aa" - integrity sha512-eyBg/1K44flfv0hPjXfKvNwcUfIVDI4NX48qHQe6wd7C8nPSdbWqo9vLy6ksZIt9NLa90HjI8HsGYgnMSUxn6w== - dependencies: - web3-bzz "1.5.3" - web3-core "1.5.3" - web3-eth "1.5.3" - web3-eth-personal "1.5.3" - web3-net "1.5.3" - web3-shh "1.5.3" - web3-utils "1.5.3" +web3@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.6.0.tgz#d8fa0cd9e7bf252f9fe43bb77dc42bc6671affde" + integrity sha512-rWpXnO88MiVX5yTRqMBCVKASxc7QDkXZZUl1D48sKlbX4dt3BAV+nVMVUKCBKiluZ5Bp8pDrVCUdPx/jIYai5Q== + dependencies: + web3-bzz "1.6.0" + web3-core "1.6.0" + web3-eth "1.6.0" + web3-eth-personal "1.6.0" + web3-net "1.6.0" + web3-shh "1.6.0" + web3-utils "1.6.0" websocket@^1.0.31, websocket@^1.0.32: version "1.0.33" From 45b50add632407dd5f143eb5f913eeb22487900e Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 9 Nov 2021 21:50:36 +0200 Subject: [PATCH 19/55] ERC-01S: Redundant Empty Code Block --- contracts/tokens/ERC20Upgradeable.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/tokens/ERC20Upgradeable.sol b/contracts/tokens/ERC20Upgradeable.sol index 934fc924..4790c40f 100644 --- a/contracts/tokens/ERC20Upgradeable.sol +++ b/contracts/tokens/ERC20Upgradeable.sol @@ -199,7 +199,7 @@ abstract contract ERC20Upgradeable is Initializable, IERC20Upgradeable { * - `recipient` cannot be the zero address. * - `sender` must have a balance of at least `amount`. */ - function _transfer(address sender, address recipient, uint256 amount) internal virtual { } + function _transfer(address sender, address recipient, uint256 amount) internal virtual; /** * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens. From 680e0ba43a204b02dd103a03fe0583a23b7c9366 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 9 Nov 2021 22:09:27 +0200 Subject: [PATCH 20/55] ORA-01S: Variable Data Location Optimization --- contracts/Oracles.sol | 18 +++++++++--------- contracts/interfaces/IMerkleDistributor.sol | 2 +- contracts/interfaces/IOracles.sol | 16 ++++++++-------- contracts/interfaces/IPool.sol | 4 ++-- contracts/interfaces/IPoolValidators.sol | 10 +++++----- contracts/merkles/MerkleDistributor.sol | 2 +- contracts/pool/Pool.sol | 4 ++-- contracts/pool/PoolValidators.sol | 10 +++++----- 8 files changed, 33 insertions(+), 33 deletions(-) diff --git a/contracts/Oracles.sol b/contracts/Oracles.sol index 2aab5c0e..75645149 100644 --- a/contracts/Oracles.sol +++ b/contracts/Oracles.sol @@ -145,7 +145,7 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { function submitRewards( uint256 totalRewards, uint256 activatedValidators, - bytes[] memory signatures + bytes[] calldata signatures ) external override whenNotPaused { @@ -191,8 +191,8 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { */ function submitMerkleRoot( bytes32 merkleRoot, - string memory merkleProofs, - bytes[] memory signatures + string calldata merkleProofs, + bytes[] calldata signatures ) external override whenNotPaused { @@ -233,9 +233,9 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { * @dev See {IOracles-initializeValidator}. */ function initializeValidator( - IPoolValidators.DepositData memory depositData, - bytes32[] memory merkleProof, - bytes[] memory signatures + IPoolValidators.DepositData calldata depositData, + bytes32[] calldata merkleProof, + bytes[] calldata signatures ) external override whenNotPaused { @@ -275,9 +275,9 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { * @dev See {IOracles-finalizeValidator}. */ function finalizeValidator( - IPoolValidators.DepositData memory depositData, - bytes32[] memory merkleProof, - bytes[] memory signatures + IPoolValidators.DepositData calldata depositData, + bytes32[] calldata merkleProof, + bytes[] calldata signatures ) external override whenNotPaused { diff --git a/contracts/interfaces/IMerkleDistributor.sol b/contracts/interfaces/IMerkleDistributor.sol index 10b8a540..5dae7dc7 100644 --- a/contracts/interfaces/IMerkleDistributor.sol +++ b/contracts/interfaces/IMerkleDistributor.sol @@ -135,7 +135,7 @@ interface IMerkleDistributor { address origin, address token, uint256 amount, - string memory rewardsLink + string calldata rewardsLink ) external; /** diff --git a/contracts/interfaces/IOracles.sol b/contracts/interfaces/IOracles.sol index 93c59d34..3ed56f28 100644 --- a/contracts/interfaces/IOracles.sol +++ b/contracts/interfaces/IOracles.sol @@ -166,8 +166,8 @@ interface IOracles { */ function submitMerkleRoot( bytes32 merkleRoot, - string memory merkleProofs, - bytes[] memory signatures + string calldata merkleProofs, + bytes[] calldata signatures ) external; /** @@ -178,9 +178,9 @@ interface IOracles { * @param signatures - oracles' signatures. */ function initializeValidator( - IPoolValidators.DepositData memory depositData, - bytes32[] memory merkleProof, - bytes[] memory signatures + IPoolValidators.DepositData calldata depositData, + bytes32[] calldata merkleProof, + bytes[] calldata signatures ) external; /** @@ -191,8 +191,8 @@ interface IOracles { * @param signatures - oracles' signatures. */ function finalizeValidator( - IPoolValidators.DepositData memory depositData, - bytes32[] memory merkleProof, - bytes[] memory signatures + IPoolValidators.DepositData calldata depositData, + bytes32[] calldata merkleProof, + bytes[] calldata signatures ) external; } diff --git a/contracts/interfaces/IPool.sol b/contracts/interfaces/IPool.sol index 78e0e6ed..e4a4e4d5 100644 --- a/contracts/interfaces/IPool.sol +++ b/contracts/interfaces/IPool.sol @@ -224,13 +224,13 @@ interface IPool { * @dev Function for initializing new pool validator. * @param depositData - the deposit data to submit for the validator. */ - function initializeValidator(IPoolValidators.DepositData memory depositData) external; + function initializeValidator(IPoolValidators.DepositData calldata depositData) external; /** * @dev Function for finalizing new pool validator registration. * @param depositData - the deposit data to submit for the validator. */ - function finalizeValidator(IPoolValidators.DepositData memory depositData) external; + function finalizeValidator(IPoolValidators.DepositData calldata depositData) external; /** * @dev Function for refunding to the pool. diff --git a/contracts/interfaces/IPoolValidators.sol b/contracts/interfaces/IPoolValidators.sol index 29d3e09e..712cb189 100644 --- a/contracts/interfaces/IPoolValidators.sol +++ b/contracts/interfaces/IPoolValidators.sol @@ -143,9 +143,9 @@ interface IPoolValidators { function addOperator( address _operator, bytes32 initializeMerkleRoot, - string memory initializeMerkleProofs, + string calldata initializeMerkleProofs, bytes32 finalizeMerkleRoot, - string memory finalizeMerkleProofs + string calldata finalizeMerkleProofs ) external; /** @@ -172,19 +172,19 @@ interface IPoolValidators { * @param depositData - deposit data of the validator to slash. * @param merkleProof - an array of hashes to verify whether the deposit data is part of the initialize merkle root. */ - function slashOperator(DepositData memory depositData, bytes32[] memory merkleProof) external; + function slashOperator(DepositData calldata depositData, bytes32[] calldata merkleProof) external; /** * @dev Function for initializing the operator. * @param depositData - deposit data of the validator to initialize. * @param merkleProof - an array of hashes to verify whether the deposit data is part of the initialize merkle root. */ - function initializeValidator(DepositData memory depositData, bytes32[] memory merkleProof) external; + function initializeValidator(DepositData calldata depositData, bytes32[] calldata merkleProof) external; /** * @dev Function for finalizing the operator. * @param depositData - deposit data of the validator to finalize. * @param merkleProof - an array of hashes to verify whether the deposit data is part of the finalize merkle root. */ - function finalizeValidator(DepositData memory depositData, bytes32[] memory merkleProof) external; + function finalizeValidator(DepositData calldata depositData, bytes32[] calldata merkleProof) external; } diff --git a/contracts/merkles/MerkleDistributor.sol b/contracts/merkles/MerkleDistributor.sol index 378e63dc..9ffca61e 100644 --- a/contracts/merkles/MerkleDistributor.sol +++ b/contracts/merkles/MerkleDistributor.sol @@ -90,7 +90,7 @@ contract MerkleDistributor is IMerkleDistributor, OwnablePausableUpgradeable { address origin, address token, uint256 amount, - string memory rewardsLink + string calldata rewardsLink ) external override onlyAdmin { diff --git a/contracts/pool/Pool.sol b/contracts/pool/Pool.sol index 086d408b..b02010e7 100644 --- a/contracts/pool/Pool.sol +++ b/contracts/pool/Pool.sol @@ -225,7 +225,7 @@ contract Pool is IPool, OwnablePausableUpgradeable { /** * @dev See {IPool-initializeValidator}. */ - function initializeValidator(IPoolValidators.DepositData memory depositData) external override whenNotPaused { + function initializeValidator(IPoolValidators.DepositData calldata depositData) external override whenNotPaused { require(msg.sender == address(validators), "Pool: access denied"); require(depositData.withdrawalCredentials == withdrawalCredentials, "Pool: invalid withdrawal credentials"); @@ -243,7 +243,7 @@ contract Pool is IPool, OwnablePausableUpgradeable { /** * @dev See {IPool-finalizeValidator}. */ - function finalizeValidator(IPoolValidators.DepositData memory depositData) external override whenNotPaused { + function finalizeValidator(IPoolValidators.DepositData calldata depositData) external override whenNotPaused { require(msg.sender == address(validators), "Pool: access denied"); require(depositData.withdrawalCredentials == withdrawalCredentials, "Pool: invalid withdrawal credentials"); diff --git a/contracts/pool/PoolValidators.sol b/contracts/pool/PoolValidators.sol index eff1ac2c..12d05c95 100644 --- a/contracts/pool/PoolValidators.sol +++ b/contracts/pool/PoolValidators.sol @@ -62,9 +62,9 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran function addOperator( address _operator, bytes32 initializeMerkleRoot, - string memory initializeMerkleProofs, + string calldata initializeMerkleProofs, bytes32 finalizeMerkleRoot, - string memory finalizeMerkleProofs + string calldata finalizeMerkleProofs ) external override onlyAdmin whenNotPaused { @@ -157,7 +157,7 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran /** * @dev See {IPoolValidators-slashOperator}. */ - function slashOperator(DepositData memory depositData, bytes32[] memory merkleProof) external override onlyAdmin whenNotPaused { + function slashOperator(DepositData calldata depositData, bytes32[] calldata merkleProof) external override onlyAdmin whenNotPaused { // fetch operator Operator storage operator = operators[depositData.operator]; bytes32 initializeMerkleRoot = operator.initializeMerkleRoot; @@ -203,7 +203,7 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran /** * @dev See {IPoolValidators-initializeValidator}. */ - function initializeValidator(DepositData memory depositData, bytes32[] memory merkleProof) external override { + function initializeValidator(DepositData calldata depositData, bytes32[] calldata merkleProof) external override { require(msg.sender == oracles, "PoolValidators: access denied"); // mark validator as initialized -> prevents from initializing the same validator twice @@ -255,7 +255,7 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran /** * @dev See {IPoolValidators-finalizeValidator}. */ - function finalizeValidator(DepositData memory depositData, bytes32[] memory merkleProof) external override { + function finalizeValidator(DepositData calldata depositData, bytes32[] calldata merkleProof) external override { require(msg.sender == oracles, "PoolValidators: access denied"); // mark validator as finalized -> prevents from finalizing the same validator twice From a53eaff7ac234bf92cef39b1dafa7e7b9ad576fd Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 9 Nov 2021 22:44:57 +0200 Subject: [PATCH 21/55] POO-01S: Potentially Misconfigured Upgrade --- contracts/pool/Pool.sol | 9 ++++++++- contracts/tokens/RewardEthToken.sol | 5 ++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/contracts/pool/Pool.sol b/contracts/pool/Pool.sol index b02010e7..6f68ea36 100644 --- a/contracts/pool/Pool.sol +++ b/contracts/pool/Pool.sol @@ -59,7 +59,14 @@ contract Pool is IPool, OwnablePausableUpgradeable { * @dev See {IPool-upgrade}. */ function upgrade(address _poolValidators, address _oracles) external override onlyAdmin whenPaused { - require(address(oracles) == 0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514, "Pool: already upgraded"); + require( + _poolValidators != address(0) && address(validators) == 0xaAc73D4A26Ae6906aa115118b7840b1F19fcd3A5, + "Pool: invalid PoolValidators address" + ); + require( + _oracles != address(0) && address(oracles) == 0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514, + "Pool: invalid Oracles address" + ); // set contract addresses validators = IPoolValidators(_poolValidators); diff --git a/contracts/tokens/RewardEthToken.sol b/contracts/tokens/RewardEthToken.sol index e00804c1..59836fe7 100644 --- a/contracts/tokens/RewardEthToken.sol +++ b/contracts/tokens/RewardEthToken.sol @@ -55,7 +55,10 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per * @dev See {IRewardEthToken-upgrade}. */ function upgrade(address _oracles) external override onlyAdmin whenPaused { - require(address(oracles) == 0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514, "RewardEthToken: already upgraded"); + require( + _oracles != address(0) && address(oracles) == 0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514, + "Pool: invalid Oracles address" + ); oracles = _oracles; } From cd2bc6c702df3cef539842ec650ccce5db51ddc5 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Wed, 10 Nov 2021 01:23:04 +0200 Subject: [PATCH 22/55] Fix Pool contract audit comments --- contracts/pool/Pool.sol | 50 +++++++++++++++++++++-------------------- 1 file changed, 26 insertions(+), 24 deletions(-) diff --git a/contracts/pool/Pool.sol b/contracts/pool/Pool.sol index 6f68ea36..d94310ce 100644 --- a/contracts/pool/Pool.sol +++ b/contracts/pool/Pool.sol @@ -192,43 +192,45 @@ contract Pool is IPool, OwnablePausableUpgradeable { /** * @dev See {IPool-activate}. */ - function activate(address account, uint256 validatorIndex) external override whenNotPaused { - require( - validatorIndex.mul(1e4) <= activatedValidators.mul(pendingValidatorsLimit.add(1e4)), - "Pool: validator is not active yet" + function activate(address account, uint256 validatorIndex) external override { + uint256 activatedAmount = _activateAmount( + account, + validatorIndex, + activatedValidators.mul(pendingValidatorsLimit.add(1e4)) ); - uint256 amount = activations[account][validatorIndex]; - require(amount > 0, "Pool: invalid validator index"); - - delete activations[account][validatorIndex]; - stakedEthToken.mint(account, amount); - emit Activated(account, validatorIndex, amount, msg.sender); + stakedEthToken.mint(account, activatedAmount); } /** * @dev See {IPool-activateMultiple}. */ - function activateMultiple(address account, uint256[] calldata validatorIndexes) external override whenNotPaused { + function activateMultiple(address account, uint256[] calldata validatorIndexes) external override { uint256 toMint; - uint256 _activatedValidators = activatedValidators; + uint256 maxValidatorIndex = activatedValidators.mul(pendingValidatorsLimit.add(1e4)); for (uint256 i = 0; i < validatorIndexes.length; i++) { - uint256 validatorIndex = validatorIndexes[i]; - require( - validatorIndex.mul(1e4) <= _activatedValidators.mul(pendingValidatorsLimit.add(1e4)), - "Pool: validator is not active yet" - ); - - uint256 amount = activations[account][validatorIndex]; - toMint = toMint.add(amount); - delete activations[account][validatorIndex]; - - emit Activated(account, validatorIndex, amount, msg.sender); + uint256 activatedAmount = _activateAmount(account, validatorIndexes[i], maxValidatorIndex); + toMint = toMint.add(activatedAmount); } - require(toMint > 0, "Pool: invalid validator index"); stakedEthToken.mint(account, toMint); } + function _activateAmount( + address account, + uint256 validatorIndex, + uint256 maxValidatorIndex + ) + internal whenNotPaused returns (uint256 amount) + { + require(validatorIndex.mul(1e4) <= maxValidatorIndex, "Pool: validator is not active yet"); + + amount = activations[account][validatorIndex]; + require(amount > 0, "Pool: invalid validator index"); + + delete activations[account][validatorIndex]; + emit Activated(account, validatorIndex, amount, msg.sender); + } + /** * @dev See {IPool-initializeValidator}. */ From f367dfd3ef4a8d115d38daaa976f60615c6e03e8 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Wed, 10 Nov 2021 01:23:40 +0200 Subject: [PATCH 23/55] Fix PoolValidators contract audit comments --- contracts/pool/PoolValidators.sol | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/contracts/pool/PoolValidators.sol b/contracts/pool/PoolValidators.sol index 12d05c95..817812e0 100644 --- a/contracts/pool/PoolValidators.sol +++ b/contracts/pool/PoolValidators.sol @@ -39,6 +39,10 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran * @dev See {IPoolValidators-initialize}. */ function initialize(address _admin, address _pool, address _oracles) external override initializer { + require(_admin != address(0), "Pool: invalid admin address"); + require(_pool != address(0), "Pool: invalid Pool address"); + require(_oracles != address(0), "Pool: invalid Oracles address"); + __OwnablePausableUpgradeable_init(_admin); pool = IPool(_pool); oracles = _oracles; From 4f96141cb966dcca2823e3419502651aa4a8f946 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Wed, 10 Nov 2021 12:38:50 +0200 Subject: [PATCH 24/55] Apply Oracles review fixes --- abi/Oracles.json | 2 +- contracts/Oracles.sol | 78 +++++++++++++---------------- contracts/interfaces/IOracles.sol | 4 +- contracts/interfaces/IOraclesV1.sol | 15 ++++++ test/oracles/Oracles.test.js | 53 ++++++++++++++------ test/oracles/upgrading.test.js | 2 +- 6 files changed, 91 insertions(+), 63 deletions(-) create mode 100644 contracts/interfaces/IOraclesV1.sol diff --git a/abi/Oracles.json b/abi/Oracles.json index 74a8a1d0..14fc6126 100644 --- a/abi/Oracles.json +++ b/abi/Oracles.json @@ -554,7 +554,7 @@ }, { "internalType": "address", - "name": "prevOracles", + "name": "oraclesV1", "type": "address" }, { diff --git a/contracts/Oracles.sol b/contracts/Oracles.sol index 75645149..a70f4157 100644 --- a/contracts/Oracles.sol +++ b/contracts/Oracles.sol @@ -6,32 +6,14 @@ pragma abicoder v2; import "@openzeppelin/contracts-upgradeable/math/SafeMathUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/utils/CountersUpgradeable.sol"; import "@openzeppelin/contracts-upgradeable/cryptography/ECDSAUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; import "./presets/OwnablePausableUpgradeable.sol"; import "./interfaces/IRewardEthToken.sol"; import "./interfaces/IPool.sol"; import "./interfaces/IOracles.sol"; import "./interfaces/IMerkleDistributor.sol"; import "./interfaces/IPoolValidators.sol"; - - -interface IAccessControlUpgradeable { - /** - * @dev See {AccessControlUpgradeable-getRoleMemberCount}. - */ - function getRoleMemberCount(bytes32 role) external view returns (uint256); - - /** - * @dev See {AccessControlUpgradeable-getRoleMember}. - */ - function getRoleMember(bytes32 role, uint256 index) external view returns (address); -} - -interface IPrevOracles { - /** - * @dev Function for retrieving current rewards nonce. - */ - function currentNonce() external view returns (uint256); -} +import "./interfaces/IOraclesV1.sol"; /** * @title Oracles @@ -63,12 +45,20 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { // @dev Address of the MerkleDistributor contract. IMerkleDistributor private merkleDistributor; + /** + * @dev Modifier for checking whether the caller is an oracle. + */ + modifier onlyOracle() { + require(hasRole(ORACLE_ROLE, msg.sender), "Oracles: access denied"); + _; + } + /** * @dev See {IOracles-initialize}. */ function initialize( address admin, - address prevOracles, + address oraclesV1, address _rewardEthToken, address _pool, address _poolValidators, @@ -76,13 +66,19 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { ) external override initializer { + require(admin != address(0), "Pool: invalid admin address"); + require(_rewardEthToken != address(0), "Pool: invalid RewardEthToken address"); + require(_pool != address(0), "Pool: invalid Pool address"); + require(_poolValidators != address(0), "Pool: invalid PoolValidators address"); + require(_merkleDistributor != address(0), "Pool: invalid MerkleDistributor address"); + __OwnablePausableUpgradeable_init(admin); // migrate data from previous Oracles contract - rewardsNonce._value = IPrevOracles(prevOracles).currentNonce().add(1000); - uint256 oraclesCount = IAccessControlUpgradeable(prevOracles).getRoleMemberCount(ORACLE_ROLE); + rewardsNonce._value = IOraclesV1(oraclesV1).currentNonce().add(1000); + uint256 oraclesCount = AccessControlUpgradeable(oraclesV1).getRoleMemberCount(ORACLE_ROLE); for(uint256 i = 0; i < oraclesCount; i++) { - address oracle = IAccessControlUpgradeable(prevOracles).getRoleMember(ORACLE_ROLE, i); + address oracle = AccessControlUpgradeable(oraclesV1).getRoleMember(ORACLE_ROLE, i); _setupRole(ORACLE_ROLE, oracle); emit OracleAdded(oracle); } @@ -136,7 +132,15 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { */ function isMerkleRootVoting() public override view returns (bool) { uint256 lastRewardBlockNumber = rewardEthToken.lastUpdateBlockNumber(); - return merkleDistributor.lastUpdateBlockNumber() < lastRewardBlockNumber && lastRewardBlockNumber < block.number; + return merkleDistributor.lastUpdateBlockNumber() < lastRewardBlockNumber && lastRewardBlockNumber != block.number; + } + + /** + * @dev Function for checking whether number of signatures is enough to update the value. + * @param signaturesCount - number of signatures. + */ + function isEnoughSignatures(uint256 signaturesCount) internal view returns (bool) { + return signaturesCount.mul(3) > getRoleMemberCount(ORACLE_ROLE).mul(2); } /** @@ -147,12 +151,9 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { uint256 activatedValidators, bytes[] calldata signatures ) - external override whenNotPaused + external override onlyOracle whenNotPaused { - require( - signatures.length.mul(3) > getRoleMemberCount(ORACLE_ROLE).mul(2), - "Oracles: invalid number of signatures" - ); + require(isEnoughSignatures(signatures.length), "Oracles: invalid number of signatures"); // calculate candidate ID hash uint256 nonce = rewardsNonce.current(); @@ -194,13 +195,10 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { string calldata merkleProofs, bytes[] calldata signatures ) - external override whenNotPaused + external override onlyOracle whenNotPaused { require(isMerkleRootVoting(), "Oracles: too early"); - require( - signatures.length.mul(3) > getRoleMemberCount(ORACLE_ROLE).mul(2), - "Oracles: invalid number of signatures" - ); + require(isEnoughSignatures(signatures.length), "Oracles: invalid number of signatures"); // calculate candidate ID hash uint256 nonce = rewardsNonce.current(); @@ -239,10 +237,7 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { ) external override whenNotPaused { - require( - signatures.length.mul(3) > getRoleMemberCount(ORACLE_ROLE).mul(2), - "Oracles: invalid number of signatures" - ); + require(isEnoughSignatures(signatures.length), "Oracles: invalid number of signatures"); // calculate candidate ID hash uint256 nonce = validatorsNonce.current(); @@ -281,10 +276,7 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { ) external override whenNotPaused { - require( - signatures.length.mul(3) > getRoleMemberCount(ORACLE_ROLE).mul(2), - "Oracles: invalid number of signatures" - ); + require(isEnoughSignatures(signatures.length), "Oracles: invalid number of signatures"); // calculate candidate ID hash uint256 nonce = validatorsNonce.current(); diff --git a/contracts/interfaces/IOracles.sol b/contracts/interfaces/IOracles.sol index 3ed56f28..e0c8e4df 100644 --- a/contracts/interfaces/IOracles.sol +++ b/contracts/interfaces/IOracles.sol @@ -94,7 +94,7 @@ interface IOracles { /** * @dev Constructor for initializing the Oracles contract. * @param admin - address of the contract admin. - * @param prevOracles - address of the previous Oracles contract. + * @param oraclesV1 - address of the Oracles V1 contract. * @param _rewardEthToken - address of the RewardEthToken contract. * @param _pool - address of the Pool contract. * @param _poolValidators - address of the PoolValidators contract. @@ -102,7 +102,7 @@ interface IOracles { */ function initialize( address admin, - address prevOracles, + address oraclesV1, address _rewardEthToken, address _pool, address _poolValidators, diff --git a/contracts/interfaces/IOraclesV1.sol b/contracts/interfaces/IOraclesV1.sol new file mode 100644 index 00000000..00de7469 --- /dev/null +++ b/contracts/interfaces/IOraclesV1.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: AGPL-3.0-only + +pragma solidity 0.7.5; + +pragma abicoder v2; + +/** + * @dev Interface of the Oracles V1 contract. + */ +interface IOraclesV1 { + /** + * @dev Function for retrieving current rewards nonce. + */ + function currentNonce() external view returns (uint256); +} diff --git a/test/oracles/Oracles.test.js b/test/oracles/Oracles.test.js index d7d049fa..f1869239 100644 --- a/test/oracles/Oracles.test.js +++ b/test/oracles/Oracles.test.js @@ -221,6 +221,20 @@ contract('Oracles', ([_, anyone, ...accounts]) => { ); }); + it('fails to submit without oracle role assigned', async () => { + await expectRevert( + oracles.submitRewards( + newTotalRewards, + newActivatedValidators, + signatures, + { + from: anyone, + } + ), + 'Oracles: access denied' + ); + }); + it('submits data with enough signatures', async () => { let receipt = await oracles.submitRewards( newTotalRewards, @@ -352,6 +366,15 @@ contract('Oracles', ([_, anyone, ...accounts]) => { ); }); + it('fails to submit without oracle role assigned', async () => { + await expectRevert( + oracles.submitMerkleRoot(merkleRoot, merkleProofs, signatures, { + from: anyone, + }), + 'Oracles: access denied' + ); + }); + it('submits data with enough signatures', async () => { let receipt = await oracles.submitMerkleRoot( merkleRoot, @@ -377,13 +400,6 @@ contract('Oracles', ([_, anyone, ...accounts]) => { }); it('fails to vote for total rewards and merkle root in same block', async () => { - // clean up oracles - for (let i = 1; i < oracleAccounts.length; i++) { - await oracles.removeOracle(oracleAccounts[i], { - from: admin, - }); - } - // deploy mocked oracle let mockedOracle = await MulticallMock.new( oracles.address, @@ -391,6 +407,9 @@ contract('Oracles', ([_, anyone, ...accounts]) => { contracts.rewardEthToken, merkleDistributor.address ); + await oracles.addOracle(mockedOracle.address, { + from: admin, + }); let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); let activatedValidators = await pool.activatedValidators(); @@ -406,10 +425,10 @@ contract('Oracles', ([_, anyone, ...accounts]) => { ] ); candidateId = keccak256(encoded); - - let rewardsSignatures = [ - await web3.eth.sign(candidateId, oracleAccounts[0]), - ]; + let rewardSignatures = []; + for (const oracleAccount of oracleAccounts) { + rewardSignatures.push(await web3.eth.sign(candidateId, oracleAccount)); + } // create merkle root signatures currentNonce = await oracles.currentRewardsNonce(); @@ -418,17 +437,19 @@ contract('Oracles', ([_, anyone, ...accounts]) => { [currentNonce.toString(), merkleProofs, merkleRoot] ); candidateId = keccak256(encoded); - - let merkleRootSignatures = [ - await web3.eth.sign(candidateId, oracleAccounts[0]), - ]; + let merkleRootSignatures = []; + for (const oracleAccount of oracleAccounts) { + merkleRootSignatures.push( + await web3.eth.sign(candidateId, oracleAccount) + ); + } await expectRevert( mockedOracle.updateTotalRewardsAndMerkleRoot( { totalRewards: totalRewards.toString(), activatedValidators: activatedValidators.toString(), - signatures: rewardsSignatures, + signatures: rewardSignatures, }, { merkleRoot, diff --git a/test/oracles/upgrading.test.js b/test/oracles/upgrading.test.js index bdefdc34..fb8099c4 100644 --- a/test/oracles/upgrading.test.js +++ b/test/oracles/upgrading.test.js @@ -8,7 +8,7 @@ const { } = require('../utils'); const Oracles = artifacts.require('Oracles'); -const PrevOracles = artifacts.require('IPrevOracles'); +const PrevOracles = artifacts.require('IOraclesV1'); contract('Oracles (upgrading)', ([anyone]) => { let admin = contractSettings.admin; From b6e44677cbf455479bf7b181313879954de25ba6 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Wed, 10 Nov 2021 14:16:52 +0200 Subject: [PATCH 25/55] Apply MerkleDistributor fixes --- contracts/merkles/MerkleDistributor.sol | 10 +++- test/MerkleDistributor.test.js | 74 +++++++++++++++++++------ test/utils.js | 18 +++--- 3 files changed, 76 insertions(+), 26 deletions(-) diff --git a/contracts/merkles/MerkleDistributor.sol b/contracts/merkles/MerkleDistributor.sol index 9ffca61e..4c4bd194 100644 --- a/contracts/merkles/MerkleDistributor.sol +++ b/contracts/merkles/MerkleDistributor.sol @@ -39,7 +39,10 @@ contract MerkleDistributor is IMerkleDistributor, OwnablePausableUpgradeable { * @dev See {IMerkleDistributor-upgrade}. */ function upgrade(address _oracles) external override onlyAdmin whenPaused { - require(address(oracles) == 0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514, "MerkleDistributor: already upgraded"); + require( + _oracles != address(0) && address(oracles) == 0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514, + "MerkleDistributor: invalid Oracles address" + ); oracles = IOracles(_oracles); } @@ -70,7 +73,7 @@ contract MerkleDistributor is IMerkleDistributor, OwnablePausableUpgradeable { uint256 amount, uint256 durationInBlocks ) - external override onlyAdmin + external override onlyAdmin whenNotPaused { require(amount > 0, "MerkleDistributor: invalid amount"); @@ -92,7 +95,7 @@ contract MerkleDistributor is IMerkleDistributor, OwnablePausableUpgradeable { uint256 amount, string calldata rewardsLink ) - external override onlyAdmin + external override onlyAdmin whenNotPaused { require(amount > 0, "MerkleDistributor: invalid amount"); @@ -132,6 +135,7 @@ contract MerkleDistributor is IMerkleDistributor, OwnablePausableUpgradeable { ) external override whenNotPaused { + require(account != address(0), "MerkleDistributor: invalid account"); address _rewardEthToken = rewardEthToken; // gas savings require( IRewardEthToken(_rewardEthToken).lastUpdateBlockNumber() < lastUpdateBlockNumber, diff --git a/test/MerkleDistributor.test.js b/test/MerkleDistributor.test.js index a9f1848d..ed6cb388 100644 --- a/test/MerkleDistributor.test.js +++ b/test/MerkleDistributor.test.js @@ -211,6 +211,23 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { ); }); + it('fails to distribute when paused', async () => { + await merkleDistributor.pause({ from: admin }); + await expectRevert( + merkleDistributor.distributePeriodically( + admin, + token.address, + beneficiary, + amount, + durationInBlocks, + { + from: admin, + } + ), + 'Pausable: paused' + ); + }); + it('admin can distribute tokens', async () => { await token.approve(merkleDistributor.address, amount, { from: admin, @@ -310,6 +327,23 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { ); }); + it('fails to distribute when paused', async () => { + await merkleDistributor.pause({ from: admin }); + await expectRevert( + merkleDistributor.distributeOneTime( + admin, + origin, + token.address, + amount, + rewardsLink, + { + from: admin, + } + ), + 'Pausable: paused' + ); + }); + it('admin can distribute tokens', async () => { await token.approve(merkleDistributor.address, amount, { from: admin, @@ -573,13 +607,6 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { oracleAccounts, }); - // clean up oracles - for (let i = 1; i < oracleAccounts.length; i++) { - await oracles.removeOracle(oracleAccounts[i], { - from: admin, - }); - } - // deploy mocked oracle multicallMock = await MulticallMock.new( oracles.address, @@ -587,6 +614,9 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { rewardEthToken.address, merkleDistributor.address ); + await oracles.addOracle(multicallMock.address, { + from: admin, + }); await pool.stake({ from: anyone, @@ -616,9 +646,12 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { ] ); let candidateId = hexlify(keccak256(encoded)); - rewardsSignatures = [ - await web3.eth.sign(candidateId, oracleAccounts[0]), - ]; + rewardsSignatures = []; + for (const oracleAccount of oracleAccounts) { + rewardsSignatures.push( + await web3.eth.sign(candidateId, oracleAccount) + ); + } // create merkle root signature encoded = defaultAbiCoder.encode( @@ -626,9 +659,12 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { [currentNonce.add(new BN(1)).toString(), merkleProofs, merkleRoot] ); candidateId = hexlify(keccak256(encoded)); - merkleRootSignatures = [ - await web3.eth.sign(candidateId, oracleAccounts[0]), - ]; + merkleRootSignatures = []; + for (const oracleAccount of oracleAccounts) { + merkleRootSignatures.push( + await web3.eth.sign(candidateId, oracleAccount) + ); + } }); it('cannot claim after total rewards update in the same block', async () => { @@ -680,7 +716,10 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { await oracles.submitRewards( totalRewards, activatedValidators, - rewardsSignatures + rewardsSignatures, + { + from: oracleAccounts[0], + } ); await expectRevert( multicallMock.claimAndUpdateMerkleRoot( @@ -702,7 +741,10 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { await oracles.submitRewards( totalRewards, activatedValidators, - rewardsSignatures + rewardsSignatures, + { + from: oracleAccounts[0], + } ); const { index, amounts, tokens, proof } = merkleProofs[account1]; await multicallMock.updateMerkleRootAndClaim( @@ -745,7 +787,7 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { merkleDistributor.upgrade(oracles.address, { from: admin, }), - 'MerkleDistributor: already upgraded' + 'MerkleDistributor: invalid Oracles address' ); }); }); diff --git a/test/utils.js b/test/utils.js index 197fdaf8..cd041add 100644 --- a/test/utils.js +++ b/test/utils.js @@ -285,7 +285,7 @@ async function registerValidator({ initAmount = ether('1'), depositDataIndex = 0, }) { - if ((await validators.getOperator(operator))[2] !== constants.ZERO_BYTES32) { + if ((await validators.getOperator(operator))[0] === constants.ZERO_BYTES32) { await validators.addOperator( operator, initializeMerkleRoot, @@ -296,13 +296,17 @@ async function registerValidator({ from: admin, } ); - } - if ((await validators.collaterals(operator)).lt(initAmount)) { - await validators.commitOperator({ - value: initAmount, - from: operator, - }); + if ((await validators.collaterals(operator)).lt(initAmount)) { + await validators.commitOperator({ + value: initAmount, + from: operator, + }); + } else { + await validators.commitOperator({ + from: operator, + }); + } } let { From c93a448b8f943f019a5a9b985100ce8458446009 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Wed, 10 Nov 2021 14:20:02 +0200 Subject: [PATCH 26/55] Apply Roles.sol fixes --- abi/Roles.json | 13 +++++++++++++ contracts/Roles.sol | 6 ++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/abi/Roles.json b/abi/Roles.json index b8792e46..d33a91c0 100644 --- a/abi/Roles.json +++ b/abi/Roles.json @@ -177,6 +177,19 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [], + "name": "MAX_PERCENT", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [], "name": "PAUSER_ROLE", diff --git a/contracts/Roles.sol b/contracts/Roles.sol index fa2314a2..8f1ba20f 100644 --- a/contracts/Roles.sol +++ b/contracts/Roles.sol @@ -11,6 +11,8 @@ import "./interfaces/IRoles.sol"; * @dev Roles contract assigns roles to the accounts for the rewards distribution. */ contract Roles is IRoles, OwnablePausableUpgradeable { + uint256 public constant MAX_PERCENT = 1e4; + /** * @dev See {IRoles-initialize}. */ @@ -23,7 +25,7 @@ contract Roles is IRoles, OwnablePausableUpgradeable { */ function setOperator(address account, uint256 revenueShare) external override onlyAdmin whenNotPaused { require(account != address(0), "Roles: account is the zero address"); - require(revenueShare <= 1e4, "Roles: invalid revenue share"); + require(revenueShare <= MAX_PERCENT, "Roles: invalid revenue share"); emit OperatorUpdated(account, revenueShare); } @@ -40,7 +42,7 @@ contract Roles is IRoles, OwnablePausableUpgradeable { */ function setPartner(address account, uint256 revenueShare) external override onlyAdmin whenNotPaused { require(account != address(0), "Roles: account is the zero address"); - require(revenueShare <= 1e4, "Roles: invalid revenue share"); + require(revenueShare <= MAX_PERCENT, "Roles: invalid revenue share"); emit PartnerUpdated(account, revenueShare); } From 175f767eb801a4e6878bee323d0060dfdd917990 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Wed, 10 Nov 2021 14:23:10 +0200 Subject: [PATCH 27/55] Apply fixes for PoolValidators.sol, RewardEthToken.sol --- contracts/pool/PoolValidators.sol | 2 ++ contracts/tokens/RewardEthToken.sol | 2 ++ test/pool/upgrading.test.js | 2 +- test/tokens/RewardEthToken.test.js | 44 ++++++++++++++--------------- test/tokens/StakedEthToken.test.js | 21 +++++++------- 5 files changed, 36 insertions(+), 35 deletions(-) diff --git a/contracts/pool/PoolValidators.sol b/contracts/pool/PoolValidators.sol index 817812e0..7080d516 100644 --- a/contracts/pool/PoolValidators.sol +++ b/contracts/pool/PoolValidators.sol @@ -87,6 +87,8 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran // load operator Operator storage operator = operators[_operator]; require(!operator.locked, "PoolValidators: operator locked"); + require(operator.initializeMerkleRoot != initializeMerkleRoot, "PoolValidators: same initialize merkle root"); + require(operator.finalizeMerkleRoot != finalizeMerkleRoot, "PoolValidators: same finalize merkle root"); // update operator operator.initializeMerkleRoot = initializeMerkleRoot; diff --git a/contracts/tokens/RewardEthToken.sol b/contracts/tokens/RewardEthToken.sol index 59836fe7..341150fb 100644 --- a/contracts/tokens/RewardEthToken.sol +++ b/contracts/tokens/RewardEthToken.sol @@ -217,6 +217,7 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per if (periodRewards == 0) { lastUpdateBlockNumber = block.number; emit RewardsUpdated(0, newTotalRewards, rewardPerToken, 0, 0); + return; } // calculate protocol reward and new reward per token amount @@ -267,6 +268,7 @@ contract RewardEthToken is IRewardEthToken, OwnablePausableUpgradeable, ERC20Per */ function claim(address account, uint256 amount) external override { require(msg.sender == merkleDistributor, "RewardEthToken: access denied"); + require(account != address(0), "RewardEthToken: invalid account"); // update checkpoints, transfer amount from distributor to account uint128 _rewardPerToken = rewardPerToken; diff --git a/test/pool/upgrading.test.js b/test/pool/upgrading.test.js index 4a61a2c9..ff2df257 100644 --- a/test/pool/upgrading.test.js +++ b/test/pool/upgrading.test.js @@ -42,7 +42,7 @@ contract('Pool (upgrading)', ([sender]) => { await pool.pause({ from: admin }); await expectRevert( pool.upgrade(poolValidators, oracles, { from: admin }), - 'Pool: already upgraded' + 'Pool: invalid PoolValidators address' ); }); }); diff --git a/test/tokens/RewardEthToken.test.js b/test/tokens/RewardEthToken.test.js index a38800bb..d10fbba0 100644 --- a/test/tokens/RewardEthToken.test.js +++ b/test/tokens/RewardEthToken.test.js @@ -33,7 +33,8 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { totalSupply, pool, oracles, - oracleAccounts; + oracleAccounts, + protocolFeeRecipient; after(async () => stopImpersonatingAccount(admin)); @@ -383,13 +384,6 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { }); it('cannot transfer rewards after total rewards update in the same block', async () => { - // clean up oracles - for (let i = 1; i < oracleAccounts.length; i++) { - await oracles.removeOracle(oracleAccounts[i], { - from: admin, - }); - } - // deploy mocked oracle let multicallMock = await MulticallMock.new( oracles.address, @@ -397,15 +391,18 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { rewardEthToken.address, merkleDistributor ); + await oracles.addOracle(multicallMock.address, { + from: admin, + }); await rewardEthToken.approve(multicallMock.address, rewardAmount1, { from: sender1, }); + let currentNonce = await oracles.currentRewardsNonce(); let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); let activatedValidators = await pool.activatedValidators(); - - let currentNonce = await oracles.currentRewardsNonce(); + let signatures = []; let encoded = defaultAbiCoder.encode( ['uint256', 'uint256', 'uint256'], [ @@ -415,14 +412,16 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { ] ); let candidateId = hexlify(keccak256(encoded)); - let signature = await web3.eth.sign(candidateId, oracleAccounts[0]); + for (const oracleAccount of oracleAccounts) { + signatures.push(await web3.eth.sign(candidateId, oracleAccount)); + } await expectRevert( multicallMock.updateTotalRewardsAndTransferRewards( totalRewards, activatedValidators, sender2, - [signature], + signatures, { from: sender1, } @@ -432,13 +431,6 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { }); it('can transfer rewards before total rewards update in the same block', async () => { - // clean up oracles - for (let i = 1; i < oracleAccounts.length; i++) { - await oracles.removeOracle(oracleAccounts[i], { - from: admin, - }); - } - // deploy mocked multicall let multicallMock = await MulticallMock.new( oracles.address, @@ -446,15 +438,18 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { rewardEthToken.address, merkleDistributor ); + await oracles.addOracle(multicallMock.address, { + from: admin, + }); await rewardEthToken.approve(multicallMock.address, rewardAmount1, { from: sender1, }); + let currentNonce = await oracles.currentRewardsNonce(); let totalRewards = (await rewardEthToken.totalRewards()).add(ether('10')); let activatedValidators = await pool.activatedValidators(); - - let currentNonce = await oracles.currentRewardsNonce(); + let signatures = []; let encoded = defaultAbiCoder.encode( ['uint256', 'uint256', 'uint256'], [ @@ -464,12 +459,15 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { ] ); let candidateId = hexlify(keccak256(encoded)); - let signature = await web3.eth.sign(candidateId, oracleAccounts[0]); + for (const oracleAccount of oracleAccounts) { + signatures.push(await web3.eth.sign(candidateId, oracleAccount)); + } + let receipt = await multicallMock.transferRewardsAndUpdateTotalRewards( totalRewards, activatedValidators, sender2, - [signature], + signatures, { from: sender1, } diff --git a/test/tokens/StakedEthToken.test.js b/test/tokens/StakedEthToken.test.js index bf4cc88e..bd9bb93b 100644 --- a/test/tokens/StakedEthToken.test.js +++ b/test/tokens/StakedEthToken.test.js @@ -36,7 +36,7 @@ contract('StakedEthToken', (accounts) => { oracleAccounts, activatedValidators, totalRewards, - signature; + signatures; beforeEach(async () => { await impersonateAccount(admin); @@ -65,8 +65,11 @@ contract('StakedEthToken', (accounts) => { totalRewards.toString(), ] ); + signatures = []; let candidateId = hexlify(keccak256(encoded)); - signature = await web3.eth.sign(candidateId, oracleAccounts[0]); + for (const oracleAccount of oracleAccounts) { + signatures.push(await web3.eth.sign(candidateId, oracleAccount)); + } totalSupply = await stakedEthToken.totalSupply(); }); @@ -372,13 +375,6 @@ contract('StakedEthToken', (accounts) => { }); it('cannot transfer staked amount after total rewards update in the same block', async () => { - // clean up oracles - for (let i = 1; i < oracleAccounts.length; i++) { - await oracles.removeOracle(oracleAccounts[i], { - from: admin, - }); - } - // deploy mocked multicall let multicallMock = await MulticallMock.new( oracles.address, @@ -386,6 +382,9 @@ contract('StakedEthToken', (accounts) => { contracts.rewardEthToken, merkleDistributor ); + await oracles.addOracle(multicallMock.address, { + from: admin, + }); await stakedEthToken.approve(multicallMock.address, value, { from: sender1, @@ -396,7 +395,7 @@ contract('StakedEthToken', (accounts) => { totalRewards, activatedValidators, sender2, - [signature], + signatures, { from: sender1, } @@ -429,7 +428,7 @@ contract('StakedEthToken', (accounts) => { totalRewards, activatedValidators, sender2, - [signature], + signatures, { from: sender1, } From c8273b44d70dd56305d756eee970284e43ecffee Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Wed, 10 Nov 2021 14:26:03 +0200 Subject: [PATCH 28/55] Update circleci node version --- .circleci/config.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 98f55f9c..1f9fa82c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 executors: default: docker: - - image: circleci/node:12 + - image: circleci/node:14 working_directory: /tmp/workspace jobs: From a1e235e0f9fd406d4153ed6996e0e1b0f3ea689d Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Wed, 10 Nov 2021 14:30:37 +0200 Subject: [PATCH 29/55] Remove redundant variable --- test/tokens/RewardEthToken.test.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/tokens/RewardEthToken.test.js b/test/tokens/RewardEthToken.test.js index d10fbba0..fdd30075 100644 --- a/test/tokens/RewardEthToken.test.js +++ b/test/tokens/RewardEthToken.test.js @@ -33,8 +33,7 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { totalSupply, pool, oracles, - oracleAccounts, - protocolFeeRecipient; + oracleAccounts; after(async () => stopImpersonatingAccount(admin)); @@ -50,7 +49,6 @@ contract('RewardEthToken', ([sender, merkleDistributor, ...accounts]) => { pool = await Pool.at(contracts.pool); oracles = await Oracles.at(contracts.oracles); oracleAccounts = await setupOracleAccounts({ oracles, admin, accounts }); - protocolFeeRecipient = await rewardEthToken.protocolFeeRecipient(); totalSupply = await rewardEthToken.totalSupply(); await rewardEthToken.setProtocolFee(protocolFee, { from: admin }); }); From d0da6bffab7390d0624c0e39d08d9b1bafdf4d35 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Wed, 10 Nov 2021 18:18:28 +0200 Subject: [PATCH 30/55] Fix RewardEthToken upgrade test --- test/tokens/upgrading.test.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/tokens/upgrading.test.js b/test/tokens/upgrading.test.js index c05ff9b1..1912a193 100644 --- a/test/tokens/upgrading.test.js +++ b/test/tokens/upgrading.test.js @@ -49,7 +49,7 @@ contract('RewardEthToken (upgrading)', ([anyone]) => { rewardEthToken.upgrade(oracles, { from: admin, }), - 'RewardEthToken: already upgraded' + 'Pool: invalid Oracles address' ); }); }); From 63d0cccb5e238ae47831bead683e0fc72620eaaf Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Fri, 12 Nov 2021 11:25:23 +0200 Subject: [PATCH 31/55] Fix StakedEthToken test --- test/tokens/StakedEthToken.test.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/test/tokens/StakedEthToken.test.js b/test/tokens/StakedEthToken.test.js index bd9bb93b..d1e2faec 100644 --- a/test/tokens/StakedEthToken.test.js +++ b/test/tokens/StakedEthToken.test.js @@ -405,13 +405,6 @@ contract('StakedEthToken', (accounts) => { }); it('can transfer staked amount before total rewards update in the same block', async () => { - // clean up oracles - for (let i = 1; i < oracleAccounts.length; i++) { - await oracles.removeOracle(oracleAccounts[i], { - from: admin, - }); - } - // deploy mocked multicall let multicallMock = await MulticallMock.new( oracles.address, @@ -419,6 +412,9 @@ contract('StakedEthToken', (accounts) => { contracts.rewardEthToken, merkleDistributor ); + await oracles.addOracle(multicallMock.address, { + from: admin, + }); await stakedEthToken.approve(multicallMock.address, value, { from: sender1, From 31c8fca0336f5885c3d5e7636f6b74c5e742246f Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Wed, 24 Nov 2021 13:52:38 +0200 Subject: [PATCH 32/55] Update goerli deployment --- .openzeppelin/goerli.json | 74 +++++++++++++++++++-------------------- deployments/settings.js | 6 ++-- networks/goerli.md | 12 +++---- 3 files changed, 46 insertions(+), 46 deletions(-) diff --git a/.openzeppelin/goerli.json b/.openzeppelin/goerli.json index aef67f8b..c831f9d3 100755 --- a/.openzeppelin/goerli.json +++ b/.openzeppelin/goerli.json @@ -46,18 +46,18 @@ "kind": "transparent" }, { - "address": "0xe3daeBE5D6Cd72372d03059BF8A2d9A53ABBdb8f", - "txHash": "0xfd2d2f8d1b4dd575ac88238b1705a812d0222e38e11675ee2561ce1ec42c6565", + "address": "0x0d92156861a0BC7037cC21470327Bd3Bc750EB1D", + "txHash": "0x077b6fc63754433799822e20eb6b42f6b213f296f2a2bb80ef4fb402ede6161a", "kind": "transparent" }, { - "address": "0x696b622baFA1747333BeE5D1142bb530E41d1063", - "txHash": "0xe2e64089029fda80229418f8c74128ed1feba0939209394000e703186ce1c9f6", + "address": "0x06b0C9476315634dCc59AA3F3f7d5Df6feCbAa90", + "txHash": "0x133190b18ed0ac25af41a156eabaf3c82aa470c87ed9266c896f99a1ef858c10", "kind": "transparent" }, { - "address": "0x039FF733aA9736D66bFA96aD61Fa635E97464D66", - "txHash": "0xba8a985fd5618230288732e864561667673042b04dd33118999f9b149863d68e", + "address": "0x81aaa59d7d1000A56326Bb577DEbc287Cbd351cC", + "txHash": "0x2e40569f3f18456efca62180037dfb98be4746ad9161cf77dc0107dc11c6fda3", "kind": "transparent" } ], @@ -2552,9 +2552,9 @@ } } }, - "3ed406b186d307f07f9bddccd020038668a000ca60bf30e827cde815e0604f80": { - "address": "0x29c364B7e5D65e24F73d0c2468aA6B69bB5D024e", - "txHash": "0x1a2f667cd1c36987fb2480e44ab063a033d7f128da6fd2d2e64c343bb76262b1", + "d377dd09cee01cc34566867233cd0093a8d4210bca54a545b32d225e878fbefb": { + "address": "0x08a242f9734eC8180b547fC166F529f62649f5F5", + "txHash": "0x3691e04a55d3e4628de2974796ea405d36799a6862c1a0829938727492959771", "layout": { "storage": [ { @@ -2614,7 +2614,7 @@ { "contract": "PoolValidators", "label": "validatorStatuses", - "type": "t_mapping(t_bytes32,t_enum(ValidatorStatus)6690)", + "type": "t_mapping(t_bytes32,t_enum(ValidatorStatus)6737)", "src": "contracts/pool/PoolValidators.sol:24" }, { @@ -2626,13 +2626,13 @@ { "contract": "PoolValidators", "label": "operators", - "type": "t_mapping(t_address,t_struct(Operator)6674_storage)", + "type": "t_mapping(t_address,t_struct(Operator)6721_storage)", "src": "contracts/pool/PoolValidators.sol:30" }, { "contract": "PoolValidators", "label": "pool", - "type": "t_contract(IPool)6604", + "type": "t_contract(IPool)6651", "src": "contracts/pool/PoolValidators.sol:33" }, { @@ -2643,13 +2643,13 @@ } ], "types": { - "t_mapping(t_bytes32,t_enum(ValidatorStatus)6690)": { + "t_mapping(t_bytes32,t_enum(ValidatorStatus)6737)": { "label": "mapping(bytes32 => enum IPoolValidators.ValidatorStatus)" }, "t_bytes32": { "label": "bytes32" }, - "t_enum(ValidatorStatus)6690": { + "t_enum(ValidatorStatus)6737": { "label": "enum IPoolValidators.ValidatorStatus", "members": [ "Uninitialized", @@ -2667,10 +2667,10 @@ "t_uint256": { "label": "uint256" }, - "t_mapping(t_address,t_struct(Operator)6674_storage)": { + "t_mapping(t_address,t_struct(Operator)6721_storage)": { "label": "mapping(address => struct IPoolValidators.Operator)" }, - "t_struct(Operator)6674_storage": { + "t_struct(Operator)6721_storage": { "label": "struct IPoolValidators.Operator", "members": [ { @@ -2694,7 +2694,7 @@ "t_bool": { "label": "bool" }, - "t_contract(IPool)6604": { + "t_contract(IPool)6651": { "label": "contract IPool" }, "t_array(t_uint256)49_storage": { @@ -2750,9 +2750,9 @@ } } }, - "5224a7ce19b6cc5d5de4321bcd9e0c2db26f5238a019a580242aeb8cce83c586": { - "address": "0xE03B63730a917757c8BbC8Bbe8D0f7A57e7075d2", - "txHash": "0x7cfa36bc27d8a1c589fdae2fbcca07bab1f9b7c0d3d8d9c820f89c7e68d860de", + "80825b74c6a6f5cc9b67b8563f272012ebc5da55f88f626617229b6f56169c85": { + "address": "0x91b288E29feb04C9fD319f94e0ee75CE3f4DE17a", + "txHash": "0x3da45345456535f568dd7ee045d887557102a1666b404a866e48aef644de6d83", "layout": { "storage": [ { @@ -2801,37 +2801,37 @@ "contract": "Oracles", "label": "rewardsNonce", "type": "t_struct(Counter)1781_storage", - "src": "contracts/Oracles.sol:49" + "src": "contracts/Oracles.sol:31" }, { "contract": "Oracles", "label": "validatorsNonce", "type": "t_struct(Counter)1781_storage", - "src": "contracts/Oracles.sol:52" + "src": "contracts/Oracles.sol:34" }, { "contract": "Oracles", "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)6987", - "src": "contracts/Oracles.sol:55" + "type": "t_contract(IRewardEthToken)7034", + "src": "contracts/Oracles.sol:37" }, { "contract": "Oracles", "label": "pool", - "type": "t_contract(IPool)6604", - "src": "contracts/Oracles.sol:58" + "type": "t_contract(IPool)6651", + "src": "contracts/Oracles.sol:40" }, { "contract": "Oracles", "label": "poolValidators", - "type": "t_contract(IPoolValidators)6831", - "src": "contracts/Oracles.sol:61" + "type": "t_contract(IPoolValidators)6878", + "src": "contracts/Oracles.sol:43" }, { "contract": "Oracles", "label": "merkleDistributor", - "type": "t_contract(IMerkleDistributor)6059", - "src": "contracts/Oracles.sol:64" + "type": "t_contract(IMerkleDistributor)6095", + "src": "contracts/Oracles.sol:46" } ], "types": { @@ -2847,16 +2847,16 @@ "t_uint256": { "label": "uint256" }, - "t_contract(IRewardEthToken)6987": { + "t_contract(IRewardEthToken)7034": { "label": "contract IRewardEthToken" }, - "t_contract(IPool)6604": { + "t_contract(IPool)6651": { "label": "contract IPool" }, - "t_contract(IPoolValidators)6831": { + "t_contract(IPoolValidators)6878": { "label": "contract IPoolValidators" }, - "t_contract(IMerkleDistributor)6059": { + "t_contract(IMerkleDistributor)6095": { "label": "contract IMerkleDistributor" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { @@ -2918,9 +2918,9 @@ } } }, - "94f527d3d9ee34ef4e4b50eb45fa61007d2ce4bb566d8cdc28b18e4a8b869038": { - "address": "0x906447B38C296311aCDb75Be36772F8Fd52D9275", - "txHash": "0x16badf54367972f9a9b26e5214afe873f82c2a4091a63038d21cb576eab8a2c1", + "c16e4b952994fa08e80e4e9254ad6dc7b05d9eb6dc641438f4281b10e5e5ad70": { + "address": "0xc20d2dD754496fA82Bfdd580863ca231a65C4A8A", + "txHash": "0xf2cc0ab1140c8aadba3fa79eaddca7b41b897c4c76cebd7712ec8106f3b623c5", "layout": { "storage": [ { diff --git a/deployments/settings.js b/deployments/settings.js index c0613acb..f9a857a1 100644 --- a/deployments/settings.js +++ b/deployments/settings.js @@ -4,9 +4,9 @@ let contracts, contractSettings; if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { contracts = { validators: '0xE2F13059454b626e42e04845815E9Ed2E9774bF3', - oracles: '0x696b622baFA1747333BeE5D1142bb530E41d1063', + oracles: '0x06b0C9476315634dCc59AA3F3f7d5Df6feCbAa90', pool: '0x8c1EfEcFb5c4F1099AB0460b5659342943764Df7', - poolValidators: '0xe3daeBE5D6Cd72372d03059BF8A2d9A53ABBdb8f', + poolValidators: '0x0d92156861a0BC7037cC21470327Bd3Bc750EB1D', poolEscrow: '0x040F15C6b5Bfc5F324eCaB5864C38D4e1EEF4218', stakedEthToken: '0x221D9812823DBAb0F1fB40b0D294D9875980Ac19', rewardEthToken: '0x826f88d423440c305D9096cC1581Ae751eFCAfB0', @@ -14,7 +14,7 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { vestingEscrowFactory: '0xbA91cdD484893c1f8F75DB55733ccaDcd0fE5f59', merkleDrop: '0xFc3513E92799F0169e5f14F354d0097E4b790498', merkleDistributor: '0x6Ef0172b79131C66c7012Db3545D637B116feb12', - roles: '0x039FF733aA9736D66bFA96aD61Fa635E97464D66', + roles: '0x3ae8a774CFBBE305520A4a3Be3A480701B66aFba', contractChecker: '0x85ee326f839Bc430655A3fad447837072ef52C2F', proxyAdmin: '0xbba3f4dDD4F705aD2028ee2da64fF3166bDe8cA8', }; diff --git a/networks/goerli.md b/networks/goerli.md index 4eda8551..6d1ed0ac 100755 --- a/networks/goerli.md +++ b/networks/goerli.md @@ -17,8 +17,8 @@ ## Pool Validators -- Contract: [0xe3daeBE5D6Cd72372d03059BF8A2d9A53ABBdb8f](https://goerli.etherscan.io/address/0xe3daeBE5D6Cd72372d03059BF8A2d9A53ABBdb8f) -- Transaction: [0xfd2d2f8d1b4dd575ac88238b1705a812d0222e38e11675ee2561ce1ec42c6565](https://goerli.etherscan.io/tx/0xfd2d2f8d1b4dd575ac88238b1705a812d0222e38e11675ee2561ce1ec42c6565) +- Contract: [0x0d92156861a0BC7037cC21470327Bd3Bc750EB1D](https://goerli.etherscan.io/address/0x0d92156861a0BC7037cC21470327Bd3Bc750EB1D) +- Transaction: [0x077b6fc63754433799822e20eb6b42f6b213f296f2a2bb80ef4fb402ede6161a](https://goerli.etherscan.io/tx/0x077b6fc63754433799822e20eb6b42f6b213f296f2a2bb80ef4fb402ede6161a) ## StakedEthToken @@ -37,8 +37,8 @@ ## Oracles -- Contract: [0x696b622baFA1747333BeE5D1142bb530E41d1063](https://goerli.etherscan.io/address/0x696b622baFA1747333BeE5D1142bb530E41d1063) -- Transaction: [0xe2e64089029fda80229418f8c74128ed1feba0939209394000e703186ce1c9f6](https://goerli.etherscan.io/tx/0xe2e64089029fda80229418f8c74128ed1feba0939209394000e703186ce1c9f6) +- Contract: [0x06b0C9476315634dCc59AA3F3f7d5Df6feCbAa90](https://goerli.etherscan.io/address/0x06b0C9476315634dCc59AA3F3f7d5Df6feCbAa90) +- Transaction: [0x133190b18ed0ac25af41a156eabaf3c82aa470c87ed9266c896f99a1ef858c10](https://goerli.etherscan.io/tx/0x133190b18ed0ac25af41a156eabaf3c82aa470c87ed9266c896f99a1ef858c10) ## Vesting Escrow @@ -72,8 +72,8 @@ ## Roles -- Contract: [0x039FF733aA9736D66bFA96aD61Fa635E97464D66](https://goerli.etherscan.io/address/0x039FF733aA9736D66bFA96aD61Fa635E97464D66) -- Transaction: [0xba8a985fd5618230288732e864561667673042b04dd33118999f9b149863d68e](https://goerli.etherscan.io/tx/0xba8a985fd5618230288732e864561667673042b04dd33118999f9b149863d68e) +- Contract: [0x81aaa59d7d1000A56326Bb577DEbc287Cbd351cC](https://goerli.etherscan.io/address/0x81aaa59d7d1000A56326Bb577DEbc287Cbd351cC) +- Transaction: [0x2e40569f3f18456efca62180037dfb98be4746ad9161cf77dc0107dc11c6fda3](https://goerli.etherscan.io/tx/0x2e40569f3f18456efca62180037dfb98be4746ad9161cf77dc0107dc11c6fda3) ## Contract Checker From 02d98fe168721aae5f845ea02393299110995dad Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Sun, 28 Nov 2021 23:52:45 +0200 Subject: [PATCH 33/55] Upgrade contracts to v2 on goerli --- .openzeppelin/goerli.json | 638 +++++++++++++++++++++++++++++++++++++- deployments/index.js | 35 ++- networks/goerli.md | 15 + 3 files changed, 683 insertions(+), 5 deletions(-) diff --git a/.openzeppelin/goerli.json b/.openzeppelin/goerli.json index c831f9d3..2ef971a9 100755 --- a/.openzeppelin/goerli.json +++ b/.openzeppelin/goerli.json @@ -785,8 +785,8 @@ } }, "0b75bd82778d4c360318bd59e498ceb95499641b67ab7608cee37b6c643a88ab": { - "address": "0xAB10021EA5d14156f52414C492bf81859d0b21F6", - "txHash": "0xe71758c8df2927dac4f8c3854cbefd5fa73d95dcde38d68a91718d7a702b0dc5", + "address": "0x5b05Eec8910f8d84e64184E87E936E895DCF144F", + "txHash": "0x8ceb025474907ef8ba97ae81405794ab3d572844e517562715deb54fbbfd2e01", "layout": { "storage": [ { @@ -3028,6 +3028,640 @@ } } } + }, + "b5c308a3cf3175cfb99528f11852118fe7e7f6e1c7efbd4397ccc52062a9c71d": { + "address": "0x6931a7A2B196386005a3E1F9752542227d4f4d64", + "txHash": "0xcefa1a304b4482f2f1b4f3b9ba3f3c033c240b3b334380c0d22677584668bff6", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "Pool", + "label": "activatedValidators", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:29" + }, + { + "contract": "Pool", + "label": "withdrawalCredentials", + "type": "t_bytes32", + "src": "contracts/pool/Pool.sol:32" + }, + { + "contract": "Pool", + "label": "validatorRegistration", + "type": "t_contract(IDepositContract)5938", + "src": "contracts/pool/Pool.sol:35" + }, + { + "contract": "Pool", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)7131", + "src": "contracts/pool/Pool.sol:38" + }, + { + "contract": "Pool", + "label": "validators", + "type": "t_contract(IPoolValidators)6878", + "src": "contracts/pool/Pool.sol:41" + }, + { + "contract": "Pool", + "label": "oracles", + "type": "t_address", + "src": "contracts/pool/Pool.sol:44" + }, + { + "contract": "Pool", + "label": "activations", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "contracts/pool/Pool.sol:47" + }, + { + "contract": "Pool", + "label": "pendingValidators", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:50" + }, + { + "contract": "Pool", + "label": "minActivatingDeposit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:53" + }, + { + "contract": "Pool", + "label": "pendingValidatorsLimit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:56" + } + ], + "types": { + "t_uint256": { + "label": "uint256" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_contract(IDepositContract)5938": { + "label": "contract IDepositContract" + }, + "t_contract(IStakedEthToken)7131": { + "label": "contract IStakedEthToken" + }, + "t_contract(IPoolValidators)6878": { + "label": "contract IPoolValidators" + }, + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "0bce813f7dc44985b2a3a1f814d804b0cc693b9afcf00f66178f485f5737beb2": { + "address": "0x45E444930236De8548CAe187C2CD0BbDE73f5e13", + "txHash": "0x77e1e79fff713a1491d8df971f0026f7f23623fba73a461001253f514beedee5", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "contracts/tokens/ERC20Upgradeable.sol:38" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:40" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:41" + }, + { + "contract": "ERC20Upgradeable", + "label": "_decimals", + "type": "t_uint8", + "src": "contracts/tokens/ERC20Upgradeable.sol:42" + }, + { + "contract": "ERC20Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)44_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:225" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_NAME", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_VERSION", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" + }, + { + "contract": "EIP712Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_nonces", + "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_PERMIT_TYPEHASH", + "type": "t_bytes32", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" + }, + { + "contract": "RewardEthToken", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)7131", + "src": "contracts/tokens/RewardEthToken.sol:25" + }, + { + "contract": "RewardEthToken", + "label": "oracles", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:28" + }, + { + "contract": "RewardEthToken", + "label": "checkpoints", + "type": "t_mapping(t_address,t_struct(Checkpoint)6889_storage)", + "src": "contracts/tokens/RewardEthToken.sol:31" + }, + { + "contract": "RewardEthToken", + "label": "protocolFeeRecipient", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:34" + }, + { + "contract": "RewardEthToken", + "label": "protocolFee", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:37" + }, + { + "contract": "RewardEthToken", + "label": "totalRewards", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:40" + }, + { + "contract": "RewardEthToken", + "label": "rewardPerToken", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:43" + }, + { + "contract": "RewardEthToken", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:46" + }, + { + "contract": "RewardEthToken", + "label": "merkleDistributor", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:49" + }, + { + "contract": "RewardEthToken", + "label": "rewardsDisabled", + "type": "t_mapping(t_address,t_bool)", + "src": "contracts/tokens/RewardEthToken.sol:52" + } + ], + "types": { + "t_contract(IStakedEthToken)7131": { + "label": "contract IStakedEthToken" + }, + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_struct(Checkpoint)6889_storage)": { + "label": "mapping(address => struct IRewardEthToken.Checkpoint)" + }, + "t_struct(Checkpoint)6889_storage": { + "label": "struct IRewardEthToken.Checkpoint", + "members": [ + { + "label": "reward", + "type": "t_uint128" + }, + { + "label": "rewardPerToken", + "type": "t_uint128" + } + ] + }, + "t_uint128": { + "label": "uint128" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)" + }, + "t_bool": { + "label": "bool" + }, + "t_mapping(t_address,t_struct(Counter)1781_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)" + }, + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)" + }, + "t_string_storage": { + "label": "string" + }, + "t_uint8": { + "label": "uint8" + }, + "t_array(t_uint256)44_storage": { + "label": "uint256[44]" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + } + } + } + }, + "80a7c84a2bf97514f0f85d979c61c3c5fa5541bfcafe61af059554399d7659b4": { + "address": "0x3022648376AfBf1f716111a256221043b7a03c1f", + "txHash": "0x7d83609614128ee8c7e68bffff0fefc0d4ad3d681c98d75548f64cf5839aeac0", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "MerkleDistributor", + "label": "merkleRoot", + "type": "t_bytes32", + "src": "contracts/merkles/MerkleDistributor.sol:24" + }, + { + "contract": "MerkleDistributor", + "label": "rewardEthToken", + "type": "t_address", + "src": "contracts/merkles/MerkleDistributor.sol:27" + }, + { + "contract": "MerkleDistributor", + "label": "oracles", + "type": "t_contract(IOracles)6342", + "src": "contracts/merkles/MerkleDistributor.sol:30" + }, + { + "contract": "MerkleDistributor", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/merkles/MerkleDistributor.sol:33" + }, + { + "contract": "MerkleDistributor", + "label": "_claimedBitMap", + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", + "src": "contracts/merkles/MerkleDistributor.sol:36" + } + ], + "types": { + "t_bytes32": { + "label": "bytes32" + }, + "t_address": { + "label": "address" + }, + "t_contract(IOracles)6342": { + "label": "contract IOracles" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(bytes32 => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } } } } diff --git a/deployments/index.js b/deployments/index.js index 64a27840..f94d1fb8 100644 --- a/deployments/index.js +++ b/deployments/index.js @@ -78,7 +78,9 @@ async function upgradeMerkleDistributor(oraclesContractAddress) { let merkleDistributor = MerkleDistributor.attach(contracts.merkleDistributor); // pause - await merkleDistributor.pause(); + if (!(await merkleDistributor.paused())) { + await merkleDistributor.pause(); + } // upgrade MerkleDistributor to new implementation const proxy = await upgrades.upgradeProxy( @@ -103,7 +105,9 @@ async function upgradePool( let pool = await Pool.attach(contracts.pool); // pause - await pool.pause(); + if (!(await pool.paused())) { + await pool.pause(); + } // upgrade Pool to new implementation const proxy = await upgrades.upgradeProxy(contracts.pool, Pool); @@ -125,7 +129,9 @@ async function upgradeRewardEthToken(oraclesContractAddress) { let rewardEthToken = await RewardEthToken.attach(contracts.rewardEthToken); // pause - await rewardEthToken.pause(); + if (!(await rewardEthToken.paused())) { + await rewardEthToken.pause(); + } // upgrade RewardEthToken to new implementation const proxy = await upgrades.upgradeProxy( @@ -144,6 +150,29 @@ async function upgradeRewardEthToken(oraclesContractAddress) { } async function deployContracts() { + const Pool = await ethers.getContractFactory('Pool'); + let impl = await upgrades.prepareUpgrade(contracts.pool, Pool); + log(white(`Deployed Pool implementation contract: ${green(impl)}`)); + + const RewardEthToken = await ethers.getContractFactory('RewardEthToken'); + impl = await upgrades.prepareUpgrade( + contracts.rewardEthToken, + RewardEthToken, + { unsafeAllowRenames: true } + ); + log(white(`Deployed RewardEthToken implementation contract: ${green(impl)}`)); + + const MerkleDistributor = await ethers.getContractFactory( + 'MerkleDistributor' + ); + impl = await upgrades.prepareUpgrade( + contracts.merkleDistributor, + MerkleDistributor + ); + log( + white(`Deployed MerkleDistributor implementation contract: ${green(impl)}`) + ); + const poolValidators = await deployPoolValidators(); log(white(`Deployed Pool Validators contract: ${green(poolValidators)}`)); diff --git a/networks/goerli.md b/networks/goerli.md index 6d1ed0ac..27be8907 100755 --- a/networks/goerli.md +++ b/networks/goerli.md @@ -10,6 +10,11 @@ - Implementation: [0xAB10021EA5d14156f52414C492bf81859d0b21F6](https://goerli.etherscan.io/address/0xAB10021EA5d14156f52414C492bf81859d0b21F6) - Transaction: [0xe71758c8df2927dac4f8c3854cbefd5fa73d95dcde38d68a91718d7a702b0dc5](https://goerli.etherscan.io/tx/0xe71758c8df2927dac4f8c3854cbefd5fa73d95dcde38d68a91718d7a702b0dc5) +### Upgrade to v2.0.0 + +- Implementation: [0x6931a7A2B196386005a3E1F9752542227d4f4d64](https://goerli.etherscan.io/address/0x6931a7A2B196386005a3E1F9752542227d4f4d64) +- Transaction: [0x228165334c43538905f2352b399181f2ae789672a80377a2af256d7142591553](https://goerli.etherscan.io/tx/0x228165334c43538905f2352b399181f2ae789672a80377a2af256d7142591553) + ## Pool Escrow - Contract: [0x040F15C6b5Bfc5F324eCaB5864C38D4e1EEF4218](https://goerli.etherscan.io/address/0x040f15c6b5bfc5f324ecab5864c38d4e1eef4218) @@ -30,6 +35,11 @@ - Contract: [0x826f88d423440c305D9096cC1581Ae751eFCAfB0](https://goerli.etherscan.io/address/0x826f88d423440c305D9096cC1581Ae751eFCAfB0) - Transaction: [0xdf77776425e06f9d045c33315ed8223dd274abf807687158a39bd34556dd01a6](https://goerli.etherscan.io/tx/0xdf77776425e06f9d045c33315ed8223dd274abf807687158a39bd34556dd01a6) +### Upgrade to v2.0.0 + +- Implementation: [0x45E444930236De8548CAe187C2CD0BbDE73f5e13](https://goerli.etherscan.io/address/0x45E444930236De8548CAe187C2CD0BbDE73f5e13) +- Transaction: [0xd380bc2b7825760baab9b63dbf79f21e58d1a2854189b725f3d8dd20c8a2073c](https://goerli.etherscan.io/tx/0xd380bc2b7825760baab9b63dbf79f21e58d1a2854189b725f3d8dd20c8a2073c) + ## StakeWiseToken - Contract: [0x0e2497aACec2755d831E4AFDEA25B4ef1B823855](https://goerli.etherscan.io/address/0x0e2497aACec2755d831E4AFDEA25B4ef1B823855) @@ -70,6 +80,11 @@ - Contract: [0x6Ef0172b79131C66c7012Db3545D637B116feb12](https://goerli.etherscan.io/address/0x6Ef0172b79131C66c7012Db3545D637B116feb12) - Transaction: [0x6f4a9d39776a4eb4cfd41738e0e8718aa240da00d2ceda44b1527b771a978535](https://goerli.etherscan.io/tx/0x6f4a9d39776a4eb4cfd41738e0e8718aa240da00d2ceda44b1527b771a978535) +### Upgrade to v2.0.0 + +- Implementation: [0x3022648376AfBf1f716111a256221043b7a03c1f](https://goerli.etherscan.io/address/0x3022648376AfBf1f716111a256221043b7a03c1f) +- Transaction: [0xa015f12cee81675b2e1254084398ac43c8b799590a1748752daee6ab1d0bc1cb](https://goerli.etherscan.io/tx/0xa015f12cee81675b2e1254084398ac43c8b799590a1748752daee6ab1d0bc1cb) + ## Roles - Contract: [0x81aaa59d7d1000A56326Bb577DEbc287Cbd351cC](https://goerli.etherscan.io/address/0x81aaa59d7d1000A56326Bb577DEbc287Cbd351cC) From e652ffb8148694232c5e62f74f85d0aec6172571 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Mon, 6 Dec 2021 01:42:04 +0200 Subject: [PATCH 34/55] Deploy mainnet contract checker --- deployments/settings.js | 2 +- networks/mainnet.md | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/deployments/settings.js b/deployments/settings.js index f9a857a1..090642f3 100644 --- a/deployments/settings.js +++ b/deployments/settings.js @@ -3,7 +3,6 @@ const hre = require('hardhat'); let contracts, contractSettings; if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { contracts = { - validators: '0xE2F13059454b626e42e04845815E9Ed2E9774bF3', oracles: '0x06b0C9476315634dCc59AA3F3f7d5Df6feCbAa90', pool: '0x8c1EfEcFb5c4F1099AB0460b5659342943764Df7', poolValidators: '0x0d92156861a0BC7037cC21470327Bd3Bc750EB1D', @@ -35,6 +34,7 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { vestingEscrowFactory: '0x7B910cc3D4B42FEFF056218bD56d7700E4ea7dD5', merkleDrop: '0x2AAB6822a1a9f982fd7b0Fe35A5A5b6148eCf4d5', merkleDistributor: '0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20', + contractChecker: '0xFC1fC7257AEA7C7c08A498594DCA97CE5A72fdCB', proxyAdmin: '0x3EB0175dcD67d3AB139aA03165e24AA2188A4C22', }; diff --git a/networks/mainnet.md b/networks/mainnet.md index b8d592b4..3e172151 100644 --- a/networks/mainnet.md +++ b/networks/mainnet.md @@ -101,6 +101,11 @@ - Contract: [0x2AAB6822a1a9f982fd7b0Fe35A5A5b6148eCf4d5](https://etherscan.io/address/0x2AAB6822a1a9f982fd7b0Fe35A5A5b6148eCf4d5) - Transaction: [0x4912a5f2c61be471dc5200ae7a4d08cdb61d32e13d3071e226807346ac9a1c87](https://etherscan.io/tx/0x4912a5f2c61be471dc5200ae7a4d08cdb61d32e13d3071e226807346ac9a1c87) +## Contract Checker + +- Contract: [0x85ee326f839Bc430655A3fad447837072ef52C2F](https://etherscan.io/address/0xfc1fc7257aea7c7c08a498594dca97ce5a72fdcb) +- Transaction: [0xedd8ba44e04a766a79a0ce50a16343e7635483633eac7169cbf4e52f50961ce1](https://etherscan.io/tx/0xedd8ba44e04a766a79a0ce50a16343e7635483633eac7169cbf4e52f50961ce1) + ## Proxy Admin - Contract: [0x3EB0175dcD67d3AB139aA03165e24AA2188A4C22](https://etherscan.io/address/0x3EB0175dcD67d3AB139aA03165e24AA2188A4C22) From add0eb0c52c927b0af71bf9c2ec8a6661c3cebe0 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Fri, 10 Dec 2021 17:45:49 +0200 Subject: [PATCH 35/55] Deploy mainnet contracts --- .openzeppelin/mainnet.json | 1216 ++++++++++++++++++++++++++++++++++-- 1 file changed, 1171 insertions(+), 45 deletions(-) diff --git a/.openzeppelin/mainnet.json b/.openzeppelin/mainnet.json index d7930be3..072464ba 100644 --- a/.openzeppelin/mainnet.json +++ b/.openzeppelin/mainnet.json @@ -1,5 +1,66 @@ { "manifestVersion": "3.2", + "admin": { + "address": "0x3EB0175dcD67d3AB139aA03165e24AA2188A4C22", + "txHash": "0x3490ab3e78ab96f5059d9ea25c009d476eec9d8c4d4d7009bb33f130e5046ab7" + }, + "proxies": [ + { + "address": "0xaAc73D4A26Ae6906aa115118b7840b1F19fcd3A5", + "txHash": "0xdf4df05f116f81e505766f972142acc16479ade3961b7920ce5b434f4023f289", + "kind": "transparent" + }, + { + "address": "0xC874b064f465bdD6411D45734b56fac750Cda29A", + "txHash": "0xefa2f24402c9380a7721c725734809820ad8ac4f042f4e7f9aee77a1a54e662e", + "kind": "transparent" + }, + { + "address": "0xFe2e637202056d30016725477c5da089Ab0A043A", + "txHash": "0x36713d91ebe27af027d9e6c39b487cbd06b8f676348f44730363e459eac62a15", + "kind": "transparent" + }, + { + "address": "0x20BC832ca081b91433ff6c17f85701B6e92486c5", + "txHash": "0x7862156d832b88c96ebaad89570422b4dfb6ef10dd4f6f45798c583eec9f7db9", + "kind": "transparent" + }, + { + "address": "0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2", + "txHash": "0x2ea1150808638522d935c7d66b6d67782389b5123682ca466c9b97ac0eb0c050", + "kind": "transparent" + }, + { + "address": "0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514", + "txHash": "0x28ad7e3db8e157ef24f2aa6da7ad00cc1d55e0b2c0d161488a71e298a9cee21d", + "kind": "transparent" + }, + { + "address": "0x7B910cc3D4B42FEFF056218bD56d7700E4ea7dD5", + "txHash": "0x0dfc545843dc9b5853a5b727e9a8e955f8d193bb2f6415591bdd3e2c245449f5", + "kind": "transparent" + }, + { + "address": "0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20", + "txHash": "0xbf974737b21c38bb1b95c7b0dc57fe54ab8fcf040fe9ffceac7d920b7e72587a", + "kind": "transparent" + }, + { + "address": "0x0e75786cB831bEE6d4484031Af12490Ab528c770", + "txHash": "0xe7135d26f8c388d29d2a29c19ecd69c8e69de6ce2aa5014e6ba1cbcc389e9def", + "kind": "transparent" + }, + { + "address": "0xE949060ACE386D5e277De217703B17A2547f24C0", + "txHash": "0x2e2dafc452302b358f11bc4c2dd7631438b1a1284082d4fccadbdd9041ee43f5", + "kind": "transparent" + }, + { + "address": "0xC486c10e3611565F5b38b50ad68277b11C889623", + "txHash": "0x3add6dc8ba0e0bf8ffb7301fb049cf9953461951f63d304681d70cdc8c45cec2", + "kind": "transparent" + } + ], "impls": { "84dece82968538be3061b96eba9ebf393b48892f1cc2d730d20711cfa3f49e86": { "address": "0xa34E1010E2b76abdf7399E6C88147D0FAfE28e90", @@ -2490,52 +2551,1117 @@ } } } - } - }, - "proxies": [ - { - "address": "0xaAc73D4A26Ae6906aa115118b7840b1F19fcd3A5", - "kind": "transparent", - "txHash": "0xdf4df05f116f81e505766f972142acc16479ade3961b7920ce5b434f4023f289" - }, - { - "address": "0xC874b064f465bdD6411D45734b56fac750Cda29A", - "kind": "transparent", - "txHash": "0xefa2f24402c9380a7721c725734809820ad8ac4f042f4e7f9aee77a1a54e662e" - }, - { - "address": "0xFe2e637202056d30016725477c5da089Ab0A043A", - "kind": "transparent", - "txHash": "0x36713d91ebe27af027d9e6c39b487cbd06b8f676348f44730363e459eac62a15" - }, - { - "address": "0x20BC832ca081b91433ff6c17f85701B6e92486c5", - "kind": "transparent", - "txHash": "0x7862156d832b88c96ebaad89570422b4dfb6ef10dd4f6f45798c583eec9f7db9" - }, - { - "address": "0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2", - "kind": "transparent", - "txHash": "0x2ea1150808638522d935c7d66b6d67782389b5123682ca466c9b97ac0eb0c050" - }, - { - "address": "0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514", - "kind": "transparent", - "txHash": "0x28ad7e3db8e157ef24f2aa6da7ad00cc1d55e0b2c0d161488a71e298a9cee21d" }, - { - "address": "0x7B910cc3D4B42FEFF056218bD56d7700E4ea7dD5", - "kind": "transparent", - "txHash": "0x0dfc545843dc9b5853a5b727e9a8e955f8d193bb2f6415591bdd3e2c245449f5" + "42be0cabc0cdd10d2534d11a3cfd6561b4cc598188c7f7169e21a7a3855927d8": { + "address": "0x934113976884734E3c6d6B7052D0EFE03FC308B6", + "txHash": "0xf07d3e0cdf79f7215e608fb1fdd6bcf7fc7ac4e1aba586cb1374faf684046edb", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "Pool", + "label": "activatedValidators", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:29" + }, + { + "contract": "Pool", + "label": "withdrawalCredentials", + "type": "t_bytes32", + "src": "contracts/pool/Pool.sol:32" + }, + { + "contract": "Pool", + "label": "validatorRegistration", + "type": "t_contract(IDepositContract)5938", + "src": "contracts/pool/Pool.sol:35" + }, + { + "contract": "Pool", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)7131", + "src": "contracts/pool/Pool.sol:38" + }, + { + "contract": "Pool", + "label": "validators", + "type": "t_contract(IPoolValidators)6878", + "src": "contracts/pool/Pool.sol:41" + }, + { + "contract": "Pool", + "label": "oracles", + "type": "t_address", + "src": "contracts/pool/Pool.sol:44" + }, + { + "contract": "Pool", + "label": "activations", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "contracts/pool/Pool.sol:47" + }, + { + "contract": "Pool", + "label": "pendingValidators", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:50" + }, + { + "contract": "Pool", + "label": "minActivatingDeposit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:53" + }, + { + "contract": "Pool", + "label": "pendingValidatorsLimit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:56" + } + ], + "types": { + "t_uint256": { + "label": "uint256" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_contract(IDepositContract)5938": { + "label": "contract IDepositContract" + }, + "t_contract(IStakedEthToken)7131": { + "label": "contract IStakedEthToken" + }, + "t_contract(IPoolValidators)6878": { + "label": "contract IPoolValidators" + }, + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } }, - { - "address": "0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20", - "kind": "transparent", - "txHash": "0xbf974737b21c38bb1b95c7b0dc57fe54ab8fcf040fe9ffceac7d920b7e72587a" - } - ], - "admin": { - "address": "0x3EB0175dcD67d3AB139aA03165e24AA2188A4C22", - "txHash": "0x3490ab3e78ab96f5059d9ea25c009d476eec9d8c4d4d7009bb33f130e5046ab7" + "2b3ac17098d6878bec278c97e21f6f23d52c9485431ab442e877cb3c632f159c": { + "address": "0x7cA75ccf264b2d9F91D4ABA7639fC7FcC73a7e09", + "txHash": "0xecadc60b31ea4f09978df5bc5f34cc5138e1346f2ad7993c60a81a476a0d6e55", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "contracts/tokens/ERC20Upgradeable.sol:38" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:40" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:41" + }, + { + "contract": "ERC20Upgradeable", + "label": "_decimals", + "type": "t_uint8", + "src": "contracts/tokens/ERC20Upgradeable.sol:42" + }, + { + "contract": "ERC20Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)44_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:225" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_NAME", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_VERSION", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" + }, + { + "contract": "EIP712Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_nonces", + "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_PERMIT_TYPEHASH", + "type": "t_bytes32", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" + }, + { + "contract": "RewardEthToken", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)7131", + "src": "contracts/tokens/RewardEthToken.sol:25" + }, + { + "contract": "RewardEthToken", + "label": "oracles", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:28" + }, + { + "contract": "RewardEthToken", + "label": "checkpoints", + "type": "t_mapping(t_address,t_struct(Checkpoint)6889_storage)", + "src": "contracts/tokens/RewardEthToken.sol:31" + }, + { + "contract": "RewardEthToken", + "label": "protocolFeeRecipient", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:34" + }, + { + "contract": "RewardEthToken", + "label": "protocolFee", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:37" + }, + { + "contract": "RewardEthToken", + "label": "totalRewards", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:40" + }, + { + "contract": "RewardEthToken", + "label": "rewardPerToken", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:43" + }, + { + "contract": "RewardEthToken", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:46" + }, + { + "contract": "RewardEthToken", + "label": "merkleDistributor", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:49" + }, + { + "contract": "RewardEthToken", + "label": "rewardsDisabled", + "type": "t_mapping(t_address,t_bool)", + "src": "contracts/tokens/RewardEthToken.sol:52" + } + ], + "types": { + "t_contract(IStakedEthToken)7131": { + "label": "contract IStakedEthToken" + }, + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_struct(Checkpoint)6889_storage)": { + "label": "mapping(address => struct IRewardEthToken.Checkpoint)" + }, + "t_struct(Checkpoint)6889_storage": { + "label": "struct IRewardEthToken.Checkpoint", + "members": [ + { + "label": "reward", + "type": "t_uint128" + }, + { + "label": "rewardPerToken", + "type": "t_uint128" + } + ] + }, + "t_uint128": { + "label": "uint128" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)" + }, + "t_bool": { + "label": "bool" + }, + "t_mapping(t_address,t_struct(Counter)1781_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)" + }, + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)" + }, + "t_string_storage": { + "label": "string" + }, + "t_uint8": { + "label": "uint8" + }, + "t_array(t_uint256)44_storage": { + "label": "uint256[44]" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + } + } + } + }, + "dae99257393acac23ff82aeed3b1f12bee2720c63f0d50a10159b159f0f5240d": { + "address": "0x1d873651c38D912c8A7E1eBfB013Aa96bE5AACBC", + "txHash": "0x2009a306c0ac4207aa9ba61e16bfce5c87d68ca2cf8f55b61776b87091279e6b", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "MerkleDistributor", + "label": "merkleRoot", + "type": "t_bytes32", + "src": "contracts/merkles/MerkleDistributor.sol:24" + }, + { + "contract": "MerkleDistributor", + "label": "rewardEthToken", + "type": "t_address", + "src": "contracts/merkles/MerkleDistributor.sol:27" + }, + { + "contract": "MerkleDistributor", + "label": "oracles", + "type": "t_contract(IOracles)6342", + "src": "contracts/merkles/MerkleDistributor.sol:30" + }, + { + "contract": "MerkleDistributor", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/merkles/MerkleDistributor.sol:33" + }, + { + "contract": "MerkleDistributor", + "label": "_claimedBitMap", + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", + "src": "contracts/merkles/MerkleDistributor.sol:36" + } + ], + "types": { + "t_bytes32": { + "label": "bytes32" + }, + "t_address": { + "label": "address" + }, + "t_contract(IOracles)6342": { + "label": "contract IOracles" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(bytes32 => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "d377dd09cee01cc34566867233cd0093a8d4210bca54a545b32d225e878fbefb": { + "address": "0xD420f9BE4cd6c96993fd940EF13110746AE48abC", + "txHash": "0x097eed8ce05991682968966db5597f72dea0964a16a76e0abcd16b3269cca43a", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" + }, + { + "contract": "ReentrancyGuardUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" + }, + { + "contract": "PoolValidators", + "label": "validatorStatuses", + "type": "t_mapping(t_bytes32,t_enum(ValidatorStatus)6737)", + "src": "contracts/pool/PoolValidators.sol:24" + }, + { + "contract": "PoolValidators", + "label": "collaterals", + "type": "t_mapping(t_address,t_uint256)", + "src": "contracts/pool/PoolValidators.sol:27" + }, + { + "contract": "PoolValidators", + "label": "operators", + "type": "t_mapping(t_address,t_struct(Operator)6721_storage)", + "src": "contracts/pool/PoolValidators.sol:30" + }, + { + "contract": "PoolValidators", + "label": "pool", + "type": "t_contract(IPool)6651", + "src": "contracts/pool/PoolValidators.sol:33" + }, + { + "contract": "PoolValidators", + "label": "oracles", + "type": "t_address", + "src": "contracts/pool/PoolValidators.sol:36" + } + ], + "types": { + "t_mapping(t_bytes32,t_enum(ValidatorStatus)6737)": { + "label": "mapping(bytes32 => enum IPoolValidators.ValidatorStatus)" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_enum(ValidatorStatus)6737": { + "label": "enum IPoolValidators.ValidatorStatus", + "members": [ + "Uninitialized", + "Initialized", + "Finalized", + "Failed" + ] + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)" + }, + "t_address": { + "label": "address" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_address,t_struct(Operator)6721_storage)": { + "label": "mapping(address => struct IPoolValidators.Operator)" + }, + "t_struct(Operator)6721_storage": { + "label": "struct IPoolValidators.Operator", + "members": [ + { + "label": "initializeMerkleRoot", + "type": "t_bytes32" + }, + { + "label": "finalizeMerkleRoot", + "type": "t_bytes32" + }, + { + "label": "locked", + "type": "t_bool" + }, + { + "label": "committed", + "type": "t_bool" + } + ] + }, + "t_bool": { + "label": "bool" + }, + "t_contract(IPool)6651": { + "label": "contract IPool" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "80825b74c6a6f5cc9b67b8563f272012ebc5da55f88f626617229b6f56169c85": { + "address": "0x1cFcF1893326844270ec077fe996C785EFDed4B1", + "txHash": "0x5532306886ff6e930f35b77315c8f20e5aace6608b3b1bb5ae5a2761074ecb9a", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "Oracles", + "label": "rewardsNonce", + "type": "t_struct(Counter)1781_storage", + "src": "contracts/Oracles.sol:31" + }, + { + "contract": "Oracles", + "label": "validatorsNonce", + "type": "t_struct(Counter)1781_storage", + "src": "contracts/Oracles.sol:34" + }, + { + "contract": "Oracles", + "label": "rewardEthToken", + "type": "t_contract(IRewardEthToken)7034", + "src": "contracts/Oracles.sol:37" + }, + { + "contract": "Oracles", + "label": "pool", + "type": "t_contract(IPool)6651", + "src": "contracts/Oracles.sol:40" + }, + { + "contract": "Oracles", + "label": "poolValidators", + "type": "t_contract(IPoolValidators)6878", + "src": "contracts/Oracles.sol:43" + }, + { + "contract": "Oracles", + "label": "merkleDistributor", + "type": "t_contract(IMerkleDistributor)6095", + "src": "contracts/Oracles.sol:46" + } + ], + "types": { + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, + "t_uint256": { + "label": "uint256" + }, + "t_contract(IRewardEthToken)7034": { + "label": "contract IRewardEthToken" + }, + "t_contract(IPool)6651": { + "label": "contract IPool" + }, + "t_contract(IPoolValidators)6878": { + "label": "contract IPoolValidators" + }, + "t_contract(IMerkleDistributor)6095": { + "label": "contract IMerkleDistributor" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "c16e4b952994fa08e80e4e9254ad6dc7b05d9eb6dc641438f4281b10e5e5ad70": { + "address": "0x584E5D4bD0AE1EEF838796aEe8fb805BbB82439C", + "txHash": "0xcdf6692a8e52b2c4a31fe53b9447ca7b84e95ae32eb1497a73595a2d620f0de5", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + } + ], + "types": { + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_uint256": { + "label": "uint256" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + } } } From 1c8c9b84571b20fb617c51520bdcedd7e30a408a Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 14 Dec 2021 15:20:47 +0200 Subject: [PATCH 36/55] Fix tests for new mainnet contracts --- .openzeppelin/unknown-31337.json | 1216 ++++++++++++++++++++++++++++-- deployments/index.js | 15 +- deployments/settings.js | 6 +- hardhat.config.js | 2 +- networks/mainnet.md | 30 +- test/MerkleDistributor.test.js | 52 +- test/Proxies.test.js | 10 +- test/oracles/upgrading.test.js | 2 +- 8 files changed, 1211 insertions(+), 122 deletions(-) diff --git a/.openzeppelin/unknown-31337.json b/.openzeppelin/unknown-31337.json index d7930be3..072464ba 100644 --- a/.openzeppelin/unknown-31337.json +++ b/.openzeppelin/unknown-31337.json @@ -1,5 +1,66 @@ { "manifestVersion": "3.2", + "admin": { + "address": "0x3EB0175dcD67d3AB139aA03165e24AA2188A4C22", + "txHash": "0x3490ab3e78ab96f5059d9ea25c009d476eec9d8c4d4d7009bb33f130e5046ab7" + }, + "proxies": [ + { + "address": "0xaAc73D4A26Ae6906aa115118b7840b1F19fcd3A5", + "txHash": "0xdf4df05f116f81e505766f972142acc16479ade3961b7920ce5b434f4023f289", + "kind": "transparent" + }, + { + "address": "0xC874b064f465bdD6411D45734b56fac750Cda29A", + "txHash": "0xefa2f24402c9380a7721c725734809820ad8ac4f042f4e7f9aee77a1a54e662e", + "kind": "transparent" + }, + { + "address": "0xFe2e637202056d30016725477c5da089Ab0A043A", + "txHash": "0x36713d91ebe27af027d9e6c39b487cbd06b8f676348f44730363e459eac62a15", + "kind": "transparent" + }, + { + "address": "0x20BC832ca081b91433ff6c17f85701B6e92486c5", + "txHash": "0x7862156d832b88c96ebaad89570422b4dfb6ef10dd4f6f45798c583eec9f7db9", + "kind": "transparent" + }, + { + "address": "0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2", + "txHash": "0x2ea1150808638522d935c7d66b6d67782389b5123682ca466c9b97ac0eb0c050", + "kind": "transparent" + }, + { + "address": "0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514", + "txHash": "0x28ad7e3db8e157ef24f2aa6da7ad00cc1d55e0b2c0d161488a71e298a9cee21d", + "kind": "transparent" + }, + { + "address": "0x7B910cc3D4B42FEFF056218bD56d7700E4ea7dD5", + "txHash": "0x0dfc545843dc9b5853a5b727e9a8e955f8d193bb2f6415591bdd3e2c245449f5", + "kind": "transparent" + }, + { + "address": "0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20", + "txHash": "0xbf974737b21c38bb1b95c7b0dc57fe54ab8fcf040fe9ffceac7d920b7e72587a", + "kind": "transparent" + }, + { + "address": "0x0e75786cB831bEE6d4484031Af12490Ab528c770", + "txHash": "0xe7135d26f8c388d29d2a29c19ecd69c8e69de6ce2aa5014e6ba1cbcc389e9def", + "kind": "transparent" + }, + { + "address": "0xE949060ACE386D5e277De217703B17A2547f24C0", + "txHash": "0x2e2dafc452302b358f11bc4c2dd7631438b1a1284082d4fccadbdd9041ee43f5", + "kind": "transparent" + }, + { + "address": "0xC486c10e3611565F5b38b50ad68277b11C889623", + "txHash": "0x3add6dc8ba0e0bf8ffb7301fb049cf9953461951f63d304681d70cdc8c45cec2", + "kind": "transparent" + } + ], "impls": { "84dece82968538be3061b96eba9ebf393b48892f1cc2d730d20711cfa3f49e86": { "address": "0xa34E1010E2b76abdf7399E6C88147D0FAfE28e90", @@ -2490,52 +2551,1117 @@ } } } - } - }, - "proxies": [ - { - "address": "0xaAc73D4A26Ae6906aa115118b7840b1F19fcd3A5", - "kind": "transparent", - "txHash": "0xdf4df05f116f81e505766f972142acc16479ade3961b7920ce5b434f4023f289" - }, - { - "address": "0xC874b064f465bdD6411D45734b56fac750Cda29A", - "kind": "transparent", - "txHash": "0xefa2f24402c9380a7721c725734809820ad8ac4f042f4e7f9aee77a1a54e662e" - }, - { - "address": "0xFe2e637202056d30016725477c5da089Ab0A043A", - "kind": "transparent", - "txHash": "0x36713d91ebe27af027d9e6c39b487cbd06b8f676348f44730363e459eac62a15" - }, - { - "address": "0x20BC832ca081b91433ff6c17f85701B6e92486c5", - "kind": "transparent", - "txHash": "0x7862156d832b88c96ebaad89570422b4dfb6ef10dd4f6f45798c583eec9f7db9" - }, - { - "address": "0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2", - "kind": "transparent", - "txHash": "0x2ea1150808638522d935c7d66b6d67782389b5123682ca466c9b97ac0eb0c050" - }, - { - "address": "0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514", - "kind": "transparent", - "txHash": "0x28ad7e3db8e157ef24f2aa6da7ad00cc1d55e0b2c0d161488a71e298a9cee21d" }, - { - "address": "0x7B910cc3D4B42FEFF056218bD56d7700E4ea7dD5", - "kind": "transparent", - "txHash": "0x0dfc545843dc9b5853a5b727e9a8e955f8d193bb2f6415591bdd3e2c245449f5" + "42be0cabc0cdd10d2534d11a3cfd6561b4cc598188c7f7169e21a7a3855927d8": { + "address": "0x934113976884734E3c6d6B7052D0EFE03FC308B6", + "txHash": "0xf07d3e0cdf79f7215e608fb1fdd6bcf7fc7ac4e1aba586cb1374faf684046edb", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "Pool", + "label": "activatedValidators", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:29" + }, + { + "contract": "Pool", + "label": "withdrawalCredentials", + "type": "t_bytes32", + "src": "contracts/pool/Pool.sol:32" + }, + { + "contract": "Pool", + "label": "validatorRegistration", + "type": "t_contract(IDepositContract)5938", + "src": "contracts/pool/Pool.sol:35" + }, + { + "contract": "Pool", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)7131", + "src": "contracts/pool/Pool.sol:38" + }, + { + "contract": "Pool", + "label": "validators", + "type": "t_contract(IPoolValidators)6878", + "src": "contracts/pool/Pool.sol:41" + }, + { + "contract": "Pool", + "label": "oracles", + "type": "t_address", + "src": "contracts/pool/Pool.sol:44" + }, + { + "contract": "Pool", + "label": "activations", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "contracts/pool/Pool.sol:47" + }, + { + "contract": "Pool", + "label": "pendingValidators", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:50" + }, + { + "contract": "Pool", + "label": "minActivatingDeposit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:53" + }, + { + "contract": "Pool", + "label": "pendingValidatorsLimit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:56" + } + ], + "types": { + "t_uint256": { + "label": "uint256" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_contract(IDepositContract)5938": { + "label": "contract IDepositContract" + }, + "t_contract(IStakedEthToken)7131": { + "label": "contract IStakedEthToken" + }, + "t_contract(IPoolValidators)6878": { + "label": "contract IPoolValidators" + }, + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } }, - { - "address": "0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20", - "kind": "transparent", - "txHash": "0xbf974737b21c38bb1b95c7b0dc57fe54ab8fcf040fe9ffceac7d920b7e72587a" - } - ], - "admin": { - "address": "0x3EB0175dcD67d3AB139aA03165e24AA2188A4C22", - "txHash": "0x3490ab3e78ab96f5059d9ea25c009d476eec9d8c4d4d7009bb33f130e5046ab7" + "2b3ac17098d6878bec278c97e21f6f23d52c9485431ab442e877cb3c632f159c": { + "address": "0x7cA75ccf264b2d9F91D4ABA7639fC7FcC73a7e09", + "txHash": "0xecadc60b31ea4f09978df5bc5f34cc5138e1346f2ad7993c60a81a476a0d6e55", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "contracts/tokens/ERC20Upgradeable.sol:38" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:40" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:41" + }, + { + "contract": "ERC20Upgradeable", + "label": "_decimals", + "type": "t_uint8", + "src": "contracts/tokens/ERC20Upgradeable.sol:42" + }, + { + "contract": "ERC20Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)44_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:225" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_NAME", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_VERSION", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" + }, + { + "contract": "EIP712Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_nonces", + "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_PERMIT_TYPEHASH", + "type": "t_bytes32", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" + }, + { + "contract": "RewardEthToken", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)7131", + "src": "contracts/tokens/RewardEthToken.sol:25" + }, + { + "contract": "RewardEthToken", + "label": "oracles", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:28" + }, + { + "contract": "RewardEthToken", + "label": "checkpoints", + "type": "t_mapping(t_address,t_struct(Checkpoint)6889_storage)", + "src": "contracts/tokens/RewardEthToken.sol:31" + }, + { + "contract": "RewardEthToken", + "label": "protocolFeeRecipient", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:34" + }, + { + "contract": "RewardEthToken", + "label": "protocolFee", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:37" + }, + { + "contract": "RewardEthToken", + "label": "totalRewards", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:40" + }, + { + "contract": "RewardEthToken", + "label": "rewardPerToken", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:43" + }, + { + "contract": "RewardEthToken", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:46" + }, + { + "contract": "RewardEthToken", + "label": "merkleDistributor", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:49" + }, + { + "contract": "RewardEthToken", + "label": "rewardsDisabled", + "type": "t_mapping(t_address,t_bool)", + "src": "contracts/tokens/RewardEthToken.sol:52" + } + ], + "types": { + "t_contract(IStakedEthToken)7131": { + "label": "contract IStakedEthToken" + }, + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_struct(Checkpoint)6889_storage)": { + "label": "mapping(address => struct IRewardEthToken.Checkpoint)" + }, + "t_struct(Checkpoint)6889_storage": { + "label": "struct IRewardEthToken.Checkpoint", + "members": [ + { + "label": "reward", + "type": "t_uint128" + }, + { + "label": "rewardPerToken", + "type": "t_uint128" + } + ] + }, + "t_uint128": { + "label": "uint128" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)" + }, + "t_bool": { + "label": "bool" + }, + "t_mapping(t_address,t_struct(Counter)1781_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)" + }, + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)" + }, + "t_string_storage": { + "label": "string" + }, + "t_uint8": { + "label": "uint8" + }, + "t_array(t_uint256)44_storage": { + "label": "uint256[44]" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + } + } + } + }, + "dae99257393acac23ff82aeed3b1f12bee2720c63f0d50a10159b159f0f5240d": { + "address": "0x1d873651c38D912c8A7E1eBfB013Aa96bE5AACBC", + "txHash": "0x2009a306c0ac4207aa9ba61e16bfce5c87d68ca2cf8f55b61776b87091279e6b", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "MerkleDistributor", + "label": "merkleRoot", + "type": "t_bytes32", + "src": "contracts/merkles/MerkleDistributor.sol:24" + }, + { + "contract": "MerkleDistributor", + "label": "rewardEthToken", + "type": "t_address", + "src": "contracts/merkles/MerkleDistributor.sol:27" + }, + { + "contract": "MerkleDistributor", + "label": "oracles", + "type": "t_contract(IOracles)6342", + "src": "contracts/merkles/MerkleDistributor.sol:30" + }, + { + "contract": "MerkleDistributor", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/merkles/MerkleDistributor.sol:33" + }, + { + "contract": "MerkleDistributor", + "label": "_claimedBitMap", + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", + "src": "contracts/merkles/MerkleDistributor.sol:36" + } + ], + "types": { + "t_bytes32": { + "label": "bytes32" + }, + "t_address": { + "label": "address" + }, + "t_contract(IOracles)6342": { + "label": "contract IOracles" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(bytes32 => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "d377dd09cee01cc34566867233cd0093a8d4210bca54a545b32d225e878fbefb": { + "address": "0xD420f9BE4cd6c96993fd940EF13110746AE48abC", + "txHash": "0x097eed8ce05991682968966db5597f72dea0964a16a76e0abcd16b3269cca43a", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "ReentrancyGuardUpgradeable", + "label": "_status", + "type": "t_uint256", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" + }, + { + "contract": "ReentrancyGuardUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" + }, + { + "contract": "PoolValidators", + "label": "validatorStatuses", + "type": "t_mapping(t_bytes32,t_enum(ValidatorStatus)6737)", + "src": "contracts/pool/PoolValidators.sol:24" + }, + { + "contract": "PoolValidators", + "label": "collaterals", + "type": "t_mapping(t_address,t_uint256)", + "src": "contracts/pool/PoolValidators.sol:27" + }, + { + "contract": "PoolValidators", + "label": "operators", + "type": "t_mapping(t_address,t_struct(Operator)6721_storage)", + "src": "contracts/pool/PoolValidators.sol:30" + }, + { + "contract": "PoolValidators", + "label": "pool", + "type": "t_contract(IPool)6651", + "src": "contracts/pool/PoolValidators.sol:33" + }, + { + "contract": "PoolValidators", + "label": "oracles", + "type": "t_address", + "src": "contracts/pool/PoolValidators.sol:36" + } + ], + "types": { + "t_mapping(t_bytes32,t_enum(ValidatorStatus)6737)": { + "label": "mapping(bytes32 => enum IPoolValidators.ValidatorStatus)" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_enum(ValidatorStatus)6737": { + "label": "enum IPoolValidators.ValidatorStatus", + "members": [ + "Uninitialized", + "Initialized", + "Finalized", + "Failed" + ] + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)" + }, + "t_address": { + "label": "address" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_address,t_struct(Operator)6721_storage)": { + "label": "mapping(address => struct IPoolValidators.Operator)" + }, + "t_struct(Operator)6721_storage": { + "label": "struct IPoolValidators.Operator", + "members": [ + { + "label": "initializeMerkleRoot", + "type": "t_bytes32" + }, + { + "label": "finalizeMerkleRoot", + "type": "t_bytes32" + }, + { + "label": "locked", + "type": "t_bool" + }, + { + "label": "committed", + "type": "t_bool" + } + ] + }, + "t_bool": { + "label": "bool" + }, + "t_contract(IPool)6651": { + "label": "contract IPool" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "80825b74c6a6f5cc9b67b8563f272012ebc5da55f88f626617229b6f56169c85": { + "address": "0x1cFcF1893326844270ec077fe996C785EFDed4B1", + "txHash": "0x5532306886ff6e930f35b77315c8f20e5aace6608b3b1bb5ae5a2761074ecb9a", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "Oracles", + "label": "rewardsNonce", + "type": "t_struct(Counter)1781_storage", + "src": "contracts/Oracles.sol:31" + }, + { + "contract": "Oracles", + "label": "validatorsNonce", + "type": "t_struct(Counter)1781_storage", + "src": "contracts/Oracles.sol:34" + }, + { + "contract": "Oracles", + "label": "rewardEthToken", + "type": "t_contract(IRewardEthToken)7034", + "src": "contracts/Oracles.sol:37" + }, + { + "contract": "Oracles", + "label": "pool", + "type": "t_contract(IPool)6651", + "src": "contracts/Oracles.sol:40" + }, + { + "contract": "Oracles", + "label": "poolValidators", + "type": "t_contract(IPoolValidators)6878", + "src": "contracts/Oracles.sol:43" + }, + { + "contract": "Oracles", + "label": "merkleDistributor", + "type": "t_contract(IMerkleDistributor)6095", + "src": "contracts/Oracles.sol:46" + } + ], + "types": { + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, + "t_uint256": { + "label": "uint256" + }, + "t_contract(IRewardEthToken)7034": { + "label": "contract IRewardEthToken" + }, + "t_contract(IPool)6651": { + "label": "contract IPool" + }, + "t_contract(IPoolValidators)6878": { + "label": "contract IPoolValidators" + }, + "t_contract(IMerkleDistributor)6095": { + "label": "contract IMerkleDistributor" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "c16e4b952994fa08e80e4e9254ad6dc7b05d9eb6dc641438f4281b10e5e5ad70": { + "address": "0x584E5D4bD0AE1EEF838796aEe8fb805BbB82439C", + "txHash": "0xcdf6692a8e52b2c4a31fe53b9447ca7b84e95ae32eb1497a73595a2d620f0de5", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + } + ], + "types": { + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_uint256": { + "label": "uint256" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + } } } diff --git a/deployments/index.js b/deployments/index.js index f94d1fb8..b44236b9 100644 --- a/deployments/index.js +++ b/deployments/index.js @@ -202,23 +202,16 @@ async function deployContracts() { } async function upgradeContracts() { - const { poolValidators, oracles, roles } = await deployContracts(); - - await upgradeMerkleDistributor(oracles); + await upgradeMerkleDistributor(contracts.oracles); log(white('Upgraded MerkleDistributor contract')); - await upgradePool(poolValidators, oracles); + await upgradePool(contracts.poolValidators, contracts.oracles); log(white('Upgraded Pool contract')); - await upgradeRewardEthToken(oracles); + await upgradeRewardEthToken(contracts.oracles); log(white('Upgraded RewardEthToken contract')); - return { - ...contracts, - poolValidators, - oracles, - roles, - }; + return contracts; } module.exports = { diff --git a/deployments/settings.js b/deployments/settings.js index 090642f3..8165676d 100644 --- a/deployments/settings.js +++ b/deployments/settings.js @@ -24,9 +24,10 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { }; } else { contracts = { - validators: '0xaAc73D4A26Ae6906aa115118b7840b1F19fcd3A5', - oracles: '0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514', + prevOracles: '0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514', + oracles: '0xE949060ACE386D5e277De217703B17A2547f24C0', pool: '0xC874b064f465bdD6411D45734b56fac750Cda29A', + poolValidators: '0x0e75786cB831bEE6d4484031Af12490Ab528c770', poolEscrow: '0x2296e122c1a20Fca3CAc3371357BdAd3be0dF079', stakedEthToken: '0xFe2e637202056d30016725477c5da089Ab0A043A', rewardEthToken: '0x20BC832ca081b91433ff6c17f85701B6e92486c5', @@ -34,6 +35,7 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { vestingEscrowFactory: '0x7B910cc3D4B42FEFF056218bD56d7700E4ea7dD5', merkleDrop: '0x2AAB6822a1a9f982fd7b0Fe35A5A5b6148eCf4d5', merkleDistributor: '0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20', + roles: '0xC486c10e3611565F5b38b50ad68277b11C889623', contractChecker: '0xFC1fC7257AEA7C7c08A498594DCA97CE5A72fdCB', proxyAdmin: '0x3EB0175dcD67d3AB139aA03165e24AA2188A4C22', }; diff --git a/hardhat.config.js b/hardhat.config.js index 2b7d4d3f..af4f1ad4 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -10,7 +10,7 @@ require('hardhat-contract-sizer'); require('hardhat-abi-exporter'); require('@nomiclabs/hardhat-etherscan'); -const BLOCK_NUMBER = 12985770; +const BLOCK_NUMBER = 13780000; const OPTIMIZER_RUNS = 5000000; const log = (...text) => console.log(gray(...['└─> [DEBUG]'].concat(text))); diff --git a/networks/mainnet.md b/networks/mainnet.md index 3e172151..5e10f40a 100644 --- a/networks/mainnet.md +++ b/networks/mainnet.md @@ -1,10 +1,5 @@ # Mainnet Contracts -## Validators - -- Contract: [0xaAc73D4A26Ae6906aa115118b7840b1F19fcd3A5](https://etherscan.io/address/0xaAc73D4A26Ae6906aa115118b7840b1F19fcd3A5) -- Transaction: [0xdf4df05f116f81e505766f972142acc16479ade3961b7920ce5b434f4023f289](https://etherscan.io/tx/0xdf4df05f116f81e505766f972142acc16479ade3961b7920ce5b434f4023f289) - ## Pool - Contract: [0xC874b064f465bdD6411D45734b56fac750Cda29A](https://etherscan.io/address/0xC874b064f465bdD6411D45734b56fac750Cda29A) @@ -20,10 +15,10 @@ - Contract: [0x2296e122c1a20Fca3CAc3371357BdAd3be0dF079](https://etherscan.io/address/0x2296e122c1a20Fca3CAc3371357BdAd3be0dF079) - Transaction: [0xaf485028fa48fe546a72d0a26c8ea8adc6ae0c460faa3b5fab7513834c0e1155](https://etherscan.io/tx/0xaf485028fa48fe546a72d0a26c8ea8adc6ae0c460faa3b5fab7513834c0e1155) -## Solos +## Pool Validators -- Contract: [0xEadCBA8BF9ACA93F627F31fB05470F5A0686CEca](https://etherscan.io/address/0xEadCBA8BF9ACA93F627F31fB05470F5A0686CEca) -- Transaction: [0xb06d6b7288424b04fab9136388c68cb9083e392bae00816c36e062dac3666dc2](https://etherscan.io/tx/0xb06d6b7288424b04fab9136388c68cb9083e392bae00816c36e062dac3666dc2) +- Contract: [0x0e75786cB831bEE6d4484031Af12490Ab528c770](https://etherscan.io/address/0x0e75786cB831bEE6d4484031Af12490Ab528c770) +- Transaction: [0xe7135d26f8c388d29d2a29c19ecd69c8e69de6ce2aa5014e6ba1cbcc389e9def](https://etherscan.io/tx/0xe7135d26f8c388d29d2a29c19ecd69c8e69de6ce2aa5014e6ba1cbcc389e9def) ## StakedEthToken @@ -52,18 +47,8 @@ ## Oracles -- Contract: [0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514](https://etherscan.io/address/0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514) -- Transaction: [0x28ad7e3db8e157ef24f2aa6da7ad00cc1d55e0b2c0d161488a71e298a9cee21d](https://etherscan.io/tx/0x28ad7e3db8e157ef24f2aa6da7ad00cc1d55e0b2c0d161488a71e298a9cee21d) - -### Upgrade to v1.1.0 - -- Implementation: [0x749dCCE12E8337dfb44635082519E656d44A2672](https://etherscan.io/address/0x749dCCE12E8337dfb44635082519E656d44A2672) -- Transaction: [0xf7667e029d07c1ee47a46235bb1e90082142d982a10fa94d95fa919594f07c2f](https://etherscan.io/tx/0xf7667e029d07c1ee47a46235bb1e90082142d982a10fa94d95fa919594f07c2f) - -### Upgrade to v1.3.0 - -- Implementation: [0xd3ea5BF3bB42542B5b64358C12F06233704e9b99](https://etherscan.io/address/0xd3ea5BF3bB42542B5b64358C12F06233704e9b99) -- Transaction: [0xd03b2316cb5cde5f52272deaf96640fd7f6d50556d798fd7818887a1f7ac2b73](https://etherscan.io/tx/0xd03b2316cb5cde5f52272deaf96640fd7f6d50556d798fd7818887a1f7ac2b73) +- Contract: [0xE949060ACE386D5e277De217703B17A2547f24C0](https://etherscan.io/address/0xE949060ACE386D5e277De217703B17A2547f24C0) +- Transaction: [0x2e2dafc452302b358f11bc4c2dd7631438b1a1284082d4fccadbdd9041ee43f5](https://etherscan.io/tx/0x2e2dafc452302b358f11bc4c2dd7631438b1a1284082d4fccadbdd9041ee43f5) ## Vesting Escrow @@ -96,6 +81,11 @@ - Contract: [0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20](https://etherscan.io/address/0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20) - Transaction: [0xbf974737b21c38bb1b95c7b0dc57fe54ab8fcf040fe9ffceac7d920b7e72587a](https://etherscan.io/tx/0xbf974737b21c38bb1b95c7b0dc57fe54ab8fcf040fe9ffceac7d920b7e72587a) +## Roles + +- Contract: [0xC486c10e3611565F5b38b50ad68277b11C889623](https://etherscan.io/address/0xC486c10e3611565F5b38b50ad68277b11C889623) +- Transaction: [0x3add6dc8ba0e0bf8ffb7301fb049cf9953461951f63d304681d70cdc8c45cec2](https://etherscan.io/tx/0x3add6dc8ba0e0bf8ffb7301fb049cf9953461951f63d304681d70cdc8c45cec2) + ## Early Adopters Campaign (Merkle Drop) - Contract: [0x2AAB6822a1a9f982fd7b0Fe35A5A5b6148eCf4d5](https://etherscan.io/address/0x2AAB6822a1a9f982fd7b0Fe35A5A5b6148eCf4d5) diff --git a/test/MerkleDistributor.test.js b/test/MerkleDistributor.test.js index ed6cb388..accde955 100644 --- a/test/MerkleDistributor.test.js +++ b/test/MerkleDistributor.test.js @@ -432,27 +432,6 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { ); }); - it('cannot claim more eth rewards than allocated to the distributor', async () => { - await token.transfer(merkleDistributor.address, distributorTokenReward, { - from: admin, - }); - await setMerkleRoot({ - merkleDistributor, - merkleRoot, - merkleProofs, - oracles, - oracleAccounts, - }); - - const { index, amounts, tokens, proof } = merkleProofs[account1]; - await expectRevert( - merkleDistributor.claim(index, account1, tokens, amounts, proof, { - from: anyone, - }), - 'SafeMath: subtraction overflow' - ); - }); - it('cannot claim twice', async () => { await pool.setMinActivatingDeposit(constants.MAX_UINT256, { from: admin, @@ -691,23 +670,20 @@ contract('Merkle Distributor', ([beneficiary, anyone, ...otherAccounts]) => { it('can claim before total rewards update in the same block', async () => { const { index, amounts, tokens, proof } = merkleProofs[account1]; - await expectRevert( - multicallMock.claimAndUpdateTotalRewards( - { - totalRewards: totalRewards.toString(), - activatedValidators: activatedValidators.toString(), - signatures: rewardsSignatures, - }, - index, - account1, - tokens, - amounts, - proof, - { - from: anyone, - } - ), - 'SafeMath: subtraction overflow' + await multicallMock.claimAndUpdateTotalRewards( + { + totalRewards: totalRewards.toString(), + activatedValidators: activatedValidators.toString(), + signatures: rewardsSignatures, + }, + index, + account1, + tokens, + amounts, + proof, + { + from: anyone, + } ); }); diff --git a/test/Proxies.test.js b/test/Proxies.test.js index 777ca3b9..3efb7e8d 100644 --- a/test/Proxies.test.js +++ b/test/Proxies.test.js @@ -2,25 +2,27 @@ const hre = require('hardhat'); const { contractSettings, contracts } = require('../deployments/settings'); let proxies = [ + contracts.oracles, contracts.pool, - contracts.validators, + contracts.poolValidators, contracts.stakedEthToken, contracts.rewardEthToken, contracts.stakeWiseToken, - contracts.oracles, contracts.vestingEscrowFactory, contracts.merkleDistributor, + contracts.roles, ]; let implementations = [ + '0x1cFcF1893326844270ec077fe996C785EFDed4B1', '0xc8970E7C07c251625F9F93cE510b1D9c1a08d299', - '0xa34E1010E2b76abdf7399E6C88147D0FAfE28e90', + '0xD420f9BE4cd6c96993fd940EF13110746AE48abC', '0x41bcac23e4db058d8D7aAbE2Fccdae5F01FE647A', '0x610B58583642610967727fe4fadd125a92D6F678', '0xA28C2d79f0c5B78CeC699DAB0303008179815396', - '0xd3ea5BF3bB42542B5b64358C12F06233704e9b99', '0xbeE3Eb97Cfd94ace6B66E606B8088C57c5f78fBf', '0x459beef3c5Bd5D1E66de93AC908E278ee2488F14', + '0x584E5D4bD0AE1EEF838796aEe8fb805BbB82439C', ]; contract('Proxies', () => { diff --git a/test/oracles/upgrading.test.js b/test/oracles/upgrading.test.js index fb8099c4..3b378fc4 100644 --- a/test/oracles/upgrading.test.js +++ b/test/oracles/upgrading.test.js @@ -26,7 +26,7 @@ contract('Oracles (upgrading)', ([anyone]) => { afterEach(async () => resetFork()); it('initializes with values from previous contract', async () => { - let prevOracles = await PrevOracles.at(contracts.oracles); + let prevOracles = await PrevOracles.at(contracts.prevOracles); expect(await prevOracles.currentNonce()).to.bignumber.equal( (await oracles.currentRewardsNonce()).sub(new BN('1000')) ); From edbf6d59d937164f443a15f353e5297a1905b638 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 14 Dec 2021 16:38:23 +0200 Subject: [PATCH 37/55] Change flavor to large for circleci --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index 1f9fa82c..e551c3f9 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -57,6 +57,7 @@ jobs: test: executor: default + resource_class: large steps: - checkout - attach_workspace: From c985b104f6d08a5a59e96e3039191dd646a335ff Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 14 Dec 2021 17:46:57 +0200 Subject: [PATCH 38/55] Add circleci parallelism --- .circleci/config.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.circleci/config.yml b/.circleci/config.yml index e551c3f9..e98f05a2 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -58,6 +58,7 @@ jobs: test: executor: default resource_class: large + parallelism: 4 steps: - checkout - attach_workspace: From 0aa2c22f566ea9ee1cf2c4271159a19edc925153 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 14 Dec 2021 18:15:03 +0200 Subject: [PATCH 39/55] Fix circleci parallelism --- .circleci/config.yml | 39 ++++++++++++++++++++++++++++++++++++--- .mocharc.js | 3 --- hardhat.config.js | 3 +++ 3 files changed, 39 insertions(+), 6 deletions(-) delete mode 100644 .mocharc.js diff --git a/.circleci/config.yml b/.circleci/config.yml index e98f05a2..0934d37d 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -58,17 +58,47 @@ jobs: test: executor: default resource_class: large - parallelism: 4 + parallelism: 8 steps: - checkout - attach_workspace: at: /tmp/workspace - run: name: Run tests - command: yarn test:gas + command: | + circleci tests glob 'test/**/*.test.js' | + circleci tests split | + xargs yarn test:gas + - run: + name: Save gas report + command: | + mv gasReporterOutput.json /tmp/workspace/gasReporterOutput-$CIRCLE_NODE_INDEX.json + - persist_to_workspace: + root: /tmp/workspace + paths: + - gasReporterOutput-*.json + + report-gas: + executor: default + steps: + - checkout + - attach_workspace: + at: /tmp/workspace - run: name: Report gas changes - command: npx codechecks + command: | + npx hardhat gas-reporter:merge gasReporterOutput-*.json + npx codechecks codechecks.unit.yml + - store_artifacts: + path: gasReporterOutput.json + - run: + name: Process test report + when: always + command: | + # Convert absolute paths to relative to support splitting tests by timing + if [ -e /tmp/workspace/log/test-results/mocha/test-results.xml ]; then + sed -i "s|`pwd`/||g" /tmp/workspace/log/test-results/mocha/test-results.xml + fi # FIXME: https://github.com/sc-forks/solidity-coverage/issues/574 # coverage: @@ -99,6 +129,9 @@ workflows: - test: requires: - compile + - test-gas-report: + requires: + - test # - coverage: # requires: # - compile diff --git a/.mocharc.js b/.mocharc.js deleted file mode 100644 index fac5fdfe..00000000 --- a/.mocharc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - timeout: 4000, -}; diff --git a/hardhat.config.js b/hardhat.config.js index af4f1ad4..d02ca7e2 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -144,4 +144,7 @@ module.exports = { etherscan: { apiKey: 'api key goes here', }, + mocha: { + timeout: 4000, + }, }; From 9851ac83eba27ce0e13275ebcd88233e3e666e9f Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 14 Dec 2021 18:19:29 +0200 Subject: [PATCH 40/55] Fix circleci parallelism --- .circleci/config.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index 0934d37d..ff737026 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -87,8 +87,8 @@ jobs: - run: name: Report gas changes command: | - npx hardhat gas-reporter:merge gasReporterOutput-*.json - npx codechecks codechecks.unit.yml + npx hardhat gas-reporter:merge /tmp/workspace/gasReporterOutput-*.json + npx codechecks - store_artifacts: path: gasReporterOutput.json - run: @@ -129,7 +129,7 @@ workflows: - test: requires: - compile - - test-gas-report: + - report-gas: requires: - test # - coverage: From 0eb74410cc07e767d157f572a601b45cb976f82d Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 14 Dec 2021 18:36:22 +0200 Subject: [PATCH 41/55] Upgrade packages to latest --- package.json | 20 +- yarn.lock | 5213 ++++++++++++++++++++++++++++++++------------------ 2 files changed, 3374 insertions(+), 1859 deletions(-) diff --git a/package.json b/package.json index 06d318f5..2b6f6f55 100644 --- a/package.json +++ b/package.json @@ -46,9 +46,9 @@ }, "devDependencies": { "@codechecks/client": "^0.1.12", - "@nomiclabs/hardhat-ethers": "^2.0.2", - "@nomiclabs/hardhat-etherscan": "^2.1.7", - "@nomiclabs/hardhat-truffle5": "^2.0.0", + "@nomiclabs/hardhat-ethers": "^2.0.3", + "@nomiclabs/hardhat-etherscan": "^2.1.8", + "@nomiclabs/hardhat-truffle5": "^2.0.3", "@nomiclabs/hardhat-web3": "^2.0.0", "@openzeppelin/contracts": "3.4.1", "@openzeppelin/contracts-upgradeable": "3.4.1", @@ -56,21 +56,21 @@ "@openzeppelin/test-helpers": "^0.5.15", "chai": "^4.3.4", "chalk": "^4.1.2", - "eslint": "^8.1.0", + "eslint": "^8.4.1", "eslint-config-prettier": "^8.3.0", "eslint-plugin-prettier": "^4.0.0", "eth-sig-util": "^3.0.1", - "ethers": "^5.5.1", - "hardhat": "^2.6.8", + "ethers": "^5.5.2", + "hardhat": "^2.7.1", "hardhat-abi-exporter": "^2.3.1", "hardhat-contract-sizer": "^2.1.1", - "hardhat-gas-reporter": "^1.0.4", + "hardhat-gas-reporter": "^1.0.6", "husky": "^7.0.4", - "lint-staged": "11.2.6", - "prettier": "^2.4.1", + "lint-staged": "12.1.2", + "prettier": "^2.5.1", "solhint": "^3.3.6", "solidity-coverage": "^0.7.17", - "web3": "^1.6.0" + "web3": "^1.6.1" }, "dependencies": {} } diff --git a/yarn.lock b/yarn.lock index fe96f699..b3a98979 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3,26 +3,33 @@ "@babel/code-frame@^7.0.0": - version "7.12.13" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.13.tgz#dcfc826beef65e75c50e21d3837d7d95798dd658" - integrity sha512-HV1Cm0Q3ZrpCR93tkWOYiuYIgLxZXZFVG2VgK+MBWjUqZTundupbfx2aXarXuw5Ko5aMcjtJgbSs4vUGBS5v6g== + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.16.0.tgz#0dfc80309beec8411e65e706461c408b0bb9b431" + integrity sha512-IF4EOMEV+bfYwOmNxGzSnjR2EmQod7f1UXOpZM3l4i4o4QNwzjtJAu/HxdjHq0aYBvdqMuQEY1eg0nqW9ZPORA== dependencies: - "@babel/highlight" "^7.12.13" + "@babel/highlight" "^7.16.0" -"@babel/helper-validator-identifier@^7.12.11": - version "7.12.11" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz#c9a1f021917dcb5ccf0d4e453e399022981fc9ed" - integrity sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw== +"@babel/helper-validator-identifier@^7.15.7": + version "7.15.7" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" + integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== -"@babel/highlight@^7.12.13": - version "7.13.10" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.13.10.tgz#a8b2a66148f5b27d666b15d81774347a731d52d1" - integrity sha512-5aPpe5XQPzflQrFwL1/QoeHkP2MsA4JCntcXHRhEsdsfPVkvPi2w7Qix4iV7t5S/oC9OodGrggd8aco1g3SZFg== +"@babel/highlight@^7.16.0": + version "7.16.0" + resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.16.0.tgz#6ceb32b2ca4b8f5f361fb7fd821e3fddf4a1725a" + integrity sha512-t8MH41kUQylBtu2+4IQA3atqevA2lRgqA2wyVB/YiWmsDSuylZZuXOUy9ric30hfzauEFfdsuk/eXTRrGrfd0g== dependencies: - "@babel/helper-validator-identifier" "^7.12.11" + "@babel/helper-validator-identifier" "^7.15.7" chalk "^2.0.0" js-tokens "^4.0.0" +"@babel/runtime@^7.4.4": + version "7.16.5" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.16.5.tgz#7f3e34bf8bdbbadf03fbb7b1ea0d929569c9487a" + integrity sha512-TXWihFIS3Pyv5hzR7j6ihmeLkZfrXGxAr5UfSl8CHf+6q/wpiYDkUau0czckpYG8QmnCIuPpdLtuA9VmuGGyMA== + dependencies: + regenerator-runtime "^0.13.4" + "@codechecks/client@^0.1.12": version "0.1.12" resolved "https://registry.yarnpkg.com/@codechecks/client/-/client-0.1.12.tgz#519f11be8fcaa581c6ee8d5e8457e35bbbe5d9b1" @@ -49,53 +56,97 @@ ts-node "^8.0.2" url-join "^4.0.0" -"@eslint/eslintrc@^1.0.3": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.3.tgz#41f08c597025605f672251dcc4e8be66b5ed7366" - integrity sha512-DHI1wDPoKCBPoLZA3qDR91+3te/wDSc1YhKg3jR8NxKKRJq2hwHwcWv31cSwSYvIBrmbENoYMWcenW8uproQqg== +"@ensdomains/address-encoder@^0.1.7": + version "0.1.9" + resolved "https://registry.yarnpkg.com/@ensdomains/address-encoder/-/address-encoder-0.1.9.tgz#f948c485443d9ef7ed2c0c4790e931c33334d02d" + integrity sha512-E2d2gP4uxJQnDu2Kfg1tHNspefzbLT8Tyjrm5sEuim32UkU2sm5xL4VXtgc2X33fmPEw9+jUMpGs4veMbf+PYg== + dependencies: + bech32 "^1.1.3" + blakejs "^1.1.0" + bn.js "^4.11.8" + bs58 "^4.0.1" + crypto-addr-codec "^0.1.7" + nano-base32 "^1.0.1" + ripemd160 "^2.0.2" + +"@ensdomains/ens@0.4.3": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@ensdomains/ens/-/ens-0.4.3.tgz#f4a6b55146fe526c9a50e13f373bf90d36ca94dc" + integrity sha512-btC+fGze//ml8SMNCx5DgwM8+kG2t+qDCZrqlL/2+PV4CNxnRIpR3egZ49D9FqS52PFoYLmz6MaQfl7AO3pUMA== + dependencies: + bluebird "^3.5.2" + eth-ens-namehash "^2.0.8" + ethereumjs-testrpc "^6.0.3" + ganache-cli "^6.1.0" + solc "^0.4.20" + testrpc "0.0.1" + web3-utils "^1.0.0-beta.31" + +"@ensdomains/ensjs@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@ensdomains/ensjs/-/ensjs-2.0.1.tgz#c27438f9ca074825ddb08430988c7decf2062a91" + integrity sha512-gZLntzE1xqPNkPvaHdJlV5DXHms8JbHBwrXc2xNrL1AylERK01Lj/txCCZyVQqFd3TvUO1laDbfUv8VII0qrjg== + dependencies: + "@babel/runtime" "^7.4.4" + "@ensdomains/address-encoder" "^0.1.7" + "@ensdomains/ens" "0.4.3" + "@ensdomains/resolver" "0.2.4" + content-hash "^2.5.2" + eth-ens-namehash "^2.0.8" + ethers "^5.0.13" + js-sha3 "^0.8.0" + +"@ensdomains/resolver@0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@ensdomains/resolver/-/resolver-0.2.4.tgz#c10fe28bf5efbf49bff4666d909aed0265efbc89" + integrity sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA== + +"@eslint/eslintrc@^1.0.5": + version "1.0.5" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.0.5.tgz#33f1b838dbf1f923bfa517e008362b78ddbbf318" + integrity sha512-BLxsnmK3KyPunz5wmCCpqy0YelEoxxGmH73Is+Z74oOTMtExcjkr3dDR6quwrjh1YspA8DH9gnX1o069KiS9AQ== dependencies: ajv "^6.12.4" debug "^4.3.2" - espree "^9.0.0" + espree "^9.2.0" globals "^13.9.0" ignore "^4.0.6" import-fresh "^3.2.1" - js-yaml "^3.13.1" + js-yaml "^4.1.0" minimatch "^3.0.4" strip-json-comments "^3.1.1" -"@ethereumjs/block@^3.4.0", "@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.5.1": - version "3.5.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.5.1.tgz#59737d393503249aa750c37dfc83896234f4e175" - integrity sha512-MoY9bHKABOBK6BW0v1N1Oc0Cve4x/giX67M3TtrVBUsKQTj2eznLGKpydoitxWSZ+WgKKSVhfRMzbCGRwk7T5w== +"@ethereumjs/block@^3.5.0", "@ethereumjs/block@^3.6.0": + version "3.6.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/block/-/block-3.6.0.tgz#5cf89ea748607597a3f8b038abc986e4ac0b05db" + integrity sha512-dqLo1LtsLG+Oelu5S5tWUDG0pah3QUwV5TJZy2cm19BXDr4ka/S9XBSgao0i09gTcuPlovlHgcs6d7EZ37urjQ== dependencies: - "@ethereumjs/common" "^2.5.0" - "@ethereumjs/tx" "^3.3.1" - ethereumjs-util "^7.1.1" - merkle-patricia-tree "^4.2.1" + "@ethereumjs/common" "^2.6.0" + "@ethereumjs/tx" "^3.4.0" + ethereumjs-util "^7.1.3" + merkle-patricia-tree "^4.2.2" -"@ethereumjs/blockchain@^5.4.0", "@ethereumjs/blockchain@^5.4.1": - version "5.4.2" - resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.4.2.tgz#5074e0a0157818762a5f5175ea0bd93c5455fe32" - integrity sha512-AOAAwz/lw2lciG9gf5wHi7M/qknraXXnLR66lYgbQ04qfyFC3ZE5x/5rLVm1Vu+kfJLlKrYZTmA0IbOkc7kvgw== +"@ethereumjs/blockchain@^5.5.0": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/blockchain/-/blockchain-5.5.1.tgz#60f1f50592c06cc47e1704800b88b7d32f609742" + integrity sha512-JS2jeKxl3tlaa5oXrZ8mGoVBCz6YqsGG350XVNtHAtNZXKk7pU3rH4xzF2ru42fksMMqzFLzKh9l4EQzmNWDqA== dependencies: - "@ethereumjs/block" "^3.5.1" - "@ethereumjs/common" "^2.5.0" + "@ethereumjs/block" "^3.6.0" + "@ethereumjs/common" "^2.6.0" "@ethereumjs/ethash" "^1.1.0" debug "^2.2.0" - ethereumjs-util "^7.1.1" + ethereumjs-util "^7.1.3" level-mem "^5.0.1" lru-cache "^5.1.1" - rlp "^2.2.4" semaphore-async-await "^1.5.1" -"@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.5.0": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.5.0.tgz#ec61551b31bef7a69d1dc634d8932468866a4268" - integrity sha512-DEHjW6e38o+JmB/NO3GZBpW4lpaiBpkFgXF6jLcJ6gETBYpEyaA5nTimsWBUJR3Vmtm/didUEbNjajskugZORg== +"@ethereumjs/common@^2.3.0", "@ethereumjs/common@^2.4.0", "@ethereumjs/common@^2.5.0", "@ethereumjs/common@^2.6.0": + version "2.6.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/common/-/common-2.6.0.tgz#feb96fb154da41ee2cc2c5df667621a440f36348" + integrity sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA== dependencies: crc-32 "^1.2.0" - ethereumjs-util "^7.1.1" + ethereumjs-util "^7.1.3" "@ethereumjs/ethash@^1.1.0": version "1.1.0" @@ -108,47 +159,31 @@ ethereumjs-util "^7.1.1" miller-rabin "^4.0.0" -"@ethereumjs/tx@^3.2.1", "@ethereumjs/tx@^3.3.0", "@ethereumjs/tx@^3.3.1": - version "3.3.1" - resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.3.1.tgz#83b6b1f9fe8182d6f2a1d7bff8213631629ab8a4" - integrity sha512-DXcBdW4upjU11FGlGBAMJw4jXAveL1Siu/8t9jfJ90dehOmpCyGTGWXr6tFzN8663Et8UFLcw3IdV7JJt88iZw== +"@ethereumjs/tx@^3.2.1", "@ethereumjs/tx@^3.3.2", "@ethereumjs/tx@^3.4.0": + version "3.4.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/tx/-/tx-3.4.0.tgz#7eb1947eefa55eb9cf05b3ca116fb7a3dbd0bce7" + integrity sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw== dependencies: - "@ethereumjs/common" "^2.5.0" - ethereumjs-util "^7.1.1" + "@ethereumjs/common" "^2.6.0" + ethereumjs-util "^7.1.3" -"@ethereumjs/vm@^5.5.2": - version "5.5.3" - resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.5.3.tgz#dc8b30dd35efb589db093592600207660fa8dada" - integrity sha512-0k5OreWnlgXYs54wohgO11jtGI05GDasj2EYxzuaStxTi15CS3vow5wGYELC1pG9xngE1F/mFmKi/f14XRuDow== +"@ethereumjs/vm@^5.6.0": + version "5.6.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/vm/-/vm-5.6.0.tgz#e0ca62af07de820143674c30b776b86c1983a464" + integrity sha512-J2m/OgjjiGdWF2P9bj/4LnZQ1zRoZhY8mRNVw/N3tXliGI8ai1sI1mlDPkLpeUUM4vq54gH6n0ZlSpz8U/qlYQ== dependencies: - "@ethereumjs/block" "^3.5.0" - "@ethereumjs/blockchain" "^5.4.1" - "@ethereumjs/common" "^2.5.0" - "@ethereumjs/tx" "^3.3.1" + "@ethereumjs/block" "^3.6.0" + "@ethereumjs/blockchain" "^5.5.0" + "@ethereumjs/common" "^2.6.0" + "@ethereumjs/tx" "^3.4.0" async-eventemitter "^0.2.4" core-js-pure "^3.0.1" debug "^2.2.0" - ethereumjs-util "^7.1.1" + ethereumjs-util "^7.1.3" functional-red-black-tree "^1.0.1" mcl-wasm "^0.7.1" - merkle-patricia-tree "^4.2.1" + merkle-patricia-tree "^4.2.2" rustbn.js "~0.2.0" - util.promisify "^1.0.1" - -"@ethersproject/abi@5.0.0-beta.153": - version "5.0.0-beta.153" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.0-beta.153.tgz#43a37172b33794e4562999f6e2d555b7599a8eee" - integrity sha512-aXweZ1Z7vMNzJdLpR1CZUAIgnwjrZeUSvN9syCwlBaEBUFJmFY+HHnfuTI5vIhVs/mRkfJVrbEyl51JZQqyjAg== - dependencies: - "@ethersproject/address" ">=5.0.0-beta.128" - "@ethersproject/bignumber" ">=5.0.0-beta.130" - "@ethersproject/bytes" ">=5.0.0-beta.129" - "@ethersproject/constants" ">=5.0.0-beta.128" - "@ethersproject/hash" ">=5.0.0-beta.128" - "@ethersproject/keccak256" ">=5.0.0-beta.127" - "@ethersproject/logger" ">=5.0.0-beta.129" - "@ethersproject/properties" ">=5.0.0-beta.131" - "@ethersproject/strings" ">=5.0.0-beta.130" "@ethersproject/abi@5.0.7": version "5.0.7" @@ -165,7 +200,7 @@ "@ethersproject/properties" "^5.0.3" "@ethersproject/strings" "^5.0.4" -"@ethersproject/abi@5.5.0", "@ethersproject/abi@^5.5.0": +"@ethersproject/abi@5.5.0", "@ethersproject/abi@^5.0.0-beta.146", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.5.0.tgz#fb52820e22e50b854ff15ce1647cc508d6660613" integrity sha512-loW7I4AohP5KycATvc0MgujU6JyCHPqHdeoo9z3Nr9xEiNioxa65ccdm1+fsoJhkuhdRtfcL8cfyGamz2AxZ5w== @@ -180,36 +215,6 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" -"@ethersproject/abi@^5.0.0-beta.146": - version "5.0.13" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.0.13.tgz#600a559c3730467716595658beaa2894b4352bcc" - integrity sha512-2coOH3D7ra1lwamKEH0HVc+Jbcsw5yfeCgmY8ekhCDualEiyyovD2qDcMBBcY3+kjoLHVTmo7ost6MNClxdOrg== - dependencies: - "@ethersproject/address" "^5.0.9" - "@ethersproject/bignumber" "^5.0.13" - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/constants" "^5.0.8" - "@ethersproject/hash" "^5.0.10" - "@ethersproject/keccak256" "^5.0.7" - "@ethersproject/logger" "^5.0.8" - "@ethersproject/properties" "^5.0.7" - "@ethersproject/strings" "^5.0.8" - -"@ethersproject/abi@^5.1.2": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.4.0.tgz#a6d63bdb3672f738398846d4279fa6b6c9818242" - integrity sha512-9gU2H+/yK1j2eVMdzm6xvHSnMxk8waIHQGYCZg5uvAyH0rsAzxkModzBSpbAkAuhKFEovC2S9hM4nPuLym8IZw== - dependencies: - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/hash" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - "@ethersproject/abstract-provider@5.5.1", "@ethersproject/abstract-provider@^5.5.0": version "5.5.1" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.5.1.tgz#2f1f6e8a3ab7d378d8ad0b5718460f85649710c5" @@ -223,32 +228,6 @@ "@ethersproject/transactions" "^5.5.0" "@ethersproject/web" "^5.5.0" -"@ethersproject/abstract-provider@^5.0.8": - version "5.0.10" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.0.10.tgz#a533aed39a5f27312745c8c4c40fa25fc884831c" - integrity sha512-OSReY5iz94iIaPlRvLiJP8YVIvQLx4aUvMMnHWSaA/vTU8QHZmgNlt4OBdYV1+aFY8Xl+VRYiWBHq72ZDKXXCQ== - dependencies: - "@ethersproject/bignumber" "^5.0.13" - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/logger" "^5.0.8" - "@ethersproject/networks" "^5.0.7" - "@ethersproject/properties" "^5.0.7" - "@ethersproject/transactions" "^5.0.9" - "@ethersproject/web" "^5.0.12" - -"@ethersproject/abstract-provider@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.4.0.tgz#415331031b0f678388971e1987305244edc04e1d" - integrity sha512-vPBR7HKUBY0lpdllIn7tLIzNN7DrVnhCLKSzY0l8WAwxz686m/aL7ASDzrVxV93GJtIub6N2t4dfZ29CkPOxgA== - dependencies: - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/networks" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/transactions" "^5.4.0" - "@ethersproject/web" "^5.4.0" - "@ethersproject/abstract-signer@5.5.0", "@ethersproject/abstract-signer@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.5.0.tgz#590ff6693370c60ae376bf1c7ada59eb2a8dd08d" @@ -260,29 +239,7 @@ "@ethersproject/logger" "^5.5.0" "@ethersproject/properties" "^5.5.0" -"@ethersproject/abstract-signer@^5.0.10": - version "5.0.14" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.0.14.tgz#30ef912b0f86599d90fdffc65c110452e7b55cf1" - integrity sha512-JztBwVO7o5OHLh2vyjordlS4/1EjRyaECtc8vPdXTF1i4dXN+J0coeRoPN6ZFbBvi/YbaB6br2fvqhst1VQD/g== - dependencies: - "@ethersproject/abstract-provider" "^5.0.8" - "@ethersproject/bignumber" "^5.0.13" - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/logger" "^5.0.8" - "@ethersproject/properties" "^5.0.7" - -"@ethersproject/abstract-signer@^5.4.0": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.4.1.tgz#e4e9abcf4dd4f1ba0db7dff9746a5f78f355ea81" - integrity sha512-SkkFL5HVq1k4/25dM+NWP9MILgohJCgGv5xT5AcRruGz4ILpfHeBtO/y6j+Z3UN/PAjDeb4P7E51Yh8wcGNLGA== - dependencies: - "@ethersproject/abstract-provider" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - -"@ethersproject/address@5.5.0", "@ethersproject/address@^5.5.0": +"@ethersproject/address@5.5.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.5.0.tgz#bcc6f576a553f21f3dd7ba17248f81b473c9c78f" integrity sha512-l4Nj0eWlTUh6ro5IbPTgbpT4wRbdH5l8CQf7icF7sb/SI3Nhd9Y9HzhonTSTi6CefI0necIw7LJqQPopPLZyWw== @@ -293,28 +250,6 @@ "@ethersproject/logger" "^5.5.0" "@ethersproject/rlp" "^5.5.0" -"@ethersproject/address@>=5.0.0-beta.128", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.0.4", "@ethersproject/address@^5.0.9": - version "5.0.11" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.0.11.tgz#12022e8c590c33939beb5ab18b401ecf585eac59" - integrity sha512-Et4GBdD8/tsBGjCEOKee9upN29qjL5kbRcmJifb4Penmiuh9GARXL2/xpXvEp5EW+EIW/rfCHFJrkYBgoQFQBw== - dependencies: - "@ethersproject/bignumber" "^5.0.13" - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/keccak256" "^5.0.7" - "@ethersproject/logger" "^5.0.8" - "@ethersproject/rlp" "^5.0.7" - -"@ethersproject/address@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.4.0.tgz#ba2d00a0f8c4c0854933b963b9a3a9f6eb4a37a3" - integrity sha512-SD0VgOEkcACEG/C6xavlU1Hy3m5DGSXW3CUHkaaEHbAPPsgi0coP5oNPsxau8eTlZOk/bpa/hKeCNoK5IzVI2Q== - dependencies: - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/rlp" "^5.4.0" - "@ethersproject/base64@5.5.0", "@ethersproject/base64@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.5.0.tgz#881e8544e47ed976930836986e5eb8fab259c090" @@ -322,20 +257,6 @@ dependencies: "@ethersproject/bytes" "^5.5.0" -"@ethersproject/base64@^5.0.7": - version "5.0.9" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.0.9.tgz#bb1f35d3dba92082a574d5e2418f9202a0a1a7e6" - integrity sha512-37RBz5LEZ9SlTNGiWCYFttnIN9J7qVs9Xo2EbqGqDH5LfW9EIji66S+YDMpXVo1zWDax1FkEldAoatxHK2gfgA== - dependencies: - "@ethersproject/bytes" "^5.0.9" - -"@ethersproject/base64@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.4.0.tgz#7252bf65295954c9048c7ca5f43e5c86441b2a9a" - integrity sha512-CjQw6E17QDSSC5jiM9YpF7N1aSCHmYGMt9bWD8PWv6YPMxjsys2/Q8xLrROKI3IWJ7sFfZ8B3flKDTM5wlWuZQ== - dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/basex@5.5.0", "@ethersproject/basex@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.5.0.tgz#e40a53ae6d6b09ab4d977bd037010d4bed21b4d3" @@ -344,7 +265,7 @@ "@ethersproject/bytes" "^5.5.0" "@ethersproject/properties" "^5.5.0" -"@ethersproject/bignumber@5.5.0", "@ethersproject/bignumber@^5.5.0": +"@ethersproject/bignumber@5.5.0", "@ethersproject/bignumber@^5.0.7", "@ethersproject/bignumber@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.5.0.tgz#875b143f04a216f4f8b96245bde942d42d279527" integrity sha512-6Xytlwvy6Rn3U3gKEc1vP7nR92frHkv6wtVr95LFR3jREXiCPzdWxKQ1cx4JGQBXxcguAwjA8murlYN2TSiEbg== @@ -353,66 +274,20 @@ "@ethersproject/logger" "^5.5.0" bn.js "^4.11.9" -"@ethersproject/bignumber@>=5.0.0-beta.130", "@ethersproject/bignumber@^5.0.13", "@ethersproject/bignumber@^5.0.7": - version "5.0.15" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.0.15.tgz#b089b3f1e0381338d764ac1c10512f0c93b184ed" - integrity sha512-MTADqnyacvdRwtKh7o9ujwNDSM1SDJjYDMYAzjIgjoi9rh6TY4suMbhCa3i2vh3SUXiXSICyTI8ui+NPdrZ9Lw== - dependencies: - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/logger" "^5.0.8" - bn.js "^4.4.0" - -"@ethersproject/bignumber@^5.4.0": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.4.1.tgz#64399d3b9ae80aa83d483e550ba57ea062c1042d" - integrity sha512-fJhdxqoQNuDOk6epfM7yD6J8Pol4NUCy1vkaGAkuujZm0+lNow//MKu1hLhRiYV4BsOHyBv5/lsTjF+7hWwhJg== - dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - bn.js "^4.11.9" - -"@ethersproject/bytes@5.5.0", "@ethersproject/bytes@^5.5.0": +"@ethersproject/bytes@5.5.0", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.5.0.tgz#cb11c526de657e7b45d2e0f0246fb3b9d29a601c" integrity sha512-ABvc7BHWhZU9PNM/tANm/Qx4ostPGadAuQzWTr3doklZOhDlmcBqclrQe/ZXUIj3K8wC28oYeuRa+A37tX9kog== dependencies: "@ethersproject/logger" "^5.5.0" -"@ethersproject/bytes@>=5.0.0-beta.129", "@ethersproject/bytes@^5.0.4", "@ethersproject/bytes@^5.0.9": - version "5.0.11" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.0.11.tgz#21118e75b1d00db068984c15530e316021101276" - integrity sha512-D51plLYY5qF05AsoVQwIZVLqlBkaTPVHVP/1WmmBIWyHB0cRW0C9kh0kx5Exo51rB63Hk8PfHxc7SmpoaQFEyg== - dependencies: - "@ethersproject/logger" "^5.0.8" - -"@ethersproject/bytes@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.4.0.tgz#56fa32ce3bf67153756dbaefda921d1d4774404e" - integrity sha512-H60ceqgTHbhzOj4uRc/83SCN9d+BSUnOkrr2intevqdtEMO1JFVZ1XL84OEZV+QjV36OaZYxtnt4lGmxcGsPfA== - dependencies: - "@ethersproject/logger" "^5.4.0" - -"@ethersproject/constants@5.5.0", "@ethersproject/constants@^5.5.0": +"@ethersproject/constants@5.5.0", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.5.0.tgz#d2a2cd7d94bd1d58377d1d66c4f53c9be4d0a45e" integrity sha512-2MsRRVChkvMWR+GyMGY4N1sAX9Mt3J9KykCsgUFd/1mwS0UH1qw+Bv9k1UJb3X3YJYFco9H20pjSlOIfCG5HYQ== dependencies: "@ethersproject/bignumber" "^5.5.0" -"@ethersproject/constants@>=5.0.0-beta.128", "@ethersproject/constants@^5.0.4", "@ethersproject/constants@^5.0.8": - version "5.0.10" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.0.10.tgz#eb0c604fbc44c53ba9641eed31a1d0c9e1ebcadc" - integrity sha512-OSo8jxkHLDXieCy8bgOFR7lMfgPxEzKvSDdP+WAWHCDM8+orwch0B6wzkTmiQFgryAtIctrBt5glAdJikZ3hGw== - dependencies: - "@ethersproject/bignumber" "^5.0.13" - -"@ethersproject/constants@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.4.0.tgz#ee0bdcb30bf1b532d2353c977bf2ef1ee117958a" - integrity sha512-tzjn6S7sj9+DIIeKTJLjK9WGN2Tj0P++Z8ONEIlZjyoTkBuODN+0VfhAyYksKi43l1Sx9tX2VlFfzjfmr5Wl3Q== - dependencies: - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/contracts@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.5.0.tgz#b735260d4bd61283a670a82d5275e2a38892c197" @@ -429,7 +304,7 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/transactions" "^5.5.0" -"@ethersproject/hash@5.5.0", "@ethersproject/hash@^5.5.0": +"@ethersproject/hash@5.5.0", "@ethersproject/hash@^5.0.4", "@ethersproject/hash@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.5.0.tgz#7cee76d08f88d1873574c849e0207dcb32380cc9" integrity sha512-dnGVpK1WtBjmnp3mUT0PlU2MpapnwWI0PibldQEq1408tQBAbZpPidkWoVVuNMOl/lISO3+4hXZWCL3YV7qzfg== @@ -443,34 +318,6 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" -"@ethersproject/hash@>=5.0.0-beta.128", "@ethersproject/hash@^5.0.10", "@ethersproject/hash@^5.0.4": - version "5.0.12" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.0.12.tgz#1074599f7509e2ca2bb7a3d4f4e39ab3a796da42" - integrity sha512-kn4QN+fhNFbUgX3XZTZUaQixi0oyfIEY+hfW+KtkHu+rq7dV76oAIvaLEEynu1/4npOL38E4X4YI42gGZk+C0Q== - dependencies: - "@ethersproject/abstract-signer" "^5.0.10" - "@ethersproject/address" "^5.0.9" - "@ethersproject/bignumber" "^5.0.13" - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/keccak256" "^5.0.7" - "@ethersproject/logger" "^5.0.8" - "@ethersproject/properties" "^5.0.7" - "@ethersproject/strings" "^5.0.8" - -"@ethersproject/hash@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.4.0.tgz#d18a8e927e828e22860a011f39e429d388344ae0" - integrity sha512-xymAM9tmikKgbktOCjW60Z5sdouiIIurkZUr9oW5NOex5uwxrbsYG09kb5bMcNjlVeJD3yPivTNzViIs1GCbqA== - dependencies: - "@ethersproject/abstract-signer" "^5.4.0" - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - "@ethersproject/hdnode@5.5.0", "@ethersproject/hdnode@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.5.0.tgz#4a04e28f41c546f7c978528ea1575206a200ddf6" @@ -508,7 +355,7 @@ aes-js "3.0.0" scrypt-js "3.0.1" -"@ethersproject/keccak256@5.5.0", "@ethersproject/keccak256@^5.5.0": +"@ethersproject/keccak256@5.5.0", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.5.0.tgz#e4b1f9d7701da87c564ffe336f86dcee82983492" integrity sha512-5VoFCTjo2rYbBe1l2f4mccaRFN/4VQEYFwwn04aJV2h7qf4ZvI2wFxUE1XOX+snbwCLRzIeikOqtAoPwMza9kg== @@ -516,58 +363,18 @@ "@ethersproject/bytes" "^5.5.0" js-sha3 "0.8.0" -"@ethersproject/keccak256@>=5.0.0-beta.127", "@ethersproject/keccak256@^5.0.3", "@ethersproject/keccak256@^5.0.7": - version "5.0.9" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.0.9.tgz#ca0d86e4af56c13b1ef25e533bde3e96d28f647d" - integrity sha512-zhdUTj6RGtCJSgU+bDrWF6cGbvW453LoIC1DSNWrTlXzC7WuH4a+EiPrgc7/kNoRxerKuA/cxYlI8GwNtVtDlw== - dependencies: - "@ethersproject/bytes" "^5.0.9" - js-sha3 "0.5.7" - -"@ethersproject/keccak256@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.4.0.tgz#7143b8eea4976080241d2bd92e3b1f1bf7025318" - integrity sha512-FBI1plWet+dPUvAzPAeHzRKiPpETQzqSUWR1wXJGHVWi4i8bOSrpC3NwpkPjgeXG7MnugVc1B42VbfnQikyC/A== - dependencies: - "@ethersproject/bytes" "^5.4.0" - js-sha3 "0.5.7" - -"@ethersproject/logger@5.5.0", "@ethersproject/logger@^5.5.0": +"@ethersproject/logger@5.5.0", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.5.0.tgz#0c2caebeff98e10aefa5aef27d7441c7fd18cf5d" integrity sha512-rIY/6WPm7T8n3qS2vuHTUBPdXHl+rGxWxW5okDfo9J4Z0+gRRZT0msvUdIJkE4/HS29GUMziwGaaKO2bWONBrg== -"@ethersproject/logger@>=5.0.0-beta.129", "@ethersproject/logger@^5.0.5", "@ethersproject/logger@^5.0.8": - version "5.0.10" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.0.10.tgz#fd884688b3143253e0356ef92d5f22d109d2e026" - integrity sha512-0y2T2NqykDrbPM3Zw9RSbPkDOxwChAL8detXaom76CfYoGxsOnRP/zTX8OUAV+x9LdwzgbWvWmeXrc0M7SuDZw== - -"@ethersproject/logger@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.4.0.tgz#f39adadf62ad610c420bcd156fd41270e91b3ca9" - integrity sha512-xYdWGGQ9P2cxBayt64d8LC8aPFJk6yWCawQi/4eJ4+oJdMMjEBMrIcIMZ9AxhwpPVmnBPrsB10PcXGmGAqgUEQ== - -"@ethersproject/networks@5.5.0", "@ethersproject/networks@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.5.0.tgz#babec47cab892c51f8dd652ce7f2e3e14283981a" - integrity sha512-KWfP3xOnJeF89Uf/FCJdV1a2aDJe5XTN2N52p4fcQ34QhDqQFkgQKZ39VGtiqUgHcLI8DfT0l9azC3KFTunqtA== +"@ethersproject/networks@5.5.1", "@ethersproject/networks@^5.5.0": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.5.1.tgz#b7f7b9fb88dec1ea48f739b7fb9621311aa8ce6c" + integrity sha512-tYRDM4zZtSUcKnD4UMuAlj7SeXH/k5WC4SP2u1Pn57++JdXHkRu2zwNkgNogZoxHzhm9Q6qqurDBVptHOsW49Q== dependencies: "@ethersproject/logger" "^5.5.0" -"@ethersproject/networks@^5.0.7": - version "5.0.9" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.0.9.tgz#ec5da11e4d4bfd69bec4eaebc9ace33eb9569279" - integrity sha512-L8+VCQwArBLGkxZb/5Ns/OH/OxP38AcaveXIxhUTq+VWpXYjrObG3E7RDQIKkUx1S1IcQl/UWTz5w4DK0UitJg== - dependencies: - "@ethersproject/logger" "^5.0.8" - -"@ethersproject/networks@^5.4.0": - version "5.4.1" - resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.4.1.tgz#2ce83b8e42aa85216e5d277a7952d97b6ce8d852" - integrity sha512-8SvowCKz9Uf4xC5DTKI8+il8lWqOr78kmiqAVLYT9lzB8aSmJHQMD1GSuJI0CW4hMAnzocpGpZLgiMdzsNSPig== - dependencies: - "@ethersproject/logger" "^5.4.0" - "@ethersproject/pbkdf2@5.5.0", "@ethersproject/pbkdf2@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.5.0.tgz#e25032cdf02f31505d47afbf9c3e000d95c4a050" @@ -576,31 +383,17 @@ "@ethersproject/bytes" "^5.5.0" "@ethersproject/sha2" "^5.5.0" -"@ethersproject/properties@5.5.0", "@ethersproject/properties@^5.5.0": +"@ethersproject/properties@5.5.0", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.5.0.tgz#61f00f2bb83376d2071baab02245f92070c59995" integrity sha512-l3zRQg3JkD8EL3CPjNK5g7kMx4qSwiR60/uk5IVjd3oq1MZR5qUg40CNOoEJoX5wc3DyY5bt9EbMk86C7x0DNA== dependencies: "@ethersproject/logger" "^5.5.0" -"@ethersproject/properties@>=5.0.0-beta.131", "@ethersproject/properties@^5.0.3", "@ethersproject/properties@^5.0.7": - version "5.0.9" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.0.9.tgz#d7aae634680760136ea522e25c3ef043ec15b5c2" - integrity sha512-ZCjzbHYTw+rF1Pn8FDCEmx3gQttwIHcm/6Xee8g/M3Ga3SfW4tccNMbs5zqnBH0E4RoOPaeNgyg1O68TaF0tlg== - dependencies: - "@ethersproject/logger" "^5.0.8" - -"@ethersproject/properties@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.4.0.tgz#38ba20539b44dcc5d5f80c45ad902017dcdbefe7" - integrity sha512-7jczalGVRAJ+XSRvNA6D5sAwT4gavLq3OXPuV/74o3Rd2wuzSL035IMpIMgei4CYyBdialJMrTqkOnzccLHn4A== - dependencies: - "@ethersproject/logger" "^5.4.0" - -"@ethersproject/providers@5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.5.0.tgz#bc2876a8fe5e0053ed9828b1f3767ae46e43758b" - integrity sha512-xqMbDnS/FPy+J/9mBLKddzyLLAQFjrVff5g00efqxPzcAwXiR+SiCGVy6eJ5iAIirBOATjx7QLhDNPGV+AEQsw== +"@ethersproject/providers@5.5.1": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.5.1.tgz#ba87e3c93219bbd2e2edf8b369873aee774abf04" + integrity sha512-2zdD5sltACDWhjUE12Kucg2PcgM6V2q9JMyVvObtVGnzJu+QSmibbP+BHQyLWZUBfLApx2942+7DC5D+n4wBQQ== dependencies: "@ethersproject/abstract-provider" "^5.5.0" "@ethersproject/abstract-signer" "^5.5.0" @@ -638,22 +431,6 @@ "@ethersproject/bytes" "^5.5.0" "@ethersproject/logger" "^5.5.0" -"@ethersproject/rlp@^5.0.7": - version "5.0.9" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.0.9.tgz#da205bf8a34d3c3409eb73ddd237130a4b376aff" - integrity sha512-ns1U7ZMVeruUW6JXc4om+1w3w4ynHN/0fpwmeNTsAjwGKoF8SAUgue6ylKpHKWSti2idx7jDxbn8hNNFHk67CA== - dependencies: - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/logger" "^5.0.8" - -"@ethersproject/rlp@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.4.0.tgz#de61afda5ff979454e76d3b3310a6c32ad060931" - integrity sha512-0I7MZKfi+T5+G8atId9QaQKHRvvasM/kqLyAH4XxBCBchAooH2EX5rL9kYZWwcm3awYV+XC7VF6nLhfeQFKVPg== - dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/sha2@5.5.0", "@ethersproject/sha2@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.5.0.tgz#a40a054c61f98fd9eee99af2c3cc6ff57ec24db7" @@ -675,28 +452,6 @@ elliptic "6.5.4" hash.js "1.1.7" -"@ethersproject/signing-key@^5.0.8": - version "5.0.11" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.0.11.tgz#19fc5c4597e18ad0a5efc6417ba5b74069fdd2af" - integrity sha512-Jfcru/BGwdkXhLxT+8WCZtFy7LL0TPFZw05FAb5asxB/MyVsEfNdNxGDtjVE9zXfmRSPe/EusXYY4K7wcygOyQ== - dependencies: - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/logger" "^5.0.8" - "@ethersproject/properties" "^5.0.7" - elliptic "6.5.4" - -"@ethersproject/signing-key@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.4.0.tgz#2f05120984e81cf89a3d5f6dec5c68ee0894fbec" - integrity sha512-q8POUeywx6AKg2/jX9qBYZIAmKSB4ubGXdQ88l40hmATj29JnG5pp331nAWwwxPn2Qao4JpWHNZsQN+bPiSW9A== - dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - bn.js "^4.11.9" - elliptic "6.5.4" - hash.js "1.1.7" - "@ethersproject/solidity@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.5.0.tgz#2662eb3e5da471b85a20531e420054278362f93f" @@ -709,7 +464,7 @@ "@ethersproject/sha2" "^5.5.0" "@ethersproject/strings" "^5.5.0" -"@ethersproject/strings@5.5.0", "@ethersproject/strings@^5.5.0": +"@ethersproject/strings@5.5.0", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.5.0.tgz#e6784d00ec6c57710755699003bc747e98c5d549" integrity sha512-9fy3TtF5LrX/wTrBaT8FGE6TDJyVjOvXynXJz5MT5azq+E6D92zuKNx7i29sWW2FjVOaWjAsiZ1ZWznuduTIIQ== @@ -718,25 +473,7 @@ "@ethersproject/constants" "^5.5.0" "@ethersproject/logger" "^5.5.0" -"@ethersproject/strings@>=5.0.0-beta.130", "@ethersproject/strings@^5.0.4", "@ethersproject/strings@^5.0.8": - version "5.0.10" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.0.10.tgz#ddce1e9724f4ac4f3f67e0cac0b48748e964bfdb" - integrity sha512-KAeoS1tZ9/5ECXiIZA6S6hywbD0so2VmuW+Wfyo5EDXeyZ6Na1nxTPhTnW7voQmjbeYJffCrOc0qLFJeylyg7w== - dependencies: - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/constants" "^5.0.8" - "@ethersproject/logger" "^5.0.8" - -"@ethersproject/strings@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.4.0.tgz#fb12270132dd84b02906a8d895ae7e7fa3d07d9a" - integrity sha512-k/9DkH5UGDhv7aReXLluFG5ExurwtIpUfnDNhQA29w896Dw3i4uDTz01Quaptbks1Uj9kI8wo9tmW73wcIEaWA== - dependencies: - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - -"@ethersproject/transactions@5.5.0", "@ethersproject/transactions@^5.5.0": +"@ethersproject/transactions@5.5.0", "@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.5.0.tgz#7e9bf72e97bcdf69db34fe0d59e2f4203c7a2908" integrity sha512-9RZYSKX26KfzEd/1eqvv8pLauCKzDTub0Ko4LfIgaERvRuwyaNV78mJs7cpIgZaDl6RJui4o49lHwwCM0526zA== @@ -751,36 +488,6 @@ "@ethersproject/rlp" "^5.5.0" "@ethersproject/signing-key" "^5.5.0" -"@ethersproject/transactions@^5.0.0-beta.135", "@ethersproject/transactions@^5.0.9": - version "5.0.11" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.0.11.tgz#b31df5292f47937136a45885d6ee6112477c13df" - integrity sha512-ftsRvR9+gQp7L63F6+XmstvsZ4w8GtWvQB08e/zB+oB86Fnhq8+i/tkgpJplSHC8I/qgiCisva+M3u2GVhDFPA== - dependencies: - "@ethersproject/address" "^5.0.9" - "@ethersproject/bignumber" "^5.0.13" - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/constants" "^5.0.8" - "@ethersproject/keccak256" "^5.0.7" - "@ethersproject/logger" "^5.0.8" - "@ethersproject/properties" "^5.0.7" - "@ethersproject/rlp" "^5.0.7" - "@ethersproject/signing-key" "^5.0.8" - -"@ethersproject/transactions@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.4.0.tgz#a159d035179334bd92f340ce0f77e83e9e1522e0" - integrity sha512-s3EjZZt7xa4BkLknJZ98QGoIza94rVjaEed0rzZ/jB9WrIuu/1+tjvYCWzVrystXtDswy7TPBeIepyXwSYa4WQ== - dependencies: - "@ethersproject/address" "^5.4.0" - "@ethersproject/bignumber" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/constants" "^5.4.0" - "@ethersproject/keccak256" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/rlp" "^5.4.0" - "@ethersproject/signing-key" "^5.4.0" - "@ethersproject/units@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.5.0.tgz#104d02db5b5dc42cc672cc4587bafb87a95ee45e" @@ -811,10 +518,10 @@ "@ethersproject/transactions" "^5.5.0" "@ethersproject/wordlists" "^5.5.0" -"@ethersproject/web@5.5.0", "@ethersproject/web@^5.5.0": - version "5.5.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.5.0.tgz#0e5bb21a2b58fb4960a705bfc6522a6acf461e28" - integrity sha512-BEgY0eL5oH4mAo37TNYVrFeHsIXLRxggCRG/ksRIxI2X5uj5IsjGmcNiRN/VirQOlBxcUhCgHhaDLG4m6XAVoA== +"@ethersproject/web@5.5.1", "@ethersproject/web@^5.5.0": + version "5.5.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.5.1.tgz#cfcc4a074a6936c657878ac58917a61341681316" + integrity sha512-olvLvc1CB12sREc1ROPSHTdFCdvMh0J5GSJYiQg2D0hdD4QmJDy8QYDb1CvoqD/bF1c++aeKv2sR5uduuG9dQg== dependencies: "@ethersproject/base64" "^5.5.0" "@ethersproject/bytes" "^5.5.0" @@ -822,28 +529,6 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" -"@ethersproject/web@^5.0.12": - version "5.0.14" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.0.14.tgz#6e7bebdd9fb967cb25ee60f44d9218dc0803bac4" - integrity sha512-QpTgplslwZ0Sp9oKNLoRuS6TKxnkwfaEk3gr7zd7XLF8XBsYejsrQO/03fNfnMx/TAT/RR6WEw/mbOwpRSeVRA== - dependencies: - "@ethersproject/base64" "^5.0.7" - "@ethersproject/bytes" "^5.0.9" - "@ethersproject/logger" "^5.0.8" - "@ethersproject/properties" "^5.0.7" - "@ethersproject/strings" "^5.0.8" - -"@ethersproject/web@^5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.4.0.tgz#49fac173b96992334ed36a175538ba07a7413d1f" - integrity sha512-1bUusGmcoRLYgMn6c1BLk1tOKUIFuTg8j+6N8lYlbMpDesnle+i3pGSagGNvwjaiLo4Y5gBibwctpPRmjrh4Og== - dependencies: - "@ethersproject/base64" "^5.4.0" - "@ethersproject/bytes" "^5.4.0" - "@ethersproject/logger" "^5.4.0" - "@ethersproject/properties" "^5.4.0" - "@ethersproject/strings" "^5.4.0" - "@ethersproject/wordlists@5.5.0", "@ethersproject/wordlists@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.5.0.tgz#aac74963aa43e643638e5172353d931b347d584f" @@ -855,50 +540,50 @@ "@ethersproject/properties" "^5.5.0" "@ethersproject/strings" "^5.5.0" -"@humanwhocodes/config-array@^0.6.0": - version "0.6.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.6.0.tgz#b5621fdb3b32309d2d16575456cbc277fa8f021a" - integrity sha512-JQlEKbcgEUjBFhLIF4iqM7u/9lwgHRBcpHrmUNCALK0Q3amXN6lxdoXLnF0sm11E9VqTmBALR87IlUg1bZ8A9A== +"@humanwhocodes/config-array@^0.9.2": + version "0.9.2" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.9.2.tgz#68be55c737023009dfc5fe245d51181bb6476914" + integrity sha512-UXOuFCGcwciWckOpmfKDq/GyhlTf9pN/BzG//x8p8zTOFEcGuA68ANXheFS0AGvy3qgZqLBUkMs7hqzqCKOVwA== dependencies: - "@humanwhocodes/object-schema" "^1.2.0" + "@humanwhocodes/object-schema" "^1.2.1" debug "^4.1.1" minimatch "^3.0.4" -"@humanwhocodes/object-schema@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz#87de7af9c231826fdd68ac7258f77c429e0e5fcf" - integrity sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w== +"@humanwhocodes/object-schema@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz#b520529ec21d8e5945a1851dfd1c32e94e39ff45" + integrity sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA== -"@nodelib/fs.scandir@2.1.4": - version "2.1.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" - integrity sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA== +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== dependencies: - "@nodelib/fs.stat" "2.0.4" + "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.4", "@nodelib/fs.stat@^2.0.2": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz#a3f2dd61bab43b8db8fa108a121cfffe4c676655" - integrity sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q== +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== "@nodelib/fs.walk@^1.2.3": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz#cce9396b30aa5afe9e3756608f5831adcb53d063" - integrity sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow== + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== dependencies: - "@nodelib/fs.scandir" "2.1.4" + "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@nomiclabs/hardhat-ethers@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.2.tgz#c472abcba0c5185aaa4ad4070146e95213c68511" - integrity sha512-6quxWe8wwS4X5v3Au8q1jOvXYEPkS1Fh+cME5u6AwNdnI4uERvPlVjlgRWzpnb+Rrt1l/cEqiNRH9GlsBMSDQg== +"@nomiclabs/hardhat-ethers@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.0.3.tgz#06e20a57274f6ce3148132910e723948a711edf1" + integrity sha512-IJ0gBotVtO7YyLZyHNgbxzskUtFok+JkRlKPo8YELqj1ms9XL6Qm3vsfsGdZr22wnJeVEF5TQPotKuwQk21Dag== -"@nomiclabs/hardhat-etherscan@^2.1.7": - version "2.1.7" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.7.tgz#f76ce0da1b503d3e506bffbd044967b1a9443675" - integrity sha512-9nt9EXubnkd2aTMnQIqKtp80bQFhun88krfB31FN2wB0T54b8YuK0riG2d+EKq/D3t1Kb00oA7oFSFpHLIbLDQ== +"@nomiclabs/hardhat-etherscan@^2.1.8": + version "2.1.8" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-etherscan/-/hardhat-etherscan-2.1.8.tgz#e206275e96962cd15e5ba9148b44388bc922d8c2" + integrity sha512-0+rj0SsZotVOcTLyDOxnOc3Gulo8upo0rsw/h+gBPcmtj91YqYJNhdARHoBxOhhE8z+5IUQPx+Dii04lXT14PA== dependencies: "@ethersproject/abi" "^5.1.2" "@ethersproject/address" "^5.0.2" @@ -908,15 +593,15 @@ node-fetch "^2.6.0" semver "^6.3.0" -"@nomiclabs/hardhat-truffle5@^2.0.0": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-truffle5/-/hardhat-truffle5-2.0.2.tgz#bfc29843a5a78a6eceafc3f5c24b6163b92424a1" - integrity sha512-QHxtwNPmAYSxiUFCLqfTy3lbIgMeh0Uqcv5g9ioQWExMrYpwqW0goXTH6JWx3gwYIsF2ALtI4/10CKj7zLDyWA== +"@nomiclabs/hardhat-truffle5@^2.0.3": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-truffle5/-/hardhat-truffle5-2.0.3.tgz#254319ea9f91bd22f124252d89399106768e5207" + integrity sha512-KbRrFB4NwppzwR8XkYyOopOO6XWOSqtxIoavCIDQ5iIikuZC+WGGoFgeHxypipk5qfD0DWi031IZlXBjOOuYAQ== dependencies: "@nomiclabs/truffle-contract" "^4.2.23" "@types/chai" "^4.2.0" chai "^4.2.0" - ethereumjs-util "^7.1.0" + ethereumjs-util "^7.1.3" fs-extra "^7.0.1" "@nomiclabs/hardhat-web3@^2.0.0": @@ -942,9 +627,9 @@ source-map-support "^0.5.19" "@openzeppelin/contract-loader@^0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@openzeppelin/contract-loader/-/contract-loader-0.6.2.tgz#f0c08f14d5dfeaeb44952ba777ec9ce1c9ff9759" - integrity sha512-/P8v8ZFVwK+Z7rHQH2N3hqzEmTzLFjhMtvNK4FeIak6DEeONZ92vdFaFb10CCCQtp390Rp/Y57Rtfrm50bUdMQ== + version "0.6.3" + resolved "https://registry.yarnpkg.com/@openzeppelin/contract-loader/-/contract-loader-0.6.3.tgz#61a7b44de327e40b7d53f39e0fb59bbf847335c3" + integrity sha512-cOFIjBjwbGgZhDZsitNgJl0Ye1rd5yu/Yx5LMgeq3u0ZYzldm4uObzHDFq4gjDdoypvyORjjJa3BlFA7eAnVIg== dependencies: find-up "^4.1.0" fs-extra "^8.1.0" @@ -1069,11 +754,6 @@ resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== -"@solidity-parser/parser@^0.12.0": - version "0.12.0" - resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.12.0.tgz#18a0fb2a9d2484b23176f63b16093c64794fc323" - integrity sha512-DT3f/Aa4tQysZwUsuqBwvr8YRJzKkvPUKV/9o2/o5EVw3xqlbzmtx4O60lTUcZdCawL+N8bBLNUyOGpHjGlJVQ== - "@solidity-parser/parser@^0.13.2": version "0.13.2" resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.13.2.tgz#b6c71d8ca0b382d90a7bbed241f9bc110af65cbe" @@ -1095,6 +775,15 @@ dependencies: defer-to-connect "^1.0.1" +"@truffle/abi-utils@^0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@truffle/abi-utils/-/abi-utils-0.2.4.tgz#9fc8bfc95bbe29a33cca3ab9028865b078e2f051" + integrity sha512-ICr5Sger6r5uj2G5GN9Zp9OQDCaCqe2ZyAEyvavDoFB+jX0zZFUCfDnv5jllGRhgzdYJ3mec2390mjUyz9jSZA== + dependencies: + change-case "3.0.2" + faker "^5.3.1" + fast-check "^2.12.1" + "@truffle/blockchain-utils@^0.0.25": version "0.0.25" resolved "https://registry.yarnpkg.com/@truffle/blockchain-utils/-/blockchain-utils-0.0.25.tgz#f4b320890113d282f25f1a1ecd65b94a8b763ac1" @@ -1102,16 +791,18 @@ dependencies: source-map-support "^0.5.19" -"@truffle/blockchain-utils@^0.0.28": - version "0.0.28" - resolved "https://registry.yarnpkg.com/@truffle/blockchain-utils/-/blockchain-utils-0.0.28.tgz#6e2c7695c013bcce89af0f05de88210a25f7344a" - integrity sha512-Q3vtGzDAGI3q2OQV1rUX/HYGJ0PB4RKbrgnwSV3YLc01YOkv4baF5ZJbMxtgLDhJQap1llrN59u2BOAa+jVCsg== +"@truffle/blockchain-utils@^0.0.31": + version "0.0.31" + resolved "https://registry.yarnpkg.com/@truffle/blockchain-utils/-/blockchain-utils-0.0.31.tgz#0503d9fb2ce3e05c167c27294927f2f88d70a24d" + integrity sha512-BFo/nyxwhoHqPrqBQA1EAmSxeNnspGLiOCMa9pAL7WYSjyNBlrHaqCMO/F2O87G+NUK/u06E70DiSP2BFP0ZZw== -"@truffle/codec@^0.10.2": - version "0.10.2" - resolved "https://registry.yarnpkg.com/@truffle/codec/-/codec-0.10.2.tgz#b59746c91124b56370011ac1e1ac9a489b35b3eb" - integrity sha512-m396zHfF5ee8zv0O0SctVt0/FxGPv/x9pTm24BHlDz540S6wiWwarBb20QF4sXfJ7lwe6ZfwtyQHExuszCENlg== +"@truffle/codec@^0.11.20": + version "0.11.20" + resolved "https://registry.yarnpkg.com/@truffle/codec/-/codec-0.11.20.tgz#dfd74d16b739837415f42590b7a73ffa79b8af71" + integrity sha512-OJtP/AEaYH0QNoq/Z0Pyo4muN0piJDTXQlWPSTb+SI+ypgzd0RT5QOcpmtc6Q24mfeWRB3QbJxQP0ZSeyo1MVA== dependencies: + "@truffle/abi-utils" "^0.2.4" + "@truffle/compile-common" "^0.7.22" big.js "^5.2.2" bn.js "^5.1.3" cbor "^5.1.0" @@ -1122,7 +813,7 @@ lodash.sum "^4.0.2" semver "^7.3.4" utf8 "^3.0.0" - web3-utils "1.2.9" + web3-utils "1.5.3" "@truffle/codec@^0.7.1": version "0.7.1" @@ -1142,33 +833,41 @@ utf8 "^3.0.0" web3-utils "1.2.9" -"@truffle/contract-schema@^3.2.5", "@truffle/contract-schema@^3.3.4": - version "3.3.4" - resolved "https://registry.yarnpkg.com/@truffle/contract-schema/-/contract-schema-3.3.4.tgz#95f0265cac7de7bcaa0542f5fe671a7896011bfe" - integrity sha512-HzscBl/GhZBvPNQeD9l6ewSHSkvNmE+bA0iTVa0Y2mNf5GD5Y3fK2NPyfbOdtckOvLqebvYGEDEPRiXc3BZ05g== +"@truffle/compile-common@^0.7.22": + version "0.7.22" + resolved "https://registry.yarnpkg.com/@truffle/compile-common/-/compile-common-0.7.22.tgz#c376eea36f59dc770ece3bc8cbb7132f49352846" + integrity sha512-afFKh0Wphn8JrCSjOORKjO8/E1X0EtQv6GpFJpQCAWo3/i4VGcSVKR1rjkknnExtjEGe9PJH/Ym/opGH3pQyDw== + dependencies: + "@truffle/error" "^0.0.14" + colors "^1.4.0" + +"@truffle/contract-schema@^3.2.5", "@truffle/contract-schema@^3.4.3": + version "3.4.3" + resolved "https://registry.yarnpkg.com/@truffle/contract-schema/-/contract-schema-3.4.3.tgz#c1bcde343f70b9438314202e103a7d77d684603c" + integrity sha512-pgaTgF4CKIpkqVYZVr2qGTxZZQOkNCWOXW9VQpKvLd4G0SNF2Y1gyhrFbBhoOUtYlbbSty+IEFFHsoAqpqlvpQ== dependencies: ajv "^6.10.0" - crypto-js "^3.1.9-1" debug "^4.3.1" "@truffle/contract@^4.0.35": - version "4.3.12" - resolved "https://registry.yarnpkg.com/@truffle/contract/-/contract-4.3.12.tgz#9c1fed962fae17a8fe1895c6e80314a00dc62cce" - integrity sha512-gnOkZe28k/pwPkl4Ke9mj7UwLHDr6nq1ZitZOhukXvq5mf6Ll9hsHhGCwlzKnxdwKHHUpJ/1saqp6OjXOiJYEw== - dependencies: - "@truffle/blockchain-utils" "^0.0.28" - "@truffle/contract-schema" "^3.3.4" - "@truffle/debug-utils" "^5.0.12" - "@truffle/error" "^0.0.12" - "@truffle/interface-adapter" "^0.4.20" + version "4.4.0" + resolved "https://registry.yarnpkg.com/@truffle/contract/-/contract-4.4.0.tgz#f49c50292e07cd147001899914dc58f08c351355" + integrity sha512-k/YbwIOJsRAn3+VseG/lOlFiqjValHYwXdEyCT5D1HRQ0MQZ7JPabR05+dAlY88BK5o9ejUXCh+TDc0CRDn/eQ== + dependencies: + "@ensdomains/ensjs" "^2.0.1" + "@truffle/blockchain-utils" "^0.0.31" + "@truffle/contract-schema" "^3.4.3" + "@truffle/debug-utils" "^6.0.1" + "@truffle/error" "^0.0.14" + "@truffle/interface-adapter" "^0.5.8" bignumber.js "^7.2.1" - ethereum-ens "^0.8.0" + debug "^4.3.1" ethers "^4.0.32" - web3 "1.2.9" - web3-core-helpers "1.2.9" - web3-core-promievent "1.2.9" - web3-eth-abi "1.2.9" - web3-utils "1.2.9" + web3 "1.5.3" + web3-core-helpers "1.5.3" + web3-core-promievent "1.5.3" + web3-eth-abi "1.5.3" + web3-utils "1.5.3" "@truffle/debug-utils@^4.2.9": version "4.2.14" @@ -1182,46 +881,54 @@ highlight.js "^9.15.8" highlightjs-solidity "^1.0.18" -"@truffle/debug-utils@^5.0.12": - version "5.0.12" - resolved "https://registry.yarnpkg.com/@truffle/debug-utils/-/debug-utils-5.0.12.tgz#82ff52cef545ca8c0274292fb97d473253df1570" - integrity sha512-NkdSLjAvyylZAOJeywYHzCWHkrAm0kVPVkZZUtsej0wAvzqqL6FWV/jy9wKtpAv5hYhCQBU9BKrPdfdTnE6dYA== +"@truffle/debug-utils@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@truffle/debug-utils/-/debug-utils-6.0.1.tgz#8935a316f3a59bcee37bab0e4c43eea7d1283fc3" + integrity sha512-ntuLPYwKNOIeWfeb2emO9Tu2v1aH6mCLGBrKRrDX4ofMUbPyN3ujxiCg/FCxbkL9cpkbH9zOHLmu2ubNlZ3gvA== dependencies: - "@truffle/codec" "^0.10.2" + "@truffle/codec" "^0.11.20" "@trufflesuite/chromafi" "^2.2.2" bn.js "^5.1.3" chalk "^2.4.2" debug "^4.3.1" - highlight.js "^10.4.0" - highlightjs-solidity "^1.0.21" + highlightjs-solidity "^2.0.2" "@truffle/error@^0.0.11": version "0.0.11" resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.11.tgz#2789c0042d7e796dcbb840c7a9b5d2bcd8e0e2d8" integrity sha512-ju6TucjlJkfYMmdraYY/IBJaFb+Sa+huhYtOoyOJ+G29KcgytUVnDzKGwC7Kgk6IsxQMm62Mc1E0GZzFbGGipw== -"@truffle/error@^0.0.12": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.12.tgz#83e02e6ffe1d154fe274141d90038a91fd1e186d" - integrity sha512-kZqqnPR9YDJG7KCDOcN1qH16Qs0oz1PzF0Y93AWdhXuL9S9HYo/RUUeqGKbPpRBEZldQUS8aa4EzfK08u5pu6g== +"@truffle/error@^0.0.14": + version "0.0.14" + resolved "https://registry.yarnpkg.com/@truffle/error/-/error-0.0.14.tgz#59683b5407bede7bddf16d80dc5592f9c5e5fa05" + integrity sha512-utJx+SZYoMqk8wldQG4gCVKhV8GwMJbWY7sLXFT/D8wWZTnE2peX7URFJh/cxkjTRCO328z1s2qewkhyVsu2HA== + +"@truffle/interface-adapter@^0.4.16": + version "0.4.24" + resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.4.24.tgz#5d6d4f10c756e967f19ac2ad1620d11d25c034bb" + integrity sha512-2Zho4dJbm/XGwNleY7FdxcjXiAR3SzdGklgrAW4N/YVmltaJv6bT56ACIbPNN6AdzkTSTO65OlsB/63sfSa/VA== + dependencies: + bn.js "^5.1.3" + ethers "^4.0.32" + web3 "1.3.6" -"@truffle/interface-adapter@^0.4.16", "@truffle/interface-adapter@^0.4.20": - version "0.4.20" - resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.4.20.tgz#cf3f176e6fe14321bf164d502bf8d05e50209eb5" - integrity sha512-GcdtXjU+Mhx/WuD3Af1thojHilhUAWtKfoNF09oEDyGSrS0QEWq9s9kOFjrfTFJrK+g0I6VXMrU2sIido96NBA== +"@truffle/interface-adapter@^0.5.8": + version "0.5.8" + resolved "https://registry.yarnpkg.com/@truffle/interface-adapter/-/interface-adapter-0.5.8.tgz#76cfd34374d85849e1164de1a3d5a3dce0dc5d01" + integrity sha512-vvy3xpq36oLgjjy8KE9l2Jabg3WcGPOt18tIyMfTQX9MFnbHoQA2Ne2i8xsd4p6KfxIqSjAB53Q9/nScAqY0UQ== dependencies: bn.js "^5.1.3" ethers "^4.0.32" - web3 "1.2.9" + web3 "1.5.3" "@truffle/provider@^0.2.24": - version "0.2.27" - resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.2.27.tgz#8d06f94df6e6ea632ccd4518c419f6d3c0b05531" - integrity sha512-PwFcrH++FslHQMZEiID6t6CFTVavJHj4EVszmMS3E4+P9HIcpZTh/hHACqXhvlBxv94J9yM6SFmcSSokn8GC7A== + version "0.2.42" + resolved "https://registry.yarnpkg.com/@truffle/provider/-/provider-0.2.42.tgz#9da6a144b3c9188cdb587451dd7bd907b4c7164b" + integrity sha512-ZNoglPho4alYIjJR+sLTgX0x6ho7m4OAUWuJ50RAWmoEqYc4AM6htdrI+lTSoRrOHHbmgasv22a7rFPMnmDrTg== dependencies: - "@truffle/error" "^0.0.12" - "@truffle/interface-adapter" "^0.4.20" - web3 "1.2.9" + "@truffle/error" "^0.0.14" + "@truffle/interface-adapter" "^0.5.8" + web3 "1.5.3" "@trufflesuite/chromafi@^2.2.1", "@trufflesuite/chromafi@^2.2.2": version "2.2.2" @@ -1255,7 +962,7 @@ dependencies: bignumber.js "*" -"@types/bn.js@^4.11.3", "@types/bn.js@^4.11.4", "@types/bn.js@^4.11.5": +"@types/bn.js@^4.11.3", "@types/bn.js@^4.11.5": version "4.11.6" resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== @@ -1270,14 +977,14 @@ "@types/node" "*" "@types/chai@^4.2.0": - version "4.2.15" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.2.15.tgz#b7a6d263c2cecf44b6de9a051cf496249b154553" - integrity sha512-rYff6FI+ZTKAPkJUoyz7Udq3GaoDZnxYDEvdEdFZASiA7PoErltHezDishqQiSDWrGxvxmplH304jyzQmjp0AQ== + version "4.3.0" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.0.tgz#23509ebc1fa32f1b4d50d6a66c4032d5b8eaabdc" + integrity sha512-/ceqdqeRraGolFTcfoXNiqjyQhZzbINDngeoAq9GoHa8PPK1yNzTaxWjA6BFWp5Ua9JpXEMSS4s5i9tS0hOJtw== "@types/concat-stream@^1.6.0": - version "1.6.0" - resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.0.tgz#394dbe0bb5fee46b38d896735e8b68ef2390d00d" - integrity sha1-OU2+C7X+5Gs42JZzXoto7yOQ0A0= + version "1.6.1" + resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" + integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== dependencies: "@types/node" "*" @@ -1289,9 +996,9 @@ "@types/node" "*" "@types/glob@^7.1.1": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.3.tgz#e6ba80f36b7daad2c685acd9266382e68985c183" - integrity sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w== + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== dependencies: "@types/minimatch" "*" "@types/node" "*" @@ -1311,40 +1018,35 @@ "@types/node" "*" "@types/lru-cache@^5.1.0": - version "5.1.0" - resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.0.tgz#57f228f2b80c046b4a1bd5cac031f81f207f4f03" - integrity sha512-RaE0B+14ToE4l6UqdarKPnXwVDuigfFv+5j9Dze/Nqr23yyuqdNvzcZi3xB+3Agvi5R4EOgAksfv3lXX4vBt9w== + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== "@types/minimatch@*": - version "3.0.4" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.4.tgz#f0ec25dbf2f0e4b18647313ac031134ca5b24b21" - integrity sha512-1z8k4wzFnNjVK/tlxvrWuK5WMt6mydWWP7+zvH5eFep4oj+UkrfiJTRtjCeBXNpwaA/FYqqtb4/QS4ianFpIRA== + version "3.0.5" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" + integrity sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ== "@types/node@*": - version "14.14.37" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.14.37.tgz#a3dd8da4eb84a996c36e331df98d82abd76b516e" - integrity sha512-XYmBiy+ohOR4Lh5jE379fV2IU+6Jn4g5qASinhitfyO71b/sCo6MKsMLF5tc7Zf2CE8hViVQyYSobJNke8OvUw== + version "16.11.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-16.11.12.tgz#ac7fb693ac587ee182c3780c26eb65546a1a3c10" + integrity sha512-+2Iggwg7PxoO5Kyhvsq9VarmPbIelXP070HMImEpbtGCoyWNINQj4wzjbQCXzdHTRXnqufutJb5KAURZANNBAw== -"@types/node@^10.0.3", "@types/node@^10.12.18": - version "10.17.56" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.56.tgz#010c9e047c3ff09ddcd11cbb6cf5912725cdc2b3" - integrity sha512-LuAa6t1t0Bfw4CuSR0UITsm1hP17YL+u82kfHGrHUWdhlBtH7sa7jGY5z7glGaIj/WDYDkRtgGd+KCjCzxBW1w== +"@types/node@^10.0.3": + version "10.17.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== -"@types/node@^12.12.6", "@types/node@^12.6.1": - version "12.20.7" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.7.tgz#1cb61fd0c85cb87e728c43107b5fd82b69bc9ef8" - integrity sha512-gWL8VUkg8VRaCAUgG9WmhefMqHmMblxe2rVpMF86nZY/+ZysU+BkAp+3cz03AixWDSSz0ks5WX59yAhv/cDwFA== +"@types/node@^12.12.6": + version "12.20.37" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.37.tgz#abb38afa9d6e8a2f627a8cb52290b3c80fbe61ed" + integrity sha512-i1KGxqcvJaLQali+WuypQnXwcplhtNtjs66eNsZpp2P2FL/trJJxx/VWsM0YCL2iMoIJrbXje48lvIQAQ4p2ZA== "@types/node@^8.0.0": version "8.10.66" resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== -"@types/parse-json@^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" - integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== - "@types/pbkdf2@^3.0.0": version "3.1.0" resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.0.tgz#039a0e9b67da0cdc4ee5dab865caa6b267bb66b1" @@ -1353,14 +1055,14 @@ "@types/node" "*" "@types/qs@^6.2.31": - version "6.9.6" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.6.tgz#df9c3c8b31a247ec315e6996566be3171df4b3b1" - integrity sha512-0/HnwIfW4ki2D8L8c9GVcG5I72s9jP5GSLVF0VIXDW00kmIpA6O33G7a8n59Tmh7Nz0WUC3rSb7PTY/sdW2JzA== + version "6.9.7" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.7.tgz#63bb7d067db107cc1e457c303bc25d511febf6cb" + integrity sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw== "@types/secp256k1@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.1.tgz#fb3aa61a1848ad97d7425ff9dcba784549fca5a4" - integrity sha512-+ZjSA8ELlOp8SlKi0YLB2tz9d5iPNEmOBd+8Rz21wTMdaXQIa9b6TEnD6l5qKOCypE7FSyPyck12qZJxSDNoog== + version "4.0.3" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.3.tgz#1b8e55d8e00f08ee7220b4d59a6abe89c37a901c" + integrity sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w== dependencies: "@types/node" "*" @@ -1411,20 +1113,37 @@ accepts@~1.3.7: mime-types "~2.1.24" negotiator "0.6.2" +acorn-dynamic-import@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-2.0.2.tgz#c752bd210bef679501b6c6cb7fc84f8f47158cc4" + integrity sha1-x1K9IQvvZ5UBtsbLf8hPj0cVjMQ= + dependencies: + acorn "^4.0.3" + acorn-jsx@^5.0.0, acorn-jsx@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.1.tgz#fc8661e11b7ac1539c47dbfea2e72b3af34d267b" - integrity sha512-K0Ptm/47OKfQRpNQ2J/oIN/3QYiK6FwW+eJbILhsdxh2WTLdl+30o8aGdTbm5JbffpFFAg/g+zi1E+jvJha5ng== + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^4.0.3: + version "4.0.13" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.13.tgz#105495ae5361d697bd195c825192e1ad7f253787" + integrity sha1-EFSVrlNh1pe9GVyCUZLhrX8lN4c= + +acorn@^5.0.0: + version "5.7.4" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" + integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== acorn@^6.0.7: version "6.4.2" resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.2.tgz#35866fd710528e92de10cf06016498e47e39e1e6" integrity sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ== -acorn@^8.5.0: - version "8.5.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.5.0.tgz#4512ccb99b3698c752591e9bb4472e38ad43cee2" - integrity sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q== +acorn@^8.6.0: + version "8.6.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.6.0.tgz#e3692ba0eb1a0c83eaa4f37f5fa7368dd7142895" + integrity sha512-U1riIR+lBSNi3IbxtaHOIKdH8sLFv3NYfNv8sg7ZsNhcfl4HF2++BfqqrNAxoCLQW1iiylOj76ecnaUxz+z9yw== address@^1.0.1: version "1.1.2" @@ -1456,7 +1175,12 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" -ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.6.1, ajv@^6.9.1: +ajv-keywords@^3.1.0: + version "3.5.2" + resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz#31f29da5ab6e00d1c2d329acf7b5929614d5014d" + integrity sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ== + +ajv@^6.1.0, ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.6.1, ajv@^6.9.1: version "6.12.6" resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== @@ -1466,6 +1190,15 @@ ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3, ajv@^6.12.4, ajv@^6.6.1, ajv@^6.9.1: json-schema-traverse "^0.4.1" uri-js "^4.2.2" +align-text@^0.1.1, align-text@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117" + integrity sha1-DNkKVhCT810KmSVsIrcGlDP60Rc= + dependencies: + kind-of "^3.0.2" + longest "^1.0.1" + repeat-string "^1.5.2" + amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" @@ -1509,6 +1242,11 @@ ansi-mark@^1.0.0: strip-ansi "^4.0.0" super-split "^1.1.0" +ansi-regex@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" + integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= + ansi-regex@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" @@ -1519,10 +1257,15 @@ ansi-regex@^4.1.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-regex@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.0.1.tgz#3183e38fae9a65d7cb5e53945cd5897d0260a06a" + integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== ansi-styles@^3.2.0, ansi-styles@^3.2.1: version "3.2.1" @@ -1538,6 +1281,11 @@ ansi-styles@^4.0.0, ansi-styles@^4.1.0: dependencies: color-convert "^2.0.1" +ansi-styles@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.1.0.tgz#87313c102b8118abd57371afab34618bf7350ed3" + integrity sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ== + ansicolors@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/ansicolors/-/ansicolors-0.3.2.tgz#665597de86a9ffe3aa9bfbe6cae5c6ea426b4979" @@ -1553,10 +1301,18 @@ antlr4ts@^0.5.0-alpha.4: resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +anymatch@~3.1.1, anymatch@~3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.2.tgz#c0557c096af32f106198f4f4e2a383537e378716" + integrity sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg== dependencies: normalize-path "^3.0.0" picomatch "^2.0.4" @@ -1578,10 +1334,20 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-filter@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" - integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= array-flatten@1.1.1: version "1.1.1" @@ -1593,11 +1359,16 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array-uniq@^1.0.3: +array-uniq@1.0.3, array-uniq@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= + asap@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" @@ -1614,9 +1385,9 @@ asn1.js@^5.2.0: safer-buffer "^2.1.0" asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== dependencies: safer-buffer "~2.1.0" @@ -1625,11 +1396,24 @@ assert-plus@1.0.0, assert-plus@^1.0.0: resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= +assert@^1.1.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" + integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== + dependencies: + object-assign "^4.1.1" + util "0.10.3" + assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= + ast-parents@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/ast-parents/-/ast-parents-0.0.1.tgz#508fd0f05d0c48775d9eccda2e174423261e8dd3" @@ -1645,6 +1429,11 @@ astral-regex@^2.0.0: resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== +async-each@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" + integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== + async-eventemitter@^0.2.4: version "0.2.4" resolved "https://registry.yarnpkg.com/async-eventemitter/-/async-eventemitter-0.2.4.tgz#f5e7c8ca7d3e46aab9ec40a292baf686a0bafaca" @@ -1662,7 +1451,7 @@ async@1.x: resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" integrity sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo= -async@^2.4.0: +async@^2.1.2, async@^2.4.0: version "2.6.3" resolved "https://registry.yarnpkg.com/async/-/async-2.6.3.tgz#d72625e2344a3656e3a3ad4fa749fa83299d82ff" integrity sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg== @@ -1674,12 +1463,15 @@ asynckit@^0.4.0: resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= -available-typed-arrays@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.2.tgz#6b098ca9d8039079ee3f77f7b783c4480ba513f5" - integrity sha512-XWX3OX8Onv97LMk/ftVyBibpGwY5a8SmuxZPzeOxqmuEqUCOM9ZE+uIaD1VNJ5QnvU2UQusvmKbuM1FR8QWGfQ== - dependencies: - array-filter "^1.0.0" +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +available-typed-arrays@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" + integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== aws-sign2@~0.7.0: version "0.7.0" @@ -1692,22 +1484,35 @@ aws4@^1.8.0: integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA== balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== base-x@^3.0.2, base-x@^3.0.8: - version "3.0.8" - resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.8.tgz#1e1106c2537f0162e8b52474a557ebb09000018d" - integrity sha512-Rl/1AWP4J/zRrk54hhlxH4drNxPJXYUaKffODVI53/dAsV4t9fBxyxYKAVPU1XBHxYwOWP9h9H0hM2MVw4YfJA== + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== dependencies: safe-buffer "^5.0.1" -base64-js@^1.3.1: +base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + bcrypt-pbkdf@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" @@ -1715,26 +1520,36 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -bech32@1.1.4: +bech32@1.1.4, bech32@^1.1.3: version "1.1.4" resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== +big-integer@1.6.36: + version "1.6.36" + resolved "https://registry.yarnpkg.com/big-integer/-/big-integer-1.6.36.tgz#78631076265d4ae3555c04f85e7d9d2f3a071a36" + integrity sha512-t70bfa7HYEA1D9idDbmuv7YbsbVkQ+Hp+8KFSul4aE5e/i1bjCNIRYJZlA8Q8p0r9T8cF/RVvwUgRA//FydEyg== + big.js@^5.2.2: version "5.2.2" resolved "https://registry.yarnpkg.com/big.js/-/big.js-5.2.2.tgz#65f0af382f578bcdc742bd9c281e9cb2d7768328" integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== bignumber.js@*, bignumber.js@^9.0.0, bignumber.js@^9.0.1: - version "9.0.1" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.1.tgz#8d7ba124c882bfd8e43260c67475518d0689e4e5" - integrity sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA== + version "9.0.2" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.0.2.tgz#71c6c6bed38de64e24a65ebe16cfcf23ae693673" + integrity sha512-GAcQvbpsM0pUb0zw1EI0KhQEZ+lRwR5fYaAp3vPOYuP7aDvGy6cVN6XHLauvF8SOga2y0dcLcjt3iQDTSEliyw== bignumber.js@^7.2.1: version "7.2.1" resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-7.2.1.tgz#80c048759d826800807c4bfd521e50edbba57a5f" integrity sha512-S4XzBk5sMB+Rcb/LNcpzXr57VRTxgAvaAEDAl1AwRx27j00hT84O6OkteE7u8UB3NuaaygCRrEpqox4uDOrbdQ== +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + binary-extensions@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.2.0.tgz#75f502eeaf9ffde42fc98829645be4ea76bd9e2d" @@ -1755,11 +1570,11 @@ bip66@^1.1.5: safe-buffer "^5.0.1" blakejs@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.0.tgz#69df92ef953aa88ca51a32df6ab1c54a155fc7a5" - integrity sha1-ad+S75U6qIylGjLfarHFShVfx6U= + version "1.1.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.1.1.tgz#bf313053978b2cd4c444a48795710be05c785702" + integrity sha512-bLG6PHOCZJKNshTjGRBvET0vTciwQE6zFKOKKXPDJfwFBd4Ac0yBfPZqcGvGJap50l7ktvlpFqc2jGVaUgbJgg== -bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.3: +bluebird@^3.4.7, bluebird@^3.5.0, bluebird@^3.5.2, bluebird@^3.5.3: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== @@ -1774,17 +1589,17 @@ bn.js@4.11.8: resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.1, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9, bn.js@^4.4.0: +bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.11.0, bn.js@^4.11.6, bn.js@^4.11.8, bn.js@^4.11.9: version "4.12.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.0.tgz#775b3f278efbb9718eec7361f483fb36fbbfea88" integrity sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA== -bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.1.3: +bn.js@^5.0.0, bn.js@^5.1.1, bn.js@^5.1.2, bn.js@^5.1.3, bn.js@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.0.tgz#358860674396c6997771a9d051fcc1b57d4ae002" integrity sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw== -body-parser@1.19.0, body-parser@^1.16.0: +body-parser@1.19.0: version "1.19.0" resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== @@ -1800,6 +1615,22 @@ body-parser@1.19.0, body-parser@^1.16.0: raw-body "2.4.0" type-is "~1.6.17" +body-parser@^1.16.0: + version "1.19.1" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.1.tgz#1499abbaa9274af3ecc9f6f10396c995943e31d4" + integrity sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA== + dependencies: + bytes "3.1.1" + content-type "~1.0.4" + debug "2.6.9" + depd "~1.1.2" + http-errors "1.8.1" + iconv-lite "0.4.24" + on-finished "~2.3.0" + qs "6.9.6" + raw-body "2.4.2" + type-is "~1.6.18" + boolbase@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" @@ -1826,6 +1657,22 @@ brace-expansion@^1.1.7: balanced-match "^1.0.0" concat-map "0.0.1" +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + braces@^3.0.1, braces@~3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" @@ -1897,7 +1744,14 @@ browserify-sign@^4.0.0: readable-stream "^3.6.0" safe-buffer "^5.2.0" -bs58@^4.0.0: +browserify-zlib@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" + integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== + dependencies: + pako "~1.0.5" + +bs58@^4.0.0, bs58@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" integrity sha1-vhYedsNU9veIrkBx9j806MTwpCo= @@ -1914,9 +1768,9 @@ bs58check@^2.1.2: safe-buffer "^5.1.2" buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== buffer-to-arraybuffer@^0.0.5: version "0.0.5" @@ -1935,6 +1789,23 @@ buffer-xor@^2.0.1: dependencies: safe-buffer "^5.1.1" +buffer@6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +buffer@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: version "5.7.1" resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" @@ -1944,17 +1815,42 @@ buffer@^5.0.5, buffer@^5.5.0, buffer@^5.6.0: ieee754 "^1.1.13" bufferutil@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.3.tgz#66724b756bed23cd7c28c4d306d7994f9943cc6b" - integrity sha512-yEYTwGndELGvfXsImMBLop58eaGW+YdONi1fNjTINSY98tmMmFijBG6WXgdkfuLNt4imzQNtIE+eBp1PVpMCSw== + version "4.0.5" + resolved "https://registry.yarnpkg.com/bufferutil/-/bufferutil-4.0.5.tgz#da9ea8166911cc276bf677b8aed2d02d31f59028" + integrity sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A== dependencies: - node-gyp-build "^4.2.0" + node-gyp-build "^4.3.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= bytes@3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== +bytes@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.1.tgz#3f018291cb4cbad9accb6e6970bca9c8889e879a" + integrity sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + cacheable-request@^6.0.0: version "6.1.0" resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" @@ -2000,6 +1896,24 @@ callsites@^3.0.0: resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== +camel-case@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camel-case/-/camel-case-3.0.0.tgz#ca3c3688a4e9cf3a4cda777dc4dcbc713249cf73" + integrity sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.1" + +camelcase@^1.0.2: + version "1.2.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" + integrity sha1-m7UwTS4LVmmLLHWLCKPqqdqlijk= + +camelcase@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" + integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= + camelcase@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" @@ -2032,16 +1946,24 @@ cbor@^5.0.2, cbor@^5.1.0: nofilter "^1.0.4" cbor@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.0.0.tgz#51657d26a99a6a1866f8c3258e948576eb17d709" - integrity sha512-nMmaLWbj7+bC6MsApKRIig8h+yjgNLhPLXaCelq5+C7mpWsHgIcseZSdvgexSY5uE1Q3m2uPvIDZwSdxdo7qig== + version "8.1.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" + integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== + dependencies: + nofilter "^3.1.0" + +center-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad" + integrity sha1-qg0yYptu6XIgBBHL1EYckHvCt60= dependencies: - nofilter "^3.0.2" + align-text "^0.1.3" + lazy-cache "^1.0.3" chai-bn@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/chai-bn/-/chai-bn-0.2.1.tgz#1dad95e24c3afcd8139ab0262e9bbefff8a30ab7" - integrity sha512-01jt2gSXAw7UYFPT5K8d7HYjdXj2vyeIuE+0T/34FWzlNcVbs1JkPxRu7rYMfQnJhrHT8Nr6qjSf5ZwwLU2EYg== + version "0.2.2" + resolved "https://registry.yarnpkg.com/chai-bn/-/chai-bn-0.2.2.tgz#4dcf30dbc79db2378a00781693bc749c972bf34f" + integrity sha512-MzjelH0p8vWn65QKmEq/DLBG1Hle4WeyqT79ANhXZhn/UxRWO0OogkAxi5oGGtfzwU9bZR8mvbvYdoqNVWQwFg== chai@^4.2.0, chai@^4.3.4: version "4.3.4" @@ -2064,15 +1986,7 @@ chalk@^2.0.0, chalk@^2.1.0, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^4.0.0, chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.2: +chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== @@ -2080,7 +1994,31 @@ chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chardet@^0.7.0: +change-case@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/change-case/-/change-case-3.0.2.tgz#fd48746cce02f03f0a672577d1d3a8dc2eceb037" + integrity sha512-Mww+SLF6MZ0U6kdg11algyKd5BARbyM4TbFBepwowYSR5ClfQGCGtxNXgykpN0uF/bstWeaGDT4JWaDh8zWAHA== + dependencies: + camel-case "^3.0.0" + constant-case "^2.0.0" + dot-case "^2.1.0" + header-case "^1.0.0" + is-lower-case "^1.1.0" + is-upper-case "^1.1.0" + lower-case "^1.1.1" + lower-case-first "^1.0.0" + no-case "^2.3.2" + param-case "^2.1.0" + pascal-case "^2.0.0" + path-case "^2.1.0" + sentence-case "^2.1.0" + snake-case "^2.1.0" + swap-case "^1.1.0" + title-case "^2.1.0" + upper-case "^1.1.1" + upper-case-first "^1.1.0" + +chardet@^0.7.0: version "0.7.0" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== @@ -2095,29 +2033,29 @@ check-error@^1.0.2: resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.2.tgz#574d312edd88bb5dd8912e9286dd6c0aed4aac82" integrity sha1-V00xLt2Iu13YkS6Sht1sCu1KrII= -cheerio-select-tmp@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/cheerio-select-tmp/-/cheerio-select-tmp-0.1.1.tgz#55bbef02a4771710195ad736d5e346763ca4e646" - integrity sha512-YYs5JvbpU19VYJyj+F7oYrIE2BOll1/hRU7rEy/5+v9BzkSo3bK81iAeeQEMI92vRIxz677m72UmJUiVwwgjfQ== +cheerio-select@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-1.5.0.tgz#faf3daeb31b17c5e1a9dabcee288aaf8aafa5823" + integrity sha512-qocaHPv5ypefh6YNxvnbABM07KMxExbtbfuJoIie3iZXX1ERwYmJcIiRrr9H05ucQP1k28dav8rpdDgjQd8drg== dependencies: - css-select "^3.1.2" - css-what "^4.0.0" - domelementtype "^2.1.0" - domhandler "^4.0.0" - domutils "^2.4.4" + css-select "^4.1.3" + css-what "^5.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + domutils "^2.7.0" cheerio@^1.0.0-rc.2: - version "1.0.0-rc.5" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.5.tgz#88907e1828674e8f9fee375188b27dadd4f0fa2f" - integrity sha512-yoqps/VCaZgN4pfXtenwHROTp8NG6/Hlt4Jpz2FEP0ZJQ+ZUkVDd0hAPDNKhj3nakpfPt/CNs57yEtxD1bXQiw== - dependencies: - cheerio-select-tmp "^0.1.0" - dom-serializer "~1.2.0" - domhandler "^4.0.0" - entities "~2.1.0" - htmlparser2 "^6.0.0" - parse5 "^6.0.0" - parse5-htmlparser2-tree-adapter "^6.0.0" + version "1.0.0-rc.10" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.10.tgz#2ba3dcdfcc26e7956fc1f440e61d51c643379f3e" + integrity sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw== + dependencies: + cheerio-select "^1.5.0" + dom-serializer "^1.3.2" + domhandler "^4.2.0" + htmlparser2 "^6.1.0" + parse5 "^6.0.1" + parse5-htmlparser2-tree-adapter "^6.0.1" + tslib "^2.2.0" chokidar@3.3.0: version "3.3.0" @@ -2134,22 +2072,41 @@ chokidar@3.3.0: optionalDependencies: fsevents "~2.1.1" -chokidar@^3.4.0: - version "3.5.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" - integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== dependencies: - anymatch "~3.1.1" + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +chokidar@^3.4.0, chokidar@^3.4.1: + version "3.5.2" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.2.tgz#dba3976fcadb016f66fd365021d91600d01c1e75" + integrity sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ== + dependencies: + anymatch "~3.1.2" braces "~3.0.2" - glob-parent "~5.1.0" + glob-parent "~5.1.2" is-binary-path "~2.1.0" is-glob "~4.0.1" normalize-path "~3.0.0" - readdirp "~3.5.0" + readdirp "~3.6.0" optionalDependencies: - fsevents "~2.3.1" + fsevents "~2.3.2" -chownr@^1.1.1: +chownr@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== @@ -2183,6 +2140,16 @@ class-is@^1.1.0: resolved "https://registry.yarnpkg.com/class-is/-/class-is-1.1.0.tgz#9d3c0fba0440d211d843cec3dedfa48055005825" integrity sha512-rhjH9AG1fvabIDoGRVH587413LPjTZgmDF9fOFCbFJQV4yuocX1mHxxvXI4g3cGwbVY9wAYIoKlg1N79frJKQw== +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + clean-stack@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" @@ -2223,13 +2190,13 @@ cli-table3@^0.6.0: colors "^1.1.2" cli-table@^0.3.1: - version "0.3.6" - resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.6.tgz#e9d6aa859c7fe636981fd3787378c2a20bce92fc" - integrity sha512-ZkNZbnZjKERTY5NwC2SeMeLeifSPq/pubeRoTpdr3WchLlnZg6hEgvHkK5zL7KNFdd9PmHN8lxrENUwI3cE8vQ== + version "0.3.11" + resolved "https://registry.yarnpkg.com/cli-table/-/cli-table-0.3.11.tgz#ac69cdecbe81dccdba4889b9a18b7da312a9d3ee" + integrity sha512-IqLQi4lO0nIB4tcdTpN4LCB9FI3uqrJZK7RC515EnhZ6qBaglkIgICb1wjeAqpdoOabm1+SuQtkXIPdYC93jhQ== dependencies: colors "1.0.3" -cli-truncate@2.1.0, cli-truncate@^2.1.0: +cli-truncate@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== @@ -2237,11 +2204,37 @@ cli-truncate@2.1.0, cli-truncate@^2.1.0: slice-ansi "^3.0.0" string-width "^4.2.0" +cli-truncate@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-3.1.0.tgz#3f23ab12535e3d73e839bb43e73c9de487db1389" + integrity sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA== + dependencies: + slice-ansi "^5.0.0" + string-width "^5.0.0" + cli-width@^2.0.0: version "2.2.1" resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== +cliui@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" + integrity sha1-S0dXYP+AJkx2LDoXGQMukcf+oNE= + dependencies: + center-align "^0.1.1" + right-align "^0.1.1" + wordwrap "0.0.2" + +cliui@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" + integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi "^2.0.0" + cliui@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" @@ -2258,10 +2251,18 @@ clone-response@^1.0.2: dependencies: mimic-response "^1.0.0" -clone@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= +code-point-at@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" + integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" color-convert@^1.9.0: version "1.9.3" @@ -2287,11 +2288,6 @@ color-name@~1.1.4: resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -colorette@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40" - integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g== - colorette@^2.0.16: version "2.0.16" resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.16.tgz#713b9af84fdb000139f04546bd4a93f62a5085da" @@ -2334,7 +2330,7 @@ commander@^2.15.0, commander@^2.19.0: resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== -commander@^8.2.0: +commander@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== @@ -2344,6 +2340,11 @@ compare-versions@^3.6.0: resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== +component-emitter@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" + integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" @@ -2359,6 +2360,24 @@ concat-stream@^1.6.0, concat-stream@^1.6.2: readable-stream "^2.2.2" typedarray "^0.0.6" +console-browserify@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" + integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== + +constant-case@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/constant-case/-/constant-case-2.0.0.tgz#4175764d389d3fa9c8ecd29186ed6005243b6a46" + integrity sha1-QXV2TTidP6nI7NKRhu1gBSQ7akY= + dependencies: + snake-case "^2.1.0" + upper-case "^1.1.1" + +constants-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" + integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= + content-disposition@0.5.3: version "0.5.3" resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" @@ -2396,20 +2415,30 @@ cookie@^0.4.1: integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA== cookiejar@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.2.tgz#dd8a235530752f988f9a0844f3fc589e3111125c" - integrity sha512-Mw+adcfzPxcPeI+0WlvRrr/3lGVO0bD75SxX6811cxSh1Wbxx7xZBGK1eVtDf6si8rg2lhnUjsVLMFMfbRIuwA== + version "2.1.3" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.3.tgz#fc7a6216e408e74414b90230050842dacda75acc" + integrity sha512-JxbCBUdrfr6AQjOXrxoTvAMJO4HBTUIlBzslcJPAz+/KT8yk53fXun51u+RenNYvad/+Vc2DIz5o9UxlCDymFQ== + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= core-js-pure@^3.0.1: - version "3.9.1" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.9.1.tgz#677b322267172bd490e4464696f790cbc355bec5" - integrity sha512-laz3Zx0avrw9a4QEIdmIblnVuJz8W51leY9iLThatCsFawWxC3sE4guASC78JbCin+DkwMpCdp1AVAuzL/GN7A== + version "3.19.3" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.19.3.tgz#c69b2b36b58927317824994b532ec3f0f7e49607" + integrity sha512-N3JruInmCyt7EJj5mAq3csCgGYgiSqu7p7TQp2KOztr180/OAIxyIvL1FCjzgmQk/t3Yniua50Fsak7FShI9lA== -core-util-is@1.0.2, core-util-is@~1.0.0: +core-util-is@1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + cors@^2.8.1: version "2.8.5" resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" @@ -2428,17 +2457,6 @@ cosmiconfig@^5.0.7: js-yaml "^3.13.1" parse-json "^4.0.0" -cosmiconfig@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz#714d756522cace867867ccb4474c5d01bbae5d6d" - integrity sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ== - dependencies: - "@types/parse-json" "^4.0.0" - import-fresh "^3.2.1" - parse-json "^5.0.0" - path-type "^4.0.0" - yaml "^1.10.0" - crc-32@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/crc-32/-/crc-32-1.2.0.tgz#cb2db6e29b88508e32d9dd0ec1693e7b41a18208" @@ -2478,6 +2496,15 @@ create-hmac@^1.1.0, create-hmac@^1.1.4, create-hmac@^1.1.7: safe-buffer "^5.0.1" sha.js "^2.4.8" +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk= + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" @@ -2503,7 +2530,20 @@ cross-spawn@^7.0.2, cross-spawn@^7.0.3: resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" integrity sha1-iNf/fsDfuG9xPch7u0LQRNPmxBs= -crypto-browserify@3.12.0: +crypto-addr-codec@^0.1.7: + version "0.1.7" + resolved "https://registry.yarnpkg.com/crypto-addr-codec/-/crypto-addr-codec-0.1.7.tgz#e16cea892730178fe25a38f6d15b680cab3124ae" + integrity sha512-X4hzfBzNhy4mAc3UpiXEC/L0jo5E8wAa9unsnA8nNXYzXjCcGk83hfC5avJWCSGT8V91xMnAS9AKMHmjw5+XCg== + dependencies: + base-x "^3.0.8" + big-integer "1.6.36" + blakejs "^1.1.0" + bs58 "^4.0.1" + ripemd160-min "0.0.6" + safe-buffer "^5.2.0" + sha3 "^2.1.1" + +crypto-browserify@3.12.0, crypto-browserify@^3.11.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== @@ -2520,26 +2560,21 @@ crypto-browserify@3.12.0: randombytes "^2.0.0" randomfill "^1.0.3" -crypto-js@^3.1.9-1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/crypto-js/-/crypto-js-3.3.0.tgz#846dd1cce2f68aacfa156c8578f926a609b7976b" - integrity sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q== - -css-select@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-3.1.2.tgz#d52cbdc6fee379fba97fb0d3925abbd18af2d9d8" - integrity sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA== +css-select@^4.1.3: + version "4.2.0" + resolved "https://registry.yarnpkg.com/css-select/-/css-select-4.2.0.tgz#ab28276d3afb00cc05e818bd33eb030f14f57895" + integrity sha512-6YVG6hsH9yIb/si3Th/is8Pex7qnVHO6t7q7U6TIUnkQASGbS8tnUDBftnPynLNnuUl/r2+PTd0ekiiq7R0zJw== dependencies: boolbase "^1.0.0" - css-what "^4.0.0" - domhandler "^4.0.0" - domutils "^2.4.3" - nth-check "^2.0.0" + css-what "^5.1.0" + domhandler "^4.3.0" + domutils "^2.8.0" + nth-check "^2.0.1" -css-what@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-4.0.0.tgz#35e73761cab2eeb3d3661126b23d7aa0e8432233" - integrity sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A== +css-what@^5.0.1, css-what@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/css-what/-/css-what-5.1.0.tgz#3f7b707aadf633baf62c2ceb8579b545bb40f7fe" + integrity sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw== d@1, d@^1.0.1: version "1.0.1" @@ -2561,7 +2596,7 @@ death@^1.1.0: resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" integrity sha1-AaqcQB7dknUFFEcLgmY5DGbGcxg= -debug@2.6.9, debug@^2.2.0, debug@^2.6.0: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.0: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -2575,21 +2610,14 @@ debug@3.2.6: dependencies: ms "^2.1.1" -debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1: - version "4.3.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" - integrity sha512-doEwdvm4PCeK4K3RQN2ZC2BYUBaxwLARCqZmMjtF8a51J2Rb0xpVloFRnCODwqjpwnAoao4pelN8l3RJdv3gRQ== - dependencies: - ms "2.1.2" - -debug@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.2.tgz#f0a49c18ac8779e31d4a0c6029dfb76873c7428b" - integrity sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw== +debug@4, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: + version "4.3.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664" + integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q== dependencies: ms "2.1.2" -decamelize@^1.2.0: +decamelize@^1.0.0, decamelize@^1.1.1, decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -2614,9 +2642,9 @@ deep-eql@^3.0.1: type-detect "^4.0.0" deep-is@^0.1.3, deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== defer-to-connect@^1.0.1: version "1.1.3" @@ -2638,6 +2666,28 @@ define-properties@^1.1.2, define-properties@^1.1.3: dependencies: object-keys "^1.0.12" +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -2712,13 +2762,13 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-serializer@^1.0.1, dom-serializer@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.2.0.tgz#3433d9136aeb3c627981daa385fc7f32d27c48f1" - integrity sha512-n6kZFH/KlCrqs/1GHMOd5i2fd/beQHuehKdWvNNffbGHTr/almdhuVvTVFb3V7fglz+nC50fFusu3lY33h12pA== +dom-serializer@^1.0.1, dom-serializer@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig== dependencies: domelementtype "^2.0.1" - domhandler "^4.0.0" + domhandler "^4.2.0" entities "^2.0.0" dom-walk@^0.1.0: @@ -2726,26 +2776,38 @@ dom-walk@^0.1.0: resolved "https://registry.yarnpkg.com/dom-walk/-/dom-walk-0.1.2.tgz#0c548bef048f4d1f2a97249002236060daa3fd84" integrity sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w== -domelementtype@^2.0.1, domelementtype@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.1.0.tgz#a851c080a6d1c3d94344aed151d99f669edf585e" - integrity sha512-LsTgx/L5VpD+Q8lmsXSHW2WpA+eBlZ9HPf3erD1IoPF00/3JKHZ3BknUVA2QGDNu69ZNmyFmCWBSO45XjYKC5w== +domain-browser@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" + integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== -domhandler@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.0.0.tgz#01ea7821de996d85f69029e81fa873c21833098e" - integrity sha512-KPTbnGQ1JeEMQyO1iYXoagsI6so/C96HZiFyByU3T6iAzpXn8EGEvct6unm1ZGoed8ByO2oirxgwxBmqKF9haA== +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A== + +domhandler@^4.0.0, domhandler@^4.2.0, domhandler@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-4.3.0.tgz#16c658c626cf966967e306f966b431f77d4a5626" + integrity sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g== dependencies: - domelementtype "^2.1.0" + domelementtype "^2.2.0" -domutils@^2.4.3, domutils@^2.4.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.5.0.tgz#42f49cffdabb92ad243278b331fd761c1c2d3039" - integrity sha512-Ho16rzNMOFk2fPwChGh3D2D9OEHAfG19HgmRR2l+WLSsIstNsAYBzePH412bL0y5T44ejABIVfTHQ8nqi/tBCg== +domutils@^2.5.2, domutils@^2.7.0, domutils@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-2.8.0.tgz#4437def5db6e2d1f5d6ee859bd95ca7d02048135" + integrity sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A== dependencies: dom-serializer "^1.0.1" - domelementtype "^2.0.1" - domhandler "^4.0.0" + domelementtype "^2.2.0" + domhandler "^4.2.0" + +dot-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/dot-case/-/dot-case-2.1.1.tgz#34dcf37f50a8e93c2b3bca8bb7fb9155c7da3bee" + integrity sha1-NNzzf1Co6TwrO8qLt/uRVcfaO+4= + dependencies: + no-case "^2.2.0" drbg.js@^1.0.1: version "1.0.1" @@ -2774,19 +2836,6 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -elliptic@6.5.3: - version "6.5.3" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.3.tgz#cb59eb2efdaf73a0bd78ccd7015a62ad6e0f93d6" - integrity sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw== - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - elliptic@6.5.4, elliptic@^6.4.0, elliptic@^6.5.2, elliptic@^6.5.3: version "6.5.4" resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" @@ -2810,6 +2859,16 @@ emoji-regex@^8.0.0: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== +emoji-regex@^9.2.2: + version "9.2.2" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" + integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== + +emojis-list@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" + integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -2832,6 +2891,16 @@ end-of-stream@^1.1.0: dependencies: once "^1.4.0" +enhanced-resolve@^3.4.0: + version "3.4.1" + resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz#0421e339fd71419b3da13d129b3979040230476e" + integrity sha1-BCHjOf1xQZs9oT0Smzl5BAIwR24= + dependencies: + graceful-fs "^4.1.2" + memory-fs "^0.4.0" + object-assign "^4.0.1" + tapable "^0.2.7" + enquirer@^2.3.0, enquirer@^2.3.5, enquirer@^2.3.6: version "2.3.6" resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" @@ -2844,51 +2913,50 @@ entities@^2.0.0: resolved "https://registry.yarnpkg.com/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" integrity sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A== -entities@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.1.0.tgz#992d3129cf7df6870b96c57858c249a120f8b8b5" - integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== - env-paths@^2.2.0: version "2.2.1" resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -errno@~0.1.1: +errno@^0.1.3, errno@~0.1.1: version "0.1.8" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f" integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A== dependencies: prr "~1.0.1" -error-ex@^1.3.1: +error-ex@^1.2.0, error-ex@^1.3.1: version "1.3.2" resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== dependencies: is-arrayish "^0.2.1" -es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2: - version "1.18.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.18.0.tgz#ab80b359eecb7ede4c298000390bc5ac3ec7b5a4" - integrity sha512-LJzK7MrQa8TS0ja2w3YNLzUgJCGPdPOV1yVvezjNnS89D+VR08+Szt2mz3YB2Dck/+w5tfIq/RoUAFqJJGM2yw== +es-abstract@^1.18.5, es-abstract@^1.19.1: + version "1.19.1" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.19.1.tgz#d4885796876916959de78edaa0df456627115ec3" + integrity sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w== dependencies: call-bind "^1.0.2" es-to-primitive "^1.2.1" function-bind "^1.1.1" get-intrinsic "^1.1.1" + get-symbol-description "^1.0.0" has "^1.0.3" has-symbols "^1.0.2" - is-callable "^1.2.3" + internal-slot "^1.0.3" + is-callable "^1.2.4" is-negative-zero "^2.0.1" - is-regex "^1.1.2" - is-string "^1.0.5" - object-inspect "^1.9.0" + is-regex "^1.1.4" + is-shared-array-buffer "^1.0.1" + is-string "^1.0.7" + is-weakref "^1.0.1" + object-inspect "^1.11.0" object-keys "^1.1.1" object.assign "^4.1.2" string.prototype.trimend "^1.0.4" string.prototype.trimstart "^1.0.4" - unbox-primitive "^1.0.0" + unbox-primitive "^1.0.1" es-to-primitive@^1.2.1: version "1.2.1" @@ -2899,7 +2967,7 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" -es5-ext@^0.10.35, es5-ext@^0.10.50: +es5-ext@^0.10.35, es5-ext@^0.10.46, es5-ext@^0.10.50, es5-ext@~0.10.14: version "0.10.53" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== @@ -2908,7 +2976,7 @@ es5-ext@^0.10.35, es5-ext@^0.10.50: es6-symbol "~3.1.3" next-tick "~1.0.0" -es6-iterator@~2.0.3: +es6-iterator@^2.0.3, es6-iterator@~2.0.1, es6-iterator@~2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= @@ -2917,7 +2985,38 @@ es6-iterator@~2.0.3: es5-ext "^0.10.35" es6-symbol "^3.1.1" -es6-symbol@^3.1.1, es6-symbol@~3.1.3: +es6-map@^0.1.3: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-map/-/es6-map-0.1.5.tgz#9136e0503dcc06a301690f0bb14ff4e364e949f0" + integrity sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA= + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-set "~0.1.5" + es6-symbol "~3.1.1" + event-emitter "~0.3.5" + +es6-set@~0.1.5: + version "0.1.5" + resolved "https://registry.yarnpkg.com/es6-set/-/es6-set-0.1.5.tgz#d2b3ec5d4d800ced818db538d28974db0a73ccb1" + integrity sha1-0rPsXU2ADO2BjbU40ol02wpzzLE= + dependencies: + d "1" + es5-ext "~0.10.14" + es6-iterator "~2.0.1" + es6-symbol "3.1.1" + event-emitter "~0.3.5" + +es6-symbol@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.1.tgz#bf00ef4fdab6ba1b46ecb7b629b4c7ed5715cc77" + integrity sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc= + dependencies: + d "1" + es5-ext "~0.10.14" + +es6-symbol@^3.1.1, es6-symbol@~3.1.1, es6-symbol@~3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== @@ -2925,6 +3024,16 @@ es6-symbol@^3.1.1, es6-symbol@~3.1.3: d "^1.0.1" ext "^1.1.2" +es6-weak-map@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-weak-map/-/es6-weak-map-2.0.3.tgz#b6da1f16cc2cc0d9be43e6bdbfc5e7dfcdf31d53" + integrity sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA== + dependencies: + d "1" + es5-ext "^0.10.46" + es6-iterator "^2.0.3" + es6-symbol "^3.1.1" + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -2952,6 +3061,16 @@ escodegen@1.8.x: optionalDependencies: source-map "~0.2.0" +escope@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/escope/-/escope-3.6.0.tgz#e01975e812781a163a6dadfdd80398dc64c889c3" + integrity sha1-4Bl16BJ4GhY6ba392AOY3GTIicM= + dependencies: + es6-map "^0.1.3" + es6-weak-map "^2.0.1" + esrecurse "^4.1.0" + estraverse "^4.1.1" + eslint-config-prettier@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" @@ -2972,10 +3091,10 @@ eslint-scope@^4.0.3: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-scope@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-6.0.0.tgz#9cf45b13c5ac8f3d4c50f46a5121f61b3e318978" - integrity sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA== +eslint-scope@^7.1.0: + version "7.1.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.1.0.tgz#c1f6ea30ac583031f203d65c73e723b01298f153" + integrity sha512-aWwkhnS0qAXqNOgKOK0dJ2nvzEbhEvpy8OlJ9kZ0FeZnA6zpjv1/Vei+puGFFX7zkPCkHHXb7IDX3A+7yPrRWg== dependencies: esrecurse "^4.3.0" estraverse "^5.2.0" @@ -3000,14 +3119,14 @@ eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== eslint-visitor-keys@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.0.0.tgz#21fdc8fbcd9c795cc0321f0563702095751511a8" - integrity sha512-QudtT6av5WXels9WjIM7qz1XD1cWGvX4gGXvp/zBn9nXG02D0utdU3Em2m/QjTnrsk6bBjmCygl3rmj118msQQ== + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz#f65328259305927392c938ed44eb0a5c9b2bd303" + integrity sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw== -eslint-visitor-keys@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz#e32e99c6cdc2eb063f204eda5db67bfe58bb4186" - integrity sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q== +eslint-visitor-keys@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.1.0.tgz#eee4acea891814cda67a7d8812d9647dd0179af2" + integrity sha512-yWJFpu4DtjsWKkt5GeNBBuZMlNcYVs6vRCLoCVEJrTjaSB6LC98gFipNK/erM2Heg/E8mIK+hXG/pJMLK+eRZA== eslint@^5.6.0: version "5.16.0" @@ -3051,13 +3170,13 @@ eslint@^5.6.0: table "^5.2.3" text-table "^0.2.0" -eslint@^8.1.0: - version "8.1.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.1.0.tgz#00f1f7dbf4134f26588e6c9f2efe970760f64664" - integrity sha512-JZvNneArGSUsluHWJ8g8MMs3CfIEzwaLx9KyH4tZ2i+R2/rPWzL8c0zg3rHdwYVpN/1sB9gqnjHwz9HoeJpGHw== +eslint@^8.4.1: + version "8.4.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.4.1.tgz#d6531bbf3e598dffd7c0c7d35ec52a0b30fdfa2d" + integrity sha512-TxU/p7LB1KxQ6+7aztTnO7K0i+h0tDi81YRY9VzB6Id71kNz+fFYnf5HD5UOQmxkzcoa0TlVZf9dpMtUv0GpWg== dependencies: - "@eslint/eslintrc" "^1.0.3" - "@humanwhocodes/config-array" "^0.6.0" + "@eslint/eslintrc" "^1.0.5" + "@humanwhocodes/config-array" "^0.9.2" ajv "^6.10.0" chalk "^4.0.0" cross-spawn "^7.0.2" @@ -3065,10 +3184,10 @@ eslint@^8.1.0: doctrine "^3.0.0" enquirer "^2.3.5" escape-string-regexp "^4.0.0" - eslint-scope "^6.0.0" + eslint-scope "^7.1.0" eslint-utils "^3.0.0" - eslint-visitor-keys "^3.0.0" - espree "^9.0.0" + eslint-visitor-keys "^3.1.0" + espree "^9.2.0" esquery "^1.4.0" esutils "^2.0.2" fast-deep-equal "^3.1.3" @@ -3090,7 +3209,7 @@ eslint@^8.1.0: progress "^2.0.0" regexpp "^3.2.0" semver "^7.2.1" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" strip-json-comments "^3.1.0" text-table "^0.2.0" v8-compile-cache "^2.0.3" @@ -3104,14 +3223,14 @@ espree@^5.0.1: acorn-jsx "^5.0.0" eslint-visitor-keys "^1.0.0" -espree@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/espree/-/espree-9.0.0.tgz#e90a2965698228502e771c7a58489b1a9d107090" - integrity sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ== +espree@^9.2.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.2.0.tgz#c50814e01611c2d0f8bd4daa83c369eabba80dbc" + integrity sha512-oP3utRkynpZWF/F2x/HZJ+AGtnIclaR7z1pYPxy7NYM2fSO6LgK/Rkny8anRSPK/VwEA1eqm2squui0T7ZMOBg== dependencies: - acorn "^8.5.0" + acorn "^8.6.0" acorn-jsx "^5.3.1" - eslint-visitor-keys "^3.0.0" + eslint-visitor-keys "^3.1.0" esprima@2.7.x, esprima@^2.7.1: version "2.7.3" @@ -3148,9 +3267,9 @@ estraverse@^4.1.1: integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== estraverse@^5.1.0, estraverse@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.2.0.tgz#307df42547e6cc7324d3cf03c155d5cdb8c53880" - integrity sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ== + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== esutils@^2.0.2: version "2.0.3" @@ -3162,7 +3281,7 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= -eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.0: +eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.0, eth-ens-namehash@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz#229ac46eca86d52e0c991e7cb2aef83ff0f68bcf" integrity sha1-IprEbsqG1S4MmR58sq74P/D2i88= @@ -3170,13 +3289,13 @@ eth-ens-namehash@2.0.8, eth-ens-namehash@^2.0.0: idna-uts46-hx "^2.3.1" js-sha3 "^0.5.7" -eth-gas-reporter@^0.2.20: - version "0.2.22" - resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.22.tgz#bbe91f5d7b22433d26f099eeb5b20118ced0e575" - integrity sha512-L1FlC792aTf3j/j+gGzSNlGrXKSxNPXQNk6TnV5NNZ2w3jnQCRyJjDl0zUo25Cq2t90IS5vGdbkwqFQK7Ce+kw== +eth-gas-reporter@^0.2.23: + version "0.2.23" + resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.23.tgz#7a2a412b41285298cdad810cf54adac11d406208" + integrity sha512-T8KsVakDEupvQxW3MfFfHDfJ7y8zl2+XhyEQk4hZ3qQsAh/FE27BfFHM9UhqNQvrJLz8zVWnPZWNcARwLT/lsA== dependencies: "@ethersproject/abi" "^5.0.0-beta.146" - "@solidity-parser/parser" "^0.12.0" + "@solidity-parser/parser" "^0.14.0" cli-table3 "^0.5.0" colors "^1.1.2" ethereumjs-util "6.2.0" @@ -3200,7 +3319,7 @@ eth-lib@0.2.7: elliptic "^6.4.0" xhr-request-promise "^0.1.2" -eth-lib@0.2.8, eth-lib@^0.2.8: +eth-lib@0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/eth-lib/-/eth-lib-0.2.8.tgz#b194058bef4b220ad12ea497431d6cb6aa0623c8" integrity sha512-ArJ7x1WcWOlSpzdoTBX8vkwlkSQ85CjjifSZtV4co64vWxSV8geWfPI9x4SVYu3DSxnX4yWFVTtGL+j9DUFLNw== @@ -3242,9 +3361,9 @@ eth-sig-util@^3.0.1: tweetnacl-util "^0.15.0" ethereum-bloom-filters@^1.0.6: - version "1.0.9" - resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.9.tgz#4a59dead803af0c9e33834170bd7695df67061ec" - integrity sha512-GiK/RQkAkcVaEdxKVkPcG07PQ5vD7v2MFSHgZmBJSfMzNRHimntdBithsHAT89tAXnIpzVDWt8iaCD1DvkaxGg== + version "1.0.10" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz#3ca07f4aed698e75bd134584850260246a5fed8a" + integrity sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA== dependencies: js-sha3 "^0.8.0" @@ -3294,6 +3413,13 @@ ethereumjs-common@^1.3.2, ethereumjs-common@^1.5.0: resolved "https://registry.yarnpkg.com/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz#2065dbe9214e850f2e955a80e650cb6999066979" integrity sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA== +ethereumjs-testrpc@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/ethereumjs-testrpc/-/ethereumjs-testrpc-6.0.3.tgz#7a0b87bf3670f92f607f98fa6a78801d9741b124" + integrity sha512-lAxxsxDKK69Wuwqym2K49VpXtBvLEsXr1sryNG4AkvL5DomMdeCBbu3D87UEevKenLHBiT8GTjARwN6Yj039gA== + dependencies: + webpack "^3.0.0" + ethereumjs-tx@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz#5dfe7688bf177b45c9a23f86cf9104d47ea35fed" @@ -3341,38 +3467,25 @@ ethereumjs-util@^5.1.1: rlp "^2.0.0" safe-buffer "^5.1.1" -ethereumjs-util@^7.0.10, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1: - version "7.1.1" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.1.tgz#236ef435f46820f0c420a708c0559b5897952069" - integrity sha512-1CGBmCp3m8IMGHhAJF/icH8qjCJrfQtaZ9KW+cAVV8kyN5Lc1IRq3KjV77ILOutrCwiyf5y2gMyCrAUMoCf2Ag== - dependencies: - "@types/bn.js" "^5.1.0" - bn.js "^5.1.2" - create-hash "^1.1.2" - ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" - rlp "^2.2.4" - -ethereumjs-util@^7.0.3: - version "7.0.9" - resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.0.9.tgz#2038baeb30f370a3e576ec175bd70bbbb6807d42" - integrity sha512-cRqvYYKJoitq6vMKMf8pXeVwvTrX+dRD0JwHaYqm8jvogK14tqIoCWH/KUHcRwnVxVXEYF/o6pup5jRG4V0xzg== +ethereumjs-util@^7.0.10, ethereumjs-util@^7.0.3, ethereumjs-util@^7.1.0, ethereumjs-util@^7.1.1, ethereumjs-util@^7.1.2, ethereumjs-util@^7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz#b55d7b64dde3e3e45749e4c41288238edec32d23" + integrity sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw== dependencies: "@types/bn.js" "^5.1.0" bn.js "^5.1.2" create-hash "^1.1.2" ethereum-cryptography "^0.1.3" - ethjs-util "0.1.6" rlp "^2.2.4" ethers@^4.0.0-beta.1, ethers@^4.0.32, ethers@^4.0.40: - version "4.0.48" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.48.tgz#330c65b8133e112b0613156e57e92d9009d8fbbe" - integrity sha512-sZD5K8H28dOrcidzx9f8KYh8083n5BexIO3+SbE4jK83L85FxtpXZBCQdXb8gkg+7sBqomcLhhkU7UHL+F7I2g== + version "4.0.49" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-4.0.49.tgz#0eb0e9161a0c8b4761be547396bbe2fb121a8894" + integrity sha512-kPltTvWiyu+OktYy1IStSO16i2e7cS9D9OxZ81q2UUaiNPVrm/RTcbxamCXF9VUSKzJIdJV68EAIhTEVBalRWg== dependencies: aes-js "3.0.0" - bn.js "^4.4.0" - elliptic "6.5.3" + bn.js "^4.11.9" + elliptic "6.5.4" hash.js "1.1.3" js-sha3 "0.5.7" scrypt-js "2.0.4" @@ -3380,10 +3493,10 @@ ethers@^4.0.0-beta.1, ethers@^4.0.32, ethers@^4.0.40: uuid "2.0.1" xmlhttprequest "1.8.0" -ethers@^5.5.1: - version "5.5.1" - resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.5.1.tgz#d3259a95a42557844aa543906c537106c0406fbf" - integrity sha512-RodEvUFZI+EmFcE6bwkuJqpCYHazdzeR1nMzg+YWQSmQEsNtfl1KHGfp/FWZYl48bI/g7cgBeP2IlPthjiVngw== +ethers@^5.0.13, ethers@^5.5.2: + version "5.5.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.5.2.tgz#cd2e508c7342c44fa70392f722e8de8f2416489f" + integrity sha512-EF5W+6Wwcu6BqVwpgmyR5U2+L4c1FQzlM/02dkZOugN3KF0cG9bzHZP+TDJglmPm2/IzCEJDT7KBxzayk7SAHw== dependencies: "@ethersproject/abi" "5.5.0" "@ethersproject/abstract-provider" "5.5.1" @@ -3400,10 +3513,10 @@ ethers@^5.5.1: "@ethersproject/json-wallets" "5.5.0" "@ethersproject/keccak256" "5.5.0" "@ethersproject/logger" "5.5.0" - "@ethersproject/networks" "5.5.0" + "@ethersproject/networks" "5.5.1" "@ethersproject/pbkdf2" "5.5.0" "@ethersproject/properties" "5.5.0" - "@ethersproject/providers" "5.5.0" + "@ethersproject/providers" "5.5.1" "@ethersproject/random" "5.5.0" "@ethersproject/rlp" "5.5.0" "@ethersproject/sha2" "5.5.0" @@ -3413,7 +3526,7 @@ ethers@^5.5.1: "@ethersproject/transactions" "5.5.0" "@ethersproject/units" "5.5.0" "@ethersproject/wallet" "5.5.0" - "@ethersproject/web" "5.5.0" + "@ethersproject/web" "5.5.1" "@ethersproject/wordlists" "5.5.0" ethjs-abi@^0.2.1: @@ -3441,25 +3554,28 @@ ethjs-util@0.1.6, ethjs-util@^0.1.3: is-hex-prefixed "1.0.0" strip-hex-prefix "1.0.0" +event-emitter@~0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" + integrity sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk= + dependencies: + d "1" + es5-ext "~0.10.14" + event-target-shim@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== -eventemitter3@3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-3.1.2.tgz#2d3d48f9c346698fce83a85d7d664e98535df6e7" - integrity sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q== - eventemitter3@4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384" integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ== -eventemitter3@^4.0.0: - version "4.0.7" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" - integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +events@^3.0.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: version "1.0.3" @@ -3469,6 +3585,19 @@ evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: md5.js "^1.3.4" safe-buffer "^5.1.1" +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c= + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + execa@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" @@ -3502,6 +3631,19 @@ exit-on-epipe@~1.0.1: resolved "https://registry.yarnpkg.com/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz#0bdd92e87d5285d267daa8171d0eb06159689692" integrity sha512-h2z5mrROTxce56S+pnvAV890uu7ls7f1kEvVGJbw1OlFH3/mlJ5bkXu0KRyW94v37zzHPiUd55iLn3DA7TjWpw== +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + express@^4.14.0: version "4.17.1" resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" @@ -3539,11 +3681,26 @@ express@^4.14.0: vary "~1.1.2" ext@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" - integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + version "1.6.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.6.0.tgz#3871d50641e874cc172e2b53f919842d19db4c52" + integrity sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg== dependencies: - type "^2.0.0" + type "^2.5.0" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" extend@~3.0.2: version "3.0.2" @@ -3559,15 +3716,41 @@ external-editor@^3.0.3: iconv-lite "^0.4.24" tmp "^0.0.33" +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + extsprintf@1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +faker@^5.3.1: + version "5.5.3" + resolved "https://registry.yarnpkg.com/faker/-/faker-5.5.3.tgz#c57974ee484431b25205c2c8dc09fda861e51e0e" + integrity sha512-wLTv2a28wjUyWkbnX7u/ABZBkUkIF2fCd73V6P2oFqEGEktDfzWx4UxrSqtPRw0xPRAcjeAOIiJWqZm3pP4u3g== + +fast-check@^2.12.1: + version "2.20.0" + resolved "https://registry.yarnpkg.com/fast-check/-/fast-check-2.20.0.tgz#0c88d8640649e981adb501ef92f90a26dc8bd628" + integrity sha512-tFNjLyPnOUg6iimVxOtoWMJOIyybCo7B8gUGm1yv43jDCQ0hlPUn0fmna/XO/n1yPxn/dxQw3+IygPSbMDiiog== + dependencies: + pure-rand "^5.0.0" fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" @@ -3580,16 +3763,15 @@ fast-diff@^1.1.2: integrity sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w== fast-glob@^3.0.3: - version "3.2.5" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.5.tgz#7939af2a656de79a4f1901903ee8adcaa7cb9661" - integrity sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg== + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.0" + glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.2" - picomatch "^2.2.1" + micromatch "^4.0.4" fast-json-stable-stringify@^2.0.0: version "2.1.0" @@ -3602,9 +3784,9 @@ fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= fastq@^1.6.0: - version "1.11.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" - integrity sha512-7Eczs8gIPDrVzT+EksYBcupqMyxSHXXrHOLRRxU2/DicV8789MRBRR8+Hc2uWzUupOs4YS4JzBmBxjjCVBxD/g== + version "1.13.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" + integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== dependencies: reusify "^1.0.4" @@ -3634,6 +3816,16 @@ file-uri-to-path@1.0.0: resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + fill-range@^7.0.1: version "7.0.1" resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" @@ -3661,7 +3853,15 @@ find-up@3.0.0, find-up@^3.0.0: dependencies: locate-path "^3.0.0" -find-up@^2.1.0: +find-up@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" + integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= + dependencies: + path-exists "^2.0.0" + pinkie-promise "^2.0.0" + +find-up@^2.0.0, find-up@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= @@ -3706,21 +3906,19 @@ flatted@^2.0.0: integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== flatted@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.1.1.tgz#c4b489e80096d9df1dfc97c79871aea7c617c469" - integrity sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA== + version "3.2.4" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.2.4.tgz#28d9969ea90661b5134259f312ab6aa7929ac5e2" + integrity sha512-8/sOawo8tJ4QOBX8YlQBMxL8+RLZfxMQOif9o0KUKTNTjMYElWPE0r/m5VNFxTRd0NSw8qSy8dajrwX4RYI1Hw== follow-redirects@^1.12.1: - version "1.13.3" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.3.tgz#e5598ad50174c1bc4e872301e82ac2cd97f90267" - integrity sha512-DUgl6+HDzB0iEptNQEXLx/KhTmDb8tZUHSeLqpnjpknR70H0nC2t9N73BK6fN4hOvJ84pKlIQVQ4k5FFlBedKA== + version "1.14.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.14.6.tgz#8cfb281bbc035b3c067d6cd975b0f6ade6e855cd" + integrity sha512-fhUl5EwSJbbl8AR+uYL2KQDxLkdSjZGR36xy46AO7cOMTrCMON6Sa28FmAnC2tRTDbd/Uuzz3aJBv7EBN7JH8A== -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= foreach@^2.0.5: version "2.0.5" @@ -3750,10 +3948,10 @@ form-data@~2.3.2: combined-stream "^1.0.6" mime-types "^2.1.12" -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== fp-ts@1.19.3: version "1.19.3" @@ -3765,6 +3963,13 @@ fp-ts@^1.0.0: resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= + dependencies: + map-cache "^0.2.2" + fresh@0.5.2: version "0.5.2" resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" @@ -3808,7 +4013,7 @@ fs-extra@^8.1.0: jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^1.2.5: +fs-minipass@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== @@ -3825,12 +4030,20 @@ fs.realpath@^1.0.0: resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + fsevents@~2.1.1: version "2.1.3" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== -fsevents@~2.3.1: +fsevents@~2.3.2: version "2.3.2" resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== @@ -3845,7 +4058,7 @@ functional-red-black-tree@^1.0.1, functional-red-black-tree@~1.0.1: resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= -ganache-cli@^6.12.2: +ganache-cli@^6.1.0, ganache-cli@^6.12.2: version "6.12.2" resolved "https://registry.yarnpkg.com/ganache-cli/-/ganache-cli-6.12.2.tgz#c0920f7db0d4ac062ffe2375cb004089806f627a" integrity sha512-bnmwnJDBDsOWBUP8E/BExWf85TsdDEFelQSzihSJm9VChVO1SHp94YXLP5BlA4j/OTxp0wR4R1Tje9OHOuAJVw== @@ -3854,6 +4067,11 @@ ganache-cli@^6.12.2: source-map-support "0.5.12" yargs "13.2.4" +get-caller-file@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" + integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== + get-caller-file@^2.0.1: version "2.0.5" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" @@ -3864,7 +4082,7 @@ get-func-name@^2.0.0: resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.0.tgz#ead774abee72e20409433a066366023dd6887a41" integrity sha1-6td0q+5y4gQJQzoGY2YCPdaIekE= -get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: +get-intrinsic@^1.0.2, get-intrinsic@^1.1.0, get-intrinsic@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" integrity sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q== @@ -3873,11 +4091,6 @@ get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: has "^1.0.3" has-symbols "^1.0.1" -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - get-port@^3.1.0: version "3.2.0" resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" @@ -3907,6 +4120,19 @@ get-stream@^6.0.0: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-symbol-description@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" + integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= + getpass@^0.1.1: version "0.1.7" resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" @@ -3922,7 +4148,15 @@ ghost-testrpc@^0.0.2: chalk "^2.4.2" node-emoji "^1.10.0" -glob-parent@^5.1.0, glob-parent@~5.1.0: +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.1.2, glob-parent@~5.1.0, glob-parent@~5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== @@ -3960,9 +4194,9 @@ glob@^5.0.15: path-is-absolute "^1.0.0" glob@^7.0.0, glob@^7.1.2, glob@^7.1.3: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== + version "7.2.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -4000,17 +4234,10 @@ globals@^11.7.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^13.6.0: - version "13.7.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.7.0.tgz#aed3bcefd80ad3ec0f0be2cf0c895110c0591795" - integrity sha512-Aipsz6ZKRxa/xQkZhNg0qIWXT6x6rD46f6x/PCnBomlttdIyAPak4YD9jTmKpZ72uROSMU87qJtcgpgHaVchiA== - dependencies: - type-fest "^0.20.2" - -globals@^13.9.0: - version "13.10.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-13.10.0.tgz#60ba56c3ac2ca845cfbf4faeca727ad9dd204676" - integrity sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g== +globals@^13.6.0, globals@^13.9.0: + version "13.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.12.0.tgz#4d733760304230a0082ed96e21e5c565f898089e" + integrity sha512-uS8X6lSKN2JumVoXrbUz+uG4BYG+eiawqm3qFcT7ammfbUHeCBoJMlHcec/S3krSk73/AE/f0szYFmgAA3kYZg== dependencies: type-fest "^0.20.2" @@ -4065,10 +4292,10 @@ got@^7.1.0: url-parse-lax "^1.0.0" url-to-options "^1.0.1" -graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.6" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee" - integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ== +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0, graceful-fs@^4.2.4: + version "4.2.8" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a" + integrity sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg== growl@1.10.5: version "1.10.5" @@ -4113,24 +4340,25 @@ hardhat-contract-sizer@^2.1.1: cli-table3 "^0.6.0" colors "^1.4.0" -hardhat-gas-reporter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.4.tgz#59e3137e38e0dfeac2e4f90d5c74160b50ad4829" - integrity sha512-G376zKh81G3K9WtDA+SoTLWsoygikH++tD1E7llx+X7J+GbIqfwhDKKgvJjcnEesMrtR9UqQHK02lJuXY1RTxw== +hardhat-gas-reporter@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.6.tgz#699bc0bb96e8c962c7f136a1c1f29cd3c32d569e" + integrity sha512-LlCEmSx1dZpnxKmODb2hmP5eJ1IAM5It3NnBNTUpBTxn9g9qPPI3JQTxj8AbGEiNc3r6V+w/mXYCmiC8pWvnoQ== dependencies: - eth-gas-reporter "^0.2.20" + array-uniq "1.0.3" + eth-gas-reporter "^0.2.23" sha1 "^1.1.1" -hardhat@^2.6.8: - version "2.6.8" - resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.6.8.tgz#9ef6f8c16f9044acb95609d15a760b89177b8181" - integrity sha512-iRVd5DgcIVV3rNXMlogOfwlXAhHp7Wy/OjjFiUhTey8Unvo6oq5+Is5ANiKVN+Iw07Pcb/HpkGt7jCB6a4ITgg== - dependencies: - "@ethereumjs/block" "^3.4.0" - "@ethereumjs/blockchain" "^5.4.0" - "@ethereumjs/common" "^2.4.0" - "@ethereumjs/tx" "^3.3.0" - "@ethereumjs/vm" "^5.5.2" +hardhat@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.7.1.tgz#576a0420ce874fe00e7749924aefef2a0b14d3ae" + integrity sha512-zmyQe9tOMI9UmFXNnDzdrKMezmKyAawVxU0oIipWPbl9D3zvQJEKaOaNgc9gG31dgkh4WqWCnUR/QxV1U6ctzA== + dependencies: + "@ethereumjs/block" "^3.6.0" + "@ethereumjs/blockchain" "^5.5.0" + "@ethereumjs/common" "^2.6.0" + "@ethereumjs/tx" "^3.4.0" + "@ethereumjs/vm" "^5.6.0" "@ethersproject/abi" "^5.1.2" "@sentry/node" "^5.18.1" "@solidity-parser/parser" "^0.14.0" @@ -4148,7 +4376,7 @@ hardhat@^2.6.8: eth-sig-util "^2.5.2" ethereum-cryptography "^0.1.2" ethereumjs-abi "^0.6.8" - ethereumjs-util "^7.1.0" + ethereumjs-util "^7.1.3" find-up "^2.1.0" fp-ts "1.19.3" fs-extra "^7.0.1" @@ -4171,7 +4399,7 @@ hardhat@^2.6.8: stacktrace-parser "^0.1.10" "true-case-path" "^2.2.1" tsort "0.0.1" - uuid "^3.3.2" + uuid "^8.3.2" ws "^7.4.6" has-bigints@^1.0.1: @@ -4216,8 +4444,46 @@ has-to-string-tag-x@^1.2.0: dependencies: has-symbol-support-x "^1.4.1" -has@^1.0.3: - version "1.0.3" +has-tostringtag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" + integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== + dependencies: + has-symbols "^1.0.2" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +has@^1.0.3: + version "1.0.3" resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== dependencies: @@ -4253,22 +4519,35 @@ he@1.2.0, he@^1.1.1: resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== -highlight.js@^10.4.0, highlight.js@^10.4.1: - version "10.7.1" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.1.tgz#a8ec4152db24ea630c90927d6cae2a45f8ecb955" - integrity sha512-S6G97tHGqJ/U8DsXcEdnACbirtbx58Bx9CzIVeYli8OuswCfYI/LsXH2EiGcoGio1KAC3x4mmUwulOllJ2ZyRA== +header-case@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/header-case/-/header-case-1.0.1.tgz#9535973197c144b09613cd65d317ef19963bd02d" + integrity sha1-lTWXMZfBRLCWE81l0xfvGZY70C0= + dependencies: + no-case "^2.2.0" + upper-case "^1.1.3" + +highlight.js@^10.4.1: + version "10.7.3" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-10.7.3.tgz#697272e3991356e40c3cac566a74eef681756531" + integrity sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A== highlight.js@^9.15.8: version "9.18.5" resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.5.tgz#d18a359867f378c138d6819edfc2a8acd5f29825" integrity sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA== -highlightjs-solidity@^1.0.18, highlightjs-solidity@^1.0.21: - version "1.0.21" - resolved "https://registry.yarnpkg.com/highlightjs-solidity/-/highlightjs-solidity-1.0.21.tgz#6d257215b5b635231d4d0c523f2c419bbff6fe42" - integrity sha512-ozOtTD986CBIxuIuauzz2lqCOTpd27TbfYm+msMtNSB69mJ0cdFNvZ6rOO5iFtEHtDkVYVEFQywXffG2sX3XTw== +highlightjs-solidity@^1.0.18: + version "1.2.2" + resolved "https://registry.yarnpkg.com/highlightjs-solidity/-/highlightjs-solidity-1.2.2.tgz#049a050c0d8009c99b373537a4e66bf55366de51" + integrity sha512-+cZ+1+nAO5Pi6c70TKuMcPmwqLECxiYhnQc1MxdXckK94zyWFMNZADzu98ECNlf5xCRdNh+XKp+eklmRU+Dniw== -hmac-drbg@^1.0.0, hmac-drbg@^1.0.1: +highlightjs-solidity@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/highlightjs-solidity/-/highlightjs-solidity-2.0.2.tgz#87ffdec3c51ae8b6def42d50f9a40b4676f57e4e" + integrity sha512-q0aYUKiZ9MPQg41qx/KpXKaCpqql50qTvmwGYyLFfcjt9AE/+C9CwjVIdJZc7EYj6NGgJuFJ4im1gfgrzUU1fQ== + +hmac-drbg@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= @@ -4277,14 +4556,19 @@ hmac-drbg@^1.0.0, hmac-drbg@^1.0.1: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" -htmlparser2@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.0.1.tgz#422521231ef6d42e56bd411da8ba40aa36e91446" - integrity sha512-GDKPd+vk4jvSuvCbyuzx/unmXkk090Azec7LovXP8as1Hn8q9p3hbjmDGbUqqhknw0ajwit6LiiWqfiTUPMK7w== +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A== dependencies: domelementtype "^2.0.1" domhandler "^4.0.0" - domutils "^2.4.4" + domutils "^2.5.2" entities "^2.0.0" http-basic@^8.1.1: @@ -4313,7 +4597,18 @@ http-errors@1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -http-errors@1.7.3, http-errors@~1.7.2: +http-errors@1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.8.1.tgz#7c3f28577cbc8a207388455dbd62295ed07bd68c" + integrity sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g== + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.1" + +http-errors@~1.7.2: version "1.7.3" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== @@ -4345,6 +4640,11 @@ http-signature@~1.2.0: jsprim "^1.2.2" sshpk "^1.7.0" +https-browserify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" + integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= + https-proxy-agent@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz#e2a90542abb68a762e0a0850f6c9edadfd8506b2" @@ -4377,7 +4677,7 @@ idna-uts46-hx@^2.3.1: dependencies: punycode "2.1.0" -ieee754@^1.1.13: +ieee754@^1.1.13, ieee754@^1.1.4, ieee754@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -4388,9 +4688,9 @@ ignore@^4.0.6: integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== ignore@^5.1.1: - version "5.1.8" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57" - integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw== + version "5.1.9" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.9.tgz#9ec1a5cbe8e1446ec60d4420060d43aa6e7382fb" + integrity sha512-2zeMQpbKz5dhZ9IwL0gbxSW5w0NK/MSAMtNuhgIHEPmaU3vPdKPL0UdvUCXs5SS4JAwsBxysK5sFMW8ocFiVjQ== immediate@^3.2.3: version "3.3.0" @@ -4403,9 +4703,9 @@ immediate@~3.2.3: integrity sha1-0UD6j2FGWb1lQSMwl92qwlzdmRw= immutable@^4.0.0-rc.12: - version "4.0.0-rc.12" - resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0-rc.12.tgz#ca59a7e4c19ae8d9bf74a97bdf0f6e2f2a5d0217" - integrity sha512-0M2XxkZLx/mi3t8NVwIm1g8nHoEmM9p9UBl/G9k4+hm0kBgOVdMV/B3CY5dQ8qG8qc80NN4gDV4HQv6FTJ5q7A== + version "4.0.0" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.0.0.tgz#b86f78de6adef3608395efb269a91462797e2c23" + integrity sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw== import-fresh@^2.0.0: version "2.0.0" @@ -4446,6 +4746,11 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, i resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== +inherits@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" + integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= + inherits@2.0.3: version "2.0.3" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" @@ -4475,11 +4780,25 @@ inquirer@^6.2.2: strip-ansi "^5.1.0" through "^2.3.6" +internal-slot@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.3.tgz#7347e307deeea2faac2ac6205d4bc7d34967f59c" + integrity sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA== + dependencies: + get-intrinsic "^1.1.0" + has "^1.0.3" + side-channel "^1.0.4" + interpret@^1.0.0: version "1.4.0" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== +invert-kv@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" + integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= + invert-kv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" @@ -4497,12 +4816,27 @@ ipaddr.js@1.9.1: resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +is-accessor-descriptor@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" + integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= + dependencies: + kind-of "^3.0.2" + +is-accessor-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" + integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== + dependencies: + kind-of "^6.0.0" + is-arguments@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.0.tgz#62353031dfbee07ceb34656a6bde59efecae8dd9" - integrity sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg== + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" + has-tostringtag "^1.0.0" is-arrayish@^0.2.1: version "0.2.1" @@ -4510,9 +4844,18 @@ is-arrayish@^0.2.1: integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= is-bigint@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" + integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== + dependencies: + has-bigints "^1.0.1" + +is-binary-path@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.1.tgz#6923051dfcbc764278540b9ce0e6b3213aa5ebc2" - integrity sha512-J0ELF4yHFxHy0cmSxZuheDOz2luOdVvqjwmEcj8H/L1JHeuEDSDbeRP+Dk9kFVk5RTFzbucJ2Kb9F7ixY2QaCg== + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= + dependencies: + binary-extensions "^1.0.0" is-binary-path@~2.1.0: version "2.1.0" @@ -4522,44 +4865,103 @@ is-binary-path@~2.1.0: binary-extensions "^2.0.0" is-boolean-object@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.0.tgz#e2aaad3a3a8fca34c28f6eee135b156ed2587ff0" - integrity sha512-a7Uprx8UtD+HWdyYwnD1+ExtTgqQtD2k/1yJgtXP6wnMm8byhkoTZRl+95LLThpzNZJ5aEvi46cdH+ayMFRwmA== + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" + integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== dependencies: - call-bind "^1.0.0" + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + +is-buffer@^1.1.5: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== is-buffer@~2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" - integrity sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ== +is-callable@^1.1.4, is-callable@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.4.tgz#47301d58dd0259407865547853df6d61fe471945" + integrity sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w== is-core-module@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" - integrity sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ== + version "2.8.0" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.8.0.tgz#0321336c3d0925e497fd97f5d95cb114a5ccd548" + integrity sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw== dependencies: has "^1.0.3" +is-data-descriptor@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" + integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= + dependencies: + kind-of "^3.0.2" + +is-data-descriptor@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" + integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== + dependencies: + kind-of "^6.0.0" + is-date-object@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" + integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== + dependencies: + has-tostringtag "^1.0.0" + +is-descriptor@^0.1.0: + version "0.1.6" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" + integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== + dependencies: + is-accessor-descriptor "^0.1.6" + is-data-descriptor "^0.1.4" + kind-of "^5.0.0" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" + integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== + dependencies: + is-accessor-descriptor "^1.0.0" + is-data-descriptor "^1.0.0" + kind-of "^6.0.2" is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= -is-extglob@^2.1.1: +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= +is-fullwidth-code-point@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" + integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= + dependencies: + number-is-nan "^1.0.0" + is-fullwidth-code-point@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" @@ -4570,24 +4972,31 @@ is-fullwidth-code-point@^3.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== +is-fullwidth-code-point@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz#fae3167c729e7463f8461ce512b080a49268aa88" + integrity sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ== + is-function@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-function/-/is-function-1.0.2.tgz#4f097f30abf6efadac9833b17ca5dc03f8144e08" integrity sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ== is-generator-function@^1.0.7: - version "1.0.8" - resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.8.tgz#dfb5c2b120e02b0a8d9d2c6806cd5621aa922f7b" - integrity sha512-2Omr/twNtufVZFr1GhxjOMFPAj2sjc/dKaIqBhvo4qciXfJmITGH6ZGd8eZYNHza8t1y0e01AuqRhJwfWp26WQ== + version "1.0.10" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.0.10.tgz#f1558baf1ac17e0deea7c0415c438351ff2b3c72" + integrity sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A== + dependencies: + has-tostringtag "^1.0.0" -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= dependencies: - is-extglob "^2.1.1" + is-extglob "^2.1.0" -is-glob@^4.0.3: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -4599,26 +5008,37 @@ is-hex-prefixed@1.0.0: resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= +is-lower-case@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/is-lower-case/-/is-lower-case-1.1.3.tgz#7e147be4768dc466db3bfb21cc60b31e6ad69393" + integrity sha1-fhR75HaNxGbbO/shzGCzHmrWk5M= + dependencies: + lower-case "^1.1.0" + is-negative-zero@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" - integrity sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w== + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" + integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== is-number-object@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.4.tgz#36ac95e741cf18b283fc1ddf5e83da798e3ec197" - integrity sha512-zohwelOAur+5uXtk8O3GPQ1eAcu4ZX3UwxQhUlfFFMNpUd83gXgjbhJh6HmB6LUNV/ieOLQuDwJO3dWJosUeMw== + version "1.0.6" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0" + integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g== + dependencies: + has-tostringtag "^1.0.0" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= + dependencies: + kind-of "^3.0.2" is-number@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha1-PkcprB9f3gJc19g6iW2rn09n2w8= - is-object@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/is-object/-/is-object-1.0.2.tgz#a56552e1c665c9e950b4a025461da87e72f86fcf" @@ -4629,63 +5049,96 @@ is-plain-obj@^1.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= -is-regex@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.2.tgz#81c8ebde4db142f2cf1c53fc86d6a45788266251" - integrity sha512-axvdhb5pdhEVThqJzYXwMlVuZwC+FF2DpcOhTS+y/8jVq4trxyPgfcwIxIKiyeuLlSQYKkmUaPQJ8ZE4yNKXDg== +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: - call-bind "^1.0.2" - has-symbols "^1.0.1" + isobject "^3.0.1" -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= +is-regex@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" + integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" is-retry-allowed@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== +is-shared-array-buffer@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz#97b0c85fbdacb59c9c446fe653b82cf2b5b7cfe6" + integrity sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA== + is-stream@^1.0.0, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= is-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" - integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== +is-string@^1.0.5, is-string@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" + integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== + dependencies: + has-tostringtag "^1.0.0" is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== dependencies: - has-symbols "^1.0.1" + has-symbols "^1.0.2" -is-typed-array@^1.1.3: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.5.tgz#f32e6e096455e329eb7b423862456aa213f0eb4e" - integrity sha512-S+GRDgJlR3PyEbsX/Fobd9cqpZBuvUS+8asRqYDMLCb2qMzt1oz5m5oxQCxOgUDxiWsOVNi4yaF+/uvdlHlYug== +is-typed-array@^1.1.3, is-typed-array@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.8.tgz#cbaa6585dc7db43318bc5b89523ea384a6f65e79" + integrity sha512-HqH41TNZq2fgtGT8WHVFVJhBVGuY3AnP3Q36K8JKXUxSxRgk/d+7NjmwG2vo2mYmXK8UYZKu0qH8bVP5gEisjA== dependencies: - available-typed-arrays "^1.0.2" + available-typed-arrays "^1.0.5" call-bind "^1.0.2" - es-abstract "^1.18.0-next.2" + es-abstract "^1.18.5" foreach "^2.0.5" - has-symbols "^1.0.1" + has-tostringtag "^1.0.0" is-typedarray@^1.0.0, is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= -isarray@~1.0.0: +is-upper-case@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-upper-case/-/is-upper-case-1.1.2.tgz#8d0b1fa7e7933a1e58483600ec7d9661cbaf756f" + integrity sha1-jQsfp+eTOh5YSDYA7H2WYcuvdW8= + dependencies: + upper-case "^1.1.0" + +is-utf8@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" + integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= + +is-weakref@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" + integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== + dependencies: + call-bind "^1.0.2" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= @@ -4700,6 +5153,18 @@ iso-url@~0.4.7: resolved "https://registry.yarnpkg.com/iso-url/-/iso-url-0.4.7.tgz#de7e48120dae46921079fe78f325ac9e9217a385" integrity sha512-27fFRDnPAMnHGLq36bWTpKET+eiXct3ENlCcdcMdk+mjXrb2kw3mhBUg1B7ewAC0kVzlOPhADzQgz1SE6Tglog== +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= + isstream@~0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" @@ -4766,25 +5231,25 @@ json-buffer@3.0.0: resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= +json-loader@^0.5.4: + version "0.5.7" + resolved "https://registry.yarnpkg.com/json-loader/-/json-loader-0.5.7.tgz#dca14a70235ff82f0ac9a3abeb60d337a365185d" + integrity sha512-QLPs8Dj7lnf3e3QYS1zkCo+4ZwqOiF9d/nZnYozTISxXWCfNs9yuky5rJw4/W34s7POaNlbZmQGaB5NiXCbP4w== + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== -json-parse-even-better-errors@^2.3.0: - version "2.3.1" - resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" - integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== - json-schema-traverse@^0.4.1: version "0.4.1" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== json-stable-stringify-without-jsonify@^1.0.1: version "1.0.1" @@ -4803,6 +5268,18 @@ json-text-sequence@~0.1.0: dependencies: delimit-stream "0.1.0" +json5@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" + integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= + +json5@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json5/-/json5-1.0.1.tgz#779fb0018604fa854eacbf6252180d83543e3dbe" + integrity sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow== + dependencies: + minimist "^1.2.0" + json5@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.0.tgz#2dfefe720c6ba525d9ebd909950f0515316c89a3" @@ -4830,13 +5307,13 @@ jsonschema@^1.2.4: integrity sha512-/YgW6pRMr6M7C+4o8kS+B/2myEpHCrxO4PEWnqJNBFMjn7EWXqlQ4tGwL6xTHeRplwuZmcAncdvfOad1nT2yMw== jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== dependencies: assert-plus "1.0.0" extsprintf "1.3.0" - json-schema "0.2.3" + json-schema "0.4.0" verror "1.10.0" keccak@^2.0.0: @@ -4850,12 +5327,13 @@ keccak@^2.0.0: safe-buffer "^5.2.0" keccak@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.1.tgz#ae30a0e94dbe43414f741375cff6d64c8bea0bff" - integrity sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA== + version "3.0.2" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.2.tgz#4c2c6e8c54e04f2670ee49fa734eb9da152206e0" + integrity sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ== dependencies: node-addon-api "^2.0.0" node-gyp-build "^4.2.0" + readable-stream "^3.6.0" keyv@^3.0.0: version "3.1.0" @@ -4864,7 +5342,26 @@ keyv@^3.0.0: dependencies: json-buffer "3.0.0" -kind-of@^6.0.2: +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= + dependencies: + is-buffer "^1.1.5" + +kind-of@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" + integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== + +kind-of@^6.0.0, kind-of@^6.0.2: version "6.0.3" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== @@ -4876,6 +5373,18 @@ klaw@^1.0.0: optionalDependencies: graceful-fs "^4.1.9" +lazy-cache@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" + integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= + +lcid@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" + integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= + dependencies: + invert-kv "^1.0.0" + lcid@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" @@ -4970,45 +5479,80 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" -lines-and-columns@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.1.6.tgz#1c00c743b433cd0a4e80758f7b64a57440d9ff00" - integrity sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA= - -lint-staged@11.2.6: - version "11.2.6" - resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-11.2.6.tgz#f477b1af0294db054e5937f171679df63baa4c43" - integrity sha512-Vti55pUnpvPE0J9936lKl0ngVeTdSZpEdTNhASbkaWX7J5R9OEifo1INBGQuGW4zmy6OG+TcWPJ3m5yuy5Q8Tg== - dependencies: - cli-truncate "2.1.0" - colorette "^1.4.0" - commander "^8.2.0" - cosmiconfig "^7.0.1" +lilconfig@2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-2.0.4.tgz#f4507d043d7058b380b6a8f5cb7bcd4b34cee082" + integrity sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA== + +lint-staged@12.1.2: + version "12.1.2" + resolved "https://registry.yarnpkg.com/lint-staged/-/lint-staged-12.1.2.tgz#90c571927e1371fc133e720671dd7989eab53f74" + integrity sha512-bSMcQVqMW98HLLLR2c2tZ+vnDCnx4fd+0QJBQgN/4XkdspGRPc8DGp7UuOEBe1ApCfJ+wXXumYnJmU+wDo7j9A== + dependencies: + cli-truncate "^3.1.0" + colorette "^2.0.16" + commander "^8.3.0" debug "^4.3.2" enquirer "^2.3.6" execa "^5.1.1" - listr2 "^3.12.2" + lilconfig "2.0.4" + listr2 "^3.13.3" micromatch "^4.0.4" normalize-path "^3.0.0" - please-upgrade-node "^3.2.0" - string-argv "0.3.1" - stringify-object "3.3.0" - supports-color "8.1.1" + object-inspect "^1.11.0" + string-argv "^0.3.1" + supports-color "^9.0.2" + yaml "^1.10.2" -listr2@^3.12.2: - version "3.13.3" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.13.3.tgz#d8f6095c9371b382c9b1c2bc33c5941d8e177f11" - integrity sha512-VqAgN+XVfyaEjSaFewGPcDs5/3hBbWVaX1VgWv2f52MF7US45JuARlArULctiB44IIcEk3JF7GtoFCLqEdeuPA== +listr2@^3.13.3: + version "3.13.5" + resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.13.5.tgz#105a813f2eb2329c4aae27373a281d610ee4985f" + integrity sha512-3n8heFQDSk+NcwBn3CgxEibZGaRzx+pC64n3YjpMD1qguV4nWus3Al+Oo3KooqFKTQEJ1v7MmnbnyyNspgx3NA== dependencies: cli-truncate "^2.1.0" - clone "^2.1.2" colorette "^2.0.16" log-update "^4.0.0" p-map "^4.0.0" + rfdc "^1.3.0" rxjs "^7.4.0" through "^2.3.8" wrap-ansi "^7.0.0" +load-json-file@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" + integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + pinkie-promise "^2.0.0" + strip-bom "^2.0.0" + +load-json-file@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" + integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= + dependencies: + graceful-fs "^4.1.2" + parse-json "^2.2.0" + pify "^2.0.0" + strip-bom "^3.0.0" + +loader-runner@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.4.0.tgz#ed47066bfe534d7e84c4c7b9998c2a75607d9357" + integrity sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw== + +loader-utils@^1.1.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613" + integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA== + dependencies: + big.js "^5.2.2" + emojis-list "^3.0.0" + json5 "^1.0.1" + locate-path@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" @@ -5032,6 +5576,11 @@ locate-path@^5.0.0: dependencies: p-locate "^4.1.0" +lodash.assign@^4.0.3, lodash.assign@^4.0.6: + version "4.2.0" + resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7" + integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= + lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" @@ -5062,12 +5611,7 @@ lodash.sum@^4.0.2: resolved "https://registry.yarnpkg.com/lodash.sum/-/lodash.sum-4.0.2.tgz#ad90e397965d803d4f1ff7aa5b2d0197f3b4637b" integrity sha1-rZDjl5ZdgD1PH/eqWy0Bl/O0Y3s= -lodash.toarray@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.toarray/-/lodash.toarray-4.4.0.tgz#24c4bfcd6b2fba38bfd0594db1179d8e9b656561" - integrity sha1-JMS/zWsvuji/0FlNsRedjptlZWE= - -lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19: +lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -5089,6 +5633,23 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" +longest@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" + integrity sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc= + +lower-case-first@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/lower-case-first/-/lower-case-first-1.0.2.tgz#e5da7c26f29a7073be02d52bac9980e5922adfa1" + integrity sha1-5dp8JvKacHO+AtUrrJmA5ZIq36E= + dependencies: + lower-case "^1.1.2" + +lower-case@^1.1.0, lower-case@^1.1.1, lower-case@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac" + integrity sha1-miyr0bno4K6ZOkv31YdcOcQujqw= + lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" @@ -5099,6 +5660,14 @@ lowercase-keys@^2.0.0: resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -5135,6 +5704,18 @@ map-age-cleaner@^0.1.1: dependencies: p-defer "^1.0.0" +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= + dependencies: + object-visit "^1.0.0" + markdown-table@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" @@ -5176,6 +5757,13 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= +mem@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mem/-/mem-1.1.0.tgz#5edd52b485ca1d900fe64895505399a0dfa45f76" + integrity sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y= + dependencies: + mimic-fn "^1.0.0" + mem@^4.0.0: version "4.3.0" resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" @@ -5197,6 +5785,14 @@ memdown@^5.0.0: ltgt "~2.2.0" safe-buffer "~5.2.0" +memory-fs@^0.4.0, memory-fs@~0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.4.1.tgz#3a9a20b8462523e447cfbc7e8bb80ed667bfc552" + integrity sha1-OpoguEYlI+RHz7x+i7gO1me/xVI= + dependencies: + errno "^0.1.3" + readable-stream "^2.0.1" + memorystream@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" @@ -5217,13 +5813,13 @@ merge2@^1.2.3, merge2@^1.3.0: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -merkle-patricia-tree@^4.2.0, merkle-patricia-tree@^4.2.1: - version "4.2.1" - resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.1.tgz#fc43e7b162e597a0720ccdd702bf1d49765691d2" - integrity sha512-25reMgrT8PhJy0Ba0U7fMZD2oobS1FPWB9vQa0uBpJYIQYYuFXEHoqEkTqA/UzX+s9br3pmUVVY/TOsFt/x0oQ== +merkle-patricia-tree@^4.2.0, merkle-patricia-tree@^4.2.2: + version "4.2.2" + resolved "https://registry.yarnpkg.com/merkle-patricia-tree/-/merkle-patricia-tree-4.2.2.tgz#6dec17855370172458244c2f42c989dd60b773a3" + integrity sha512-eqZYNTshcYx9aESkSPr71EqwsR/QmpnObDEV4iLxkt/x/IoLYZYjJvKY72voP/27Vy61iMOrfOG6jrn7ttXD+Q== dependencies: "@types/levelup" "^4.3.0" - ethereumjs-util "^7.1.0" + ethereumjs-util "^7.1.2" level-mem "^5.0.1" level-ws "^2.0.0" readable-stream "^3.6.0" @@ -5235,13 +5831,24 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= -micromatch@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.2.tgz#4fcb0999bf9fbc2fcbdd212f6d629b9a56c39259" - integrity sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q== - dependencies: - braces "^3.0.1" - picomatch "^2.0.5" +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" micromatch@^4.0.4: version "4.0.4" @@ -5259,17 +5866,17 @@ miller-rabin@^4.0.0: bn.js "^4.0.0" brorand "^1.0.1" -mime-db@1.46.0: - version "1.46.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.46.0.tgz#6267748a7f799594de3cbc8cde91def349661cee" - integrity sha512-svXaP8UQRZ5K7or+ZmfNhg2xX3yKDMUzqadsSqi4NCH/KomcH75MAMYAGVlvXn4+b/xOPhS3I2uHKRUzvjY7BQ== +mime-db@1.51.0: + version "1.51.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.51.0.tgz#d9ff62451859b18342d960850dc3cfb77e63fb0c" + integrity sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g== mime-types@^2.1.12, mime-types@^2.1.16, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.29" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.29.tgz#1d4ab77da64b91f5f72489df29236563754bb1b2" - integrity sha512-Y/jMt/S5sR9OaqteJtslsFZKWOIIqMACsJSiHghlCAyhf7jfVYjKBmLiX8OgpWeW+fjJ2b+Az69aPFPkUOY6xQ== + version "2.1.34" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.34.tgz#5a712f9ec1503511a945803640fafe09d3793c24" + integrity sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A== dependencies: - mime-db "1.46.0" + mime-db "1.51.0" mime@1.6.0: version "1.6.0" @@ -5308,7 +5915,7 @@ minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: +minimalistic-crypto-utils@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= @@ -5320,12 +5927,12 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: dependencies: brace-expansion "^1.1.7" -minimist@^1.2.5: +minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== -minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: +minipass@^2.6.0, minipass@^2.9.0: version "2.9.0" resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== @@ -5333,13 +5940,21 @@ minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: safe-buffer "^5.1.2" yallist "^3.0.0" -minizlib@^1.2.1: +minizlib@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== dependencies: minipass "^2.9.0" +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + mkdirp-promise@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" @@ -5352,7 +5967,7 @@ mkdirp@*: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -mkdirp@0.5.5, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@0.5.5, mkdirp@0.5.x, mkdirp@^0.5.1, mkdirp@^0.5.5, mkdirp@~0.5.0: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -5360,11 +5975,11 @@ mkdirp@0.5.5, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1: minimist "^1.2.5" mnemonist@^0.38.0: - version "0.38.3" - resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.3.tgz#35ec79c1c1f4357cfda2fe264659c2775ccd7d9d" - integrity sha512-2K9QYubXx/NAjv4VLq1d1Ly8pWNC5L3BrixtdkyTegXWJIqY+zLNDhhX/A+ZwWt70tB1S8H4BE8FLYEFyNoOBw== + version "0.38.5" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== dependencies: - obliterator "^1.6.1" + obliterator "^2.0.0" mocha@^7.1.1, mocha@^7.1.2: version "7.2.0" @@ -5397,9 +6012,9 @@ mocha@^7.1.1, mocha@^7.1.2: yargs-unparser "1.6.0" mock-fs@^4.1.0: - version "4.13.0" - resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.13.0.tgz#31c02263673ec3789f90eb7b6963676aa407a598" - integrity sha512-DD0vOdofJdoaRNtnWcrXe6RQbpHkPPmtqGq14uRX0F8ZKJ5nv89CVTYl/BZdppDxBDaV0hl75htg3abpEWlPZA== + version "4.14.0" + resolved "https://registry.yarnpkg.com/mock-fs/-/mock-fs-4.14.0.tgz#ce5124d2c601421255985e6e94da80a7357b1b18" + integrity sha512-qYvlv/exQ4+svI3UOvPUpLDF0OMX5euvUH0Ny4N5QyRyhNdgAgUrVH3iUINSzEPLvx0kbo/Bp28GJKIqvE7URw== ms@2.0.0: version "2.0.0" @@ -5466,16 +6081,38 @@ mute-stream@0.0.7: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= -nan@^2.14.0: - version "2.14.2" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.2.tgz#f5376400695168f4cc694ac9393d0c9585eeea19" - integrity sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ== +nan@^2.12.1, nan@^2.14.0: + version "2.15.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.15.0.tgz#3f34a473ff18e15c1b5626b62903b5ad6e665fee" + integrity sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ== + +nano-base32@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/nano-base32/-/nano-base32-1.0.1.tgz#ba548c879efcfb90da1c4d9e097db4a46c9255ef" + integrity sha1-ulSMh578+5DaHE2eCX20pGySVe8= nano-json-stream-parser@^0.1.2: version "0.1.2" resolved "https://registry.yarnpkg.com/nano-json-stream-parser/-/nano-json-stream-parser-0.1.2.tgz#0cc8f6d0e2b622b479c40d499c46d64b755c6f5f" integrity sha1-DMj20OK2IrR5xA1JnEbWS3Vcb18= +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -5486,7 +6123,7 @@ negotiator@0.6.2: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== -neo-async@^2.6.0: +neo-async@^2.5.0, neo-async@^2.6.0: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== @@ -5501,17 +6138,24 @@ nice-try@^1.0.4: resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== +no-case@^2.2.0, no-case@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/no-case/-/no-case-2.3.2.tgz#60b813396be39b3f1288a4c1ed5d1e7d28b464ac" + integrity sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ== + dependencies: + lower-case "^1.1.1" + node-addon-api@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== node-emoji@^1.10.0, node-emoji@^1.4.1: - version "1.10.0" - resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.10.0.tgz#8886abd25d9c7bb61802a658523d1f8d2a89b2da" - integrity sha512-Yt3384If5H6BYGVHiHwTL+99OzJKHhgp82S8/dktEK73T26BazdgZ4JZh92xSVtGNJvz9UbXdNAc5hcrXV42vw== + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== dependencies: - lodash.toarray "^4.4.0" + lodash "^4.17.21" node-environment-flags@1.0.6: version "1.0.6" @@ -5522,24 +6166,55 @@ node-environment-flags@1.0.6: semver "^5.7.0" node-fetch@^2.6.0: - version "2.6.1" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" - integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + version "2.6.6" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.6.tgz#1751a7c01834e8e1697758732e9efb6eeadfaf89" + integrity sha512-Z8/6vRlTUChSdIgMa51jxQ4lrw/Jy5SOW10ObaA47/RElsAN2c5Pn8bTgFGWn/ibwzXTE8qwr1Yzx28vsecXEA== + dependencies: + whatwg-url "^5.0.0" -node-gyp-build@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.2.3.tgz#ce6277f853835f718829efb47db20f3e4d9c4739" - integrity sha512-MN6ZpzmfNCRM+3t57PTJHgHyw/h4OWnZ6mR8P5j/uZtqQr46RRuDE/P+g3n0YR/AiYXeWixZZzaip77gdICfRg== +node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.3.0.tgz#9f256b03e5826150be39c764bf51e993946d71a3" + integrity sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q== + +node-libs-browser@^2.0.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" + integrity sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q== + dependencies: + assert "^1.1.1" + browserify-zlib "^0.2.0" + buffer "^4.3.0" + console-browserify "^1.1.0" + constants-browserify "^1.0.0" + crypto-browserify "^3.11.0" + domain-browser "^1.1.1" + events "^3.0.0" + https-browserify "^1.0.0" + os-browserify "^0.3.0" + path-browserify "0.0.1" + process "^0.11.10" + punycode "^1.2.4" + querystring-es3 "^0.2.0" + readable-stream "^2.3.3" + stream-browserify "^2.0.1" + stream-http "^2.7.2" + string_decoder "^1.0.0" + timers-browserify "^2.0.4" + tty-browserify "0.0.0" + url "^0.11.0" + util "^0.11.0" + vm-browserify "^1.0.1" nofilter@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-1.0.4.tgz#78d6f4b6a613e7ced8b015cec534625f7667006e" integrity sha512-N8lidFp+fCz+TD51+haYdbDGrcBWwuHX40F5+z0qkUjMJ5Tp+rdSuAkMJ9N9eoolDlEVTf6u5icM+cNKkKW2mA== -nofilter@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.0.3.tgz#3ff3b142efdccb403434ccae4a0c2c835cb9b522" - integrity sha512-TN/MCrQmXQk5DyUJ8TGUq1Il8rv4fTsjddLmMopV006QP8DMkglmGgYfQKD5620vXLRXfr8iGI6ZZ4/ZWld2cQ== +nofilter@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" + integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== nopt@3.x: version "3.0.6" @@ -5548,15 +6223,32 @@ nopt@3.x: dependencies: abbrev "1" +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= + dependencies: + remove-trailing-separator "^1.0.1" + normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== normalize-url@^4.1.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" - integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + version "4.5.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.1.tgz#0dd90cf1288ee1d1313b87081c9a5932ee48518a" + integrity sha512-9UZCFRHQdNrfTpGg8+1INIg93B6zE0aXMVFkw1WFwvO4SlZywU6aLg5Of0Ap/PgcbSw4LNxvMWXMeugwMCX0AA== npm-run-path@^2.0.0: version "2.0.2" @@ -5572,13 +6264,18 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -nth-check@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" - integrity sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q== +nth-check@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.0.1.tgz#2efe162f5c3da06a28959fbd3db75dbeea9f0fc2" + integrity sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w== dependencies: boolbase "^1.0.0" +number-is-nan@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" + integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= + number-to-bn@1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" @@ -5592,23 +6289,39 @@ oauth-sign@~0.9.0: resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== -object-assign@^4, object-assign@^4.1.0, object-assign@^4.1.1: +object-assign@^4, object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= -object-inspect@^1.9.0: - version "1.9.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.9.0.tgz#c90521d74e1127b67266ded3394ad6116986533a" - integrity sha512-i3Bp9iTqwhaLZBxGkRfo5ZbE07BQRT7MGu8+nNgwW9ItGp1TzCTw2DLEoWwjClxBjOFI/hWljTAmYGCEwmtnOw== +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.11.0, object-inspect@^1.9.0: + version "1.11.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.11.1.tgz#d4bd7d7de54b9a75599f59a00bd698c1f1c6549b" + integrity sha512-If7BjFlpkzzBeV1cqgT3OSWT3azyoxDGajR+iGnFBfVV2EWyDyWaZZW2ERDjUaY2QM8i5jI3Sj7mhsM4DDAqWA== object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@4.1.0: - version "4.1.0" +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= + dependencies: + isobject "^3.0.0" + +object.assign@4.1.0: + version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== dependencies: @@ -5627,26 +6340,26 @@ object.assign@^4.1.2: has-symbols "^1.0.1" object-keys "^1.1.1" -object.getownpropertydescriptors@^2.0.3, object.getownpropertydescriptors@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz#1bd63aeacf0d5d2d2f31b5e393b03a7c601a23f7" - integrity sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ== +object.getownpropertydescriptors@^2.0.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz#b223cf38e17fefb97a63c10c91df72ccb386df9e" + integrity sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw== dependencies: call-bind "^1.0.2" define-properties "^1.1.3" - es-abstract "^1.18.0-next.2" - -obliterator@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-1.6.1.tgz#dea03e8ab821f6c4d96a299e17aef6a3af994ef3" - integrity sha512-9WXswnqINnnhOG/5SLimUlzuU1hFJUc8zkwyD59Sd+dPOMf05PmnYG/d6Q7HZ+KmgkZJa1PxRso6QdM3sTNHig== + es-abstract "^1.19.1" -oboe@2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/oboe/-/oboe-2.1.4.tgz#20c88cdb0c15371bb04119257d4fdd34b0aa49f6" - integrity sha1-IMiM2wwVNxuwQRklfU/dNLCqSfY= +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= dependencies: - http-https "^1.0.0" + isobject "^3.0.1" + +obliterator@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.1.tgz#fbdd873bf39fc4f365a53b1fc86617a22526987c" + integrity sha512-XnkiCrrBcIZQitJPAI36mrrpEUvatbte8hLcTcQwKA1v9NkCKasSi+UAguLsLDs/out7MoRzAlmz7VXvY6ph6w== oboe@2.1.5: version "2.1.5" @@ -5707,6 +6420,27 @@ optionator@^0.9.1: type-check "^0.4.0" word-wrap "^1.2.3" +os-browserify@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" + integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= + +os-locale@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" + integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= + dependencies: + lcid "^1.0.0" + +os-locale@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" + integrity sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA== + dependencies: + execa "^0.7.0" + lcid "^1.0.0" + mem "^1.1.0" + os-locale@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -5805,11 +6539,18 @@ p-try@^2.0.0: resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== -pako@^1.0.4: +pako@^1.0.4, pako@~1.0.5: version "1.0.11" resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== +param-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/param-case/-/param-case-2.1.1.tgz#df94fd8cf6531ecf75e6bef9a0858fbc72be2247" + integrity sha1-35T9jPZTHs915r75oIWPvHK+Ikc= + dependencies: + no-case "^2.2.0" + parent-module@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" @@ -5834,9 +6575,16 @@ parse-cache-control@^1.0.1: integrity sha1-juqz5U+laSD+Fro493+iGqzC104= parse-headers@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.3.tgz#5e8e7512383d140ba02f0c7aa9f49b4399c92515" - integrity sha512-QhhZ+DCCit2Coi2vmAKbq5RGTRcQUOE2+REgv8vdyu7MnYx2eZztegqtTx99TZ86GTIwqiy3+4nQTWZ2tgmdCA== + version "2.0.4" + resolved "https://registry.yarnpkg.com/parse-headers/-/parse-headers-2.0.4.tgz#9eaf2d02bed2d1eff494331ce3df36d7924760bf" + integrity sha512-psZ9iZoCNFLrgRjZ1d8mn0h9WRqJwFxM9q3x7iUjN/YT2OksthDJ5TiPCu2F38kS4zutqfW+YdVVkBZZx3/1aw== + +parse-json@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" + integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= + dependencies: + error-ex "^1.2.0" parse-json@^4.0.0: version "4.0.0" @@ -5846,24 +6594,14 @@ parse-json@^4.0.0: error-ex "^1.3.1" json-parse-better-errors "^1.0.1" -parse-json@^5.0.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" - integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== - dependencies: - "@babel/code-frame" "^7.0.0" - error-ex "^1.3.1" - json-parse-even-better-errors "^2.3.0" - lines-and-columns "^1.1.6" - -parse5-htmlparser2-tree-adapter@^6.0.0: +parse5-htmlparser2-tree-adapter@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" integrity sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA== dependencies: parse5 "^6.0.1" -parse5@^6.0.0, parse5@^6.0.1: +parse5@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== @@ -5873,6 +6611,43 @@ parseurl@~1.3.3: resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== +pascal-case@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pascal-case/-/pascal-case-2.0.1.tgz#2d578d3455f660da65eca18ef95b4e0de912761e" + integrity sha1-LVeNNFX2YNpl7KGO+VtODekSdh4= + dependencies: + camel-case "^3.0.0" + upper-case-first "^1.1.0" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= + +path-browserify@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" + integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== + +path-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/path-case/-/path-case-2.1.1.tgz#94b8037c372d3fe2906e465bb45e25d226e8eea5" + integrity sha1-lLgDfDctP+KQbkZbtF4l0ibo7qU= + dependencies: + no-case "^2.2.0" + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= + +path-exists@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" + integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= + dependencies: + pinkie-promise "^2.0.0" + path-exists@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" @@ -5904,15 +6679,31 @@ path-key@^3.0.0, path-key@^3.1.0: integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== path-to-regexp@0.1.7: version "0.1.7" resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= +path-type@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" + integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= + dependencies: + graceful-fs "^4.1.2" + pify "^2.0.0" + pinkie-promise "^2.0.0" + +path-type@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" + integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= + dependencies: + pify "^2.0.0" + path-type@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" @@ -5924,9 +6715,9 @@ pathval@^1.1.1: integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== pbkdf2@^3.0.17, pbkdf2@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.1.tgz#cb8724b0fada984596856d1a6ebafd3584654b94" - integrity sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg== + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== dependencies: create-hash "^1.1.2" create-hmac "^1.1.4" @@ -5939,27 +6730,37 @@ performance-now@^2.1.0: resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= -picomatch@^2.0.4, picomatch@^2.0.5, picomatch@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -picomatch@^2.2.3: +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3: version "2.3.0" resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.0.tgz#f1f061de8f6a4bf022892e2d128234fb98302972" integrity sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw== +pify@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= + pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== -please-upgrade-node@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz#aeddd3f994c933e4ad98b99d9a556efa0e2fe942" - integrity sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg== +pinkie-promise@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" + integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= dependencies: - semver-compare "^1.0.0" + pinkie "^2.0.0" + +pinkie@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" + integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= prelude-ls@^1.2.1: version "1.2.1" @@ -5993,10 +6794,10 @@ prettier@^1.14.3: resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.19.1.tgz#f7d7f5ff8a9cd872a7be4ca142095956a60797cb" integrity sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew== -prettier@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.4.1.tgz#671e11c89c14a4cfc876ce564106c4a6726c9f5c" - integrity sha512-9fbDAXSBcc6Bs1mZrDYb3XKzDLm4EXXL9sC1LqKP5rZkT6KRr/rf9amVUcODVXgguK/isJz0d0hP72WeaKWsvA== +prettier@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" + integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== printj@~1.1.0: version "1.1.2" @@ -6035,11 +6836,11 @@ proper-lockfile@^4.1.1: signal-exit "^3.0.2" proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== dependencies: - forwarded "~0.1.2" + forwarded "0.2.0" ipaddr.js "1.9.1" prr@~1.0.1: @@ -6047,6 +6848,11 @@ prr@~1.0.1: resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476" integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY= +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= + psl@^1.1.28: version "1.8.0" resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" @@ -6072,25 +6878,45 @@ pump@^3.0.0: end-of-stream "^1.1.0" once "^1.3.1" +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= + punycode@2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.0.tgz#5f863edc89b96db09074bad7947bf09056ca4e7d" integrity sha1-X4Y+3Im5bbCQdLrXlHvwkFbKTn0= +punycode@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" + integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= + punycode@^2.1.0, punycode@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== +pure-rand@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-5.0.0.tgz#87f5bdabeadbd8904e316913a5c0b8caac517b37" + integrity sha512-lD2/y78q+7HqBx2SaT6OT4UcwtvXNRfEpzYEzl0EQ+9gZq2Qi3fa0HDnYPeqQwhlHJFBUhT7AO3mLU3+8bynHA== + qs@6.7.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== +qs@6.9.6: + version "6.9.6" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee" + integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ== + qs@^6.4.0, qs@^6.7.0: - version "6.10.1" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.1.tgz#4931482fa8d647a5aab799c5271d2133b981fb6a" - integrity sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg== + version "6.10.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.2.tgz#c1431bea37fc5b24c5bdbafa20f16bdf2a4b9ffe" + integrity sha512-mSIdjzqznWgfd4pMii7sHtaYF8rx8861hBO80SraY5GT0XQibWZWJSid0avzHGkDIZLImux2S5mXO0Hfct2QCw== dependencies: side-channel "^1.0.4" @@ -6108,6 +6934,16 @@ query-string@^5.0.1: object-assign "^4.1.0" strict-uri-encode "^1.0.0" +querystring-es3@^0.2.0: + version "0.2.1" + resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" + integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= + queue-microtask@^1.2.2: version "1.2.3" resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" @@ -6143,17 +6979,51 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -raw-body@^2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.1.tgz#30ac82f98bb5ae8c152e67149dac8d55153b168c" - integrity sha512-9WmIKF6mkvA0SLmA2Knm9+qj89e+j1zqgyn8aXGd7+nAduPoqgI9lO57SAZNn/Byzo5P7JhXTyg9PzaJbH73bA== +raw-body@2.4.2, raw-body@^2.4.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.2.tgz#baf3e9c21eebced59dd6533ac872b71f7b61cb32" + integrity sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ== dependencies: - bytes "3.1.0" - http-errors "1.7.3" + bytes "3.1.1" + http-errors "1.8.1" iconv-lite "0.4.24" unpipe "1.0.0" -readable-stream@^2.2.2: +read-pkg-up@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" + integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= + dependencies: + find-up "^1.0.0" + read-pkg "^1.0.0" + +read-pkg-up@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" + integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= + dependencies: + find-up "^2.0.0" + read-pkg "^2.0.0" + +read-pkg@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" + integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= + dependencies: + load-json-file "^1.0.0" + normalize-package-data "^2.3.2" + path-type "^1.0.0" + +read-pkg@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" + integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= + dependencies: + load-json-file "^2.0.0" + normalize-package-data "^2.3.2" + path-type "^2.0.0" + +readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -6175,6 +7045,15 @@ readable-stream@^3.1.0, readable-stream@^3.4.0, readable-stream@^3.6.0: string_decoder "^1.1.1" util-deprecate "^1.0.1" +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + readdirp@~3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.2.0.tgz#c30c33352b12c96dfb4b895421a49fd5a9593839" @@ -6182,10 +7061,10 @@ readdirp@~3.2.0: dependencies: picomatch "^2.0.4" -readdirp@~3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" - integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== dependencies: picomatch "^2.2.1" @@ -6210,6 +7089,19 @@ redeyed@~2.1.0: dependencies: esprima "~4.0.0" +regenerator-runtime@^0.13.4: + version "0.13.9" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" + integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -6220,6 +7112,21 @@ regexpp@^3.2.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.2.0.tgz#0425a2768d8f23bad70ca4b90461fa2f1213e1b2" integrity sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg== +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.5.2, repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= + req-cwd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" @@ -6291,11 +7198,21 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= +require-from-string@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-1.2.1.tgz#529c9ccef27380adfec9a2f965b649bbee636418" + integrity sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg= + require-from-string@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== +require-main-filename@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" + integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= + require-main-filename@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" @@ -6311,6 +7228,11 @@ resolve-from@^4.0.0: resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= + resolve@1.1.x: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" @@ -6323,7 +7245,7 @@ resolve@1.17.0: dependencies: path-parse "^1.0.6" -resolve@^1.1.6: +resolve@^1.1.6, resolve@^1.10.0: version "1.20.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A== @@ -6354,6 +7276,11 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + retry@^0.12.0: version "0.12.0" resolved "https://registry.yarnpkg.com/retry/-/retry-0.12.0.tgz#1b42a6266a21f07421d1b0b54b7dc167b01c013b" @@ -6364,6 +7291,18 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rfdc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" + integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== + +right-align@^0.1.1: + version "0.1.3" + resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" + integrity sha1-YTObci/mo1FWiSENJOFMlhSGE+8= + dependencies: + align-text "^0.1.1" + rimraf@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -6385,7 +7324,12 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" -ripemd160@^2.0.0, ripemd160@^2.0.1: +ripemd160-min@0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/ripemd160-min/-/ripemd160-min-0.0.6.tgz#a904b77658114474d02503e819dcc55853b67e62" + integrity sha512-+GcJgQivhs6S9qvLogusiTcS9kQUfgR75whKuy5jIhuiOfQuJ8fjqxV6EGD5duH1Y/FawFUMtMhyeq3Fbnib8A== + +ripemd160@^2.0.0, ripemd160@^2.0.1, ripemd160@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== @@ -6394,11 +7338,11 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: inherits "^2.0.1" rlp@^2.0.0, rlp@^2.2.3, rlp@^2.2.4: - version "2.2.6" - resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.6.tgz#c80ba6266ac7a483ef1e69e8e2f056656de2fb2c" - integrity sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg== + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== dependencies: - bn.js "^4.11.1" + bn.js "^5.2.0" run-async@^2.2.0: version "2.4.1" @@ -6418,9 +7362,9 @@ rustbn.js@~0.2.0: integrity sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA== rxjs@^6.4.0: - version "6.6.6" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.6.tgz#14d8417aa5a07c5e633995b525e1e3c0dec03b70" - integrity sha512-/oTwee4N4iWzAMAL9xdGKjkEHmIwupR3oXbQjCKywF1BeFohswF3vZdogbmEF6pZkOsXTzWkrZszrWpQTByYVg== + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== dependencies: tslib "^1.9.0" @@ -6436,11 +7380,18 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@~5.2.0: +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= + dependencies: + ret "~0.1.10" + "safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" @@ -6504,12 +7455,7 @@ semaphore-async-await@^1.5.1: resolved "https://registry.yarnpkg.com/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz#857bef5e3644601ca4b9570b87e9df5ca12974fa" integrity sha1-hXvvXjZEYBykuVcLh+nfXKEpdPo= -semver-compare@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" - integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= - -semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: +"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.0: version "5.7.1" resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== @@ -6545,6 +7491,14 @@ send@0.17.1: range-parser "~1.2.1" statuses "~1.5.0" +sentence-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/sentence-case/-/sentence-case-2.1.1.tgz#1f6e2dda39c168bf92d13f86d4a918933f667ed4" + integrity sha1-H24t2jnBaL+S0T+G1KkYkz9mftQ= + dependencies: + no-case "^2.2.0" + upper-case-first "^1.1.2" + serve-static@1.14.1: version "1.14.1" resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" @@ -6571,12 +7525,22 @@ set-blocking@^2.0.0: resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + setimmediate@1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.4.tgz#20e81de622d4a02588ce0c8da8973cbcf1d3138f" integrity sha1-IOgd5iLUoCWIzgyNqJc8vPHTE48= -setimmediate@^1.0.5: +setimmediate@^1.0.4, setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" integrity sha1-KQy7Iy4waULX1+qbg3Mqt4VvgoU= @@ -6586,6 +7550,11 @@ setprototypeof@1.1.1: resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + sha.js@^2.4.0, sha.js@^2.4.8: version "2.4.11" resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" @@ -6602,6 +7571,13 @@ sha1@^1.1.1: charenc ">= 0.0.1" crypt ">= 0.0.1" +sha3@^2.1.1: + version "2.1.4" + resolved "https://registry.yarnpkg.com/sha3/-/sha3-2.1.4.tgz#000fac0fe7c2feac1f48a25e7a31b52a6492cc8f" + integrity sha512-S8cNxbyb0UGUM2VhRD4Poe5N58gJnJsLJ5vC7FYWGUmGhcsj4++WaIOBFVDxlG0W3To6xBuiRh+i0Qp2oNCOtg== + dependencies: + buffer "6.0.3" + shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -6645,9 +7621,9 @@ side-channel@^1.0.4: object-inspect "^1.9.0" signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + version "3.0.6" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.6.tgz#24e630c4b0f03fea446a2bd299e62b4a6ca8d0af" + integrity sha512-sDl4qMFpijcGw22U5w63KmD3cZJfBuFlVNbVMKje2keoKML7X2UzWbc4XrmEbDwg0NXJc3yv4/ox7b+JWb57kQ== simple-concat@^1.0.0: version "1.0.1" @@ -6695,6 +7671,51 @@ slice-ansi@^4.0.0: astral-regex "^2.0.0" is-fullwidth-code-point "^3.0.0" +slice-ansi@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-5.0.0.tgz#b73063c57aa96f9cd881654b15294d95d285c42a" + integrity sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ== + dependencies: + ansi-styles "^6.0.0" + is-fullwidth-code-point "^4.0.0" + +snake-case@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/snake-case/-/snake-case-2.1.0.tgz#41bdb1b73f30ec66a04d4e2cad1b76387d4d6d9f" + integrity sha1-Qb2xtz8w7GagTU4srRt2OH1NbZ8= + dependencies: + no-case "^2.2.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + solc@0.7.3: version "0.7.3" resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" @@ -6710,6 +7731,17 @@ solc@0.7.3: semver "^5.5.0" tmp "0.0.33" +solc@^0.4.20: + version "0.4.26" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.4.26.tgz#5390a62a99f40806b86258c737c1cf653cc35cb5" + integrity sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA== + dependencies: + fs-extra "^0.30.0" + memorystream "^0.3.1" + require-from-string "^1.1.0" + semver "^5.3.0" + yargs "^4.7.1" + solhint@^3.3.6: version "3.3.6" resolved "https://registry.yarnpkg.com/solhint/-/solhint-3.3.6.tgz#abe9af185a9a7defefba480047b3e42cbe9a1210" @@ -6733,9 +7765,9 @@ solhint@^3.3.6: prettier "^1.14.3" solidity-ast@^0.4.15: - version "0.4.19" - resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.19.tgz#3c6c27da922f2afd4a10522c8ecfc38f55095bdd" - integrity sha512-Mzg2lLr3VMN8V6ukmuLRB0cf1wuvNw78lR8dIhZOxlHSb4Nsy1ABUXJ31oA9IrLJIlI2v+C2WajVu0pFfVb2qA== + version "0.4.28" + resolved "https://registry.yarnpkg.com/solidity-ast/-/solidity-ast-0.4.28.tgz#5589998512b9a3602e6ba612cbe7fed7401294f4" + integrity sha512-RtZCP5tSvZMadVtg9/IfLmAMKDOnQEvG2HA6VnPuoTMxqxsbbn4lQy8jgH3RVbqW0eO1hd7cSCKecb72/OeOIw== solidity-coverage@^0.7.17: version "0.7.17" @@ -6762,6 +7794,22 @@ solidity-coverage@^0.7.17: shelljs "^0.8.3" web3-utils "^1.3.0" +source-list-map@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" + integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + source-map-support@0.5.12: version "0.5.12" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.12.tgz#b4f3b10d51857a5af0138d3ce8003b201613d599" @@ -6771,14 +7819,24 @@ source-map-support@0.5.12: source-map "^0.6.0" source-map-support@^0.5.13, source-map-support@^0.5.17, source-map-support@^0.5.19: - version "0.5.19" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" - integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== dependencies: buffer-from "^1.0.0" source-map "^0.6.0" -source-map@^0.6.0, source-map@^0.6.1: +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.1: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== @@ -6790,6 +7848,39 @@ source-map@~0.2.0: dependencies: amdefine ">=0.0.4" +spdx-correct@^3.0.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9" + integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" + integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.11" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz#50c0d8c40a14ec1bf449bae69a0ea4685a9d9f95" + integrity sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + sprintf-js@~1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" @@ -6817,6 +7908,14 @@ stacktrace-parser@^0.1.10: dependencies: type-fest "^0.7.1" +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + "statuses@>= 1.5.0 < 2", statuses@~1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" @@ -6827,17 +7926,45 @@ stealthy-require@^1.1.1: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= +stream-browserify@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" + integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== + dependencies: + inherits "~2.0.1" + readable-stream "^2.0.2" + +stream-http@^2.7.2: + version "2.8.3" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.3.tgz#b2d242469288a5a27ec4fe8933acf623de6514fc" + integrity sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + strict-uri-encode@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= -string-argv@0.3.1: +string-argv@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== -"string-width@^1.0.2 || 2", string-width@^2.1.0, string-width@^2.1.1: +string-width@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" + integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= + dependencies: + code-point-at "^1.0.0" + is-fullwidth-code-point "^1.0.0" + strip-ansi "^3.0.0" + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -6855,13 +7982,22 @@ string-width@^3.0.0, string-width@^3.1.0: strip-ansi "^5.1.0" string-width@^4.1.0, string-width@^4.2.0: - version "4.2.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.2.tgz#dafd4f9559a7585cfba529c6a0a4f73488ebd4c5" - integrity sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA== + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== dependencies: emoji-regex "^8.0.0" is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" + strip-ansi "^6.0.1" + +string-width@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.0.1.tgz#0d8158335a6cfd8eb95da9b6b262ce314a036ffd" + integrity sha512-5ohWO/M4//8lErlUUtrFy3b11GtNOuMOU0ysKCDXFcfXuuvUXu95akgj/i8ofmaGdN0hCqyl6uu9i8dS/mQp5g== + dependencies: + emoji-regex "^9.2.2" + is-fullwidth-code-point "^4.0.0" + strip-ansi "^7.0.1" string.prototype.trimend@^1.0.4: version "1.0.4" @@ -6879,7 +8015,7 @@ string.prototype.trimstart@^1.0.4: call-bind "^1.0.2" define-properties "^1.1.3" -string_decoder@^1.1.1: +string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.3.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== @@ -6893,14 +8029,12 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" -stringify-object@3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== +strip-ansi@^3.0.0, strip-ansi@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" + integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" + ansi-regex "^2.0.0" strip-ansi@^4.0.0: version "4.0.0" @@ -6916,12 +8050,31 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.0.1.tgz#61740a08ce36b61e50e65653f07060d000975fb2" + integrity sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw== dependencies: - ansi-regex "^5.0.0" + ansi-regex "^6.0.1" + +strip-bom@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" + integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= + dependencies: + is-utf8 "^0.2.0" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= strip-eof@^1.0.0: version "1.0.0" @@ -6967,13 +8120,6 @@ supports-color@6.0.0: dependencies: has-flag "^3.0.0" -supports-color@8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - supports-color@^3.1.0: version "3.2.3" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" @@ -6981,6 +8127,13 @@ supports-color@^3.1.0: dependencies: has-flag "^1.0.0" +supports-color@^4.2.1: + version "4.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-4.5.0.tgz#be7a0de484dec5c5cddf8b3d59125044912f635b" + integrity sha1-vnoN5ITexcXN34s9WRJQRJEvY1s= + dependencies: + has-flag "^2.0.0" + supports-color@^5.0.0, supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -6995,6 +8148,11 @@ supports-color@^7.1.0: dependencies: has-flag "^4.0.0" +supports-color@^9.0.2: + version "9.2.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-9.2.1.tgz#599dc9d45acf74c6176e0d880bab1d7d718fe891" + integrity sha512-Obv7ycoCTG51N7y175StI9BlAXrmgZrFhZOb0/PyjHBher/NmsdBgbbQ1Inhq+gIhz6+7Gb+jWF2Vqi7Mf1xnQ== + supports-hyperlinks@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/supports-hyperlinks/-/supports-hyperlinks-1.0.1.tgz#71daedf36cc1060ac5100c351bb3da48c29c0ef7" @@ -7003,6 +8161,14 @@ supports-hyperlinks@^1.0.1: has-flag "^2.0.0" supports-color "^5.0.0" +swap-case@^1.1.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/swap-case/-/swap-case-1.1.2.tgz#c39203a4587385fad3c850a0bd1bcafa081974e3" + integrity sha1-w5IDpFhzhfrTyFCgvRvK+ggZdOM= + dependencies: + lower-case "^1.1.1" + upper-case "^1.1.1" + swarm-js@^0.1.40: version "0.1.40" resolved "https://registry.yarnpkg.com/swarm-js/-/swarm-js-0.1.40.tgz#b1bc7b6dcc76061f6c772203e004c11997e06b99" @@ -7046,18 +8212,28 @@ table@^5.2.3: slice-ansi "^2.1.0" string-width "^3.0.0" +tapable@^0.2.7: + version "0.2.9" + resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.9.tgz#af2d8bbc9b04f74ee17af2b4d9048f807acd18a8" + integrity sha512-2wsvQ+4GwBvLPLWsNfLCDYGsW6xb7aeC6utq2Qh0PFwgEy7K7dsma9Jsmb2zSQj7GvYAyUGSntLtsv++GmgL1A== + tar@^4.0.2: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" + version "4.4.19" + resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.19.tgz#2e4d7263df26f2b914dee10c825ab132123742f3" + integrity sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA== + dependencies: + chownr "^1.1.4" + fs-minipass "^1.2.7" + minipass "^2.9.0" + minizlib "^1.3.3" + mkdirp "^0.5.5" + safe-buffer "^5.2.1" + yallist "^3.1.1" + +testrpc@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/testrpc/-/testrpc-0.0.1.tgz#83e2195b1f5873aec7be1af8cbe6dcf39edb7aed" + integrity sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA== text-table@^0.2.0: version "0.2.0" @@ -7091,6 +8267,21 @@ timed-out@^4.0.0, timed-out@^4.0.1: resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= +timers-browserify@^2.0.4: + version "2.0.12" + resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-2.0.12.tgz#44a45c11fbf407f34f97bccd1577c652361b00ee" + integrity sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ== + dependencies: + setimmediate "^1.0.4" + +title-case@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/title-case/-/title-case-2.1.1.tgz#3e127216da58d2bc5becf137ab91dae3a7cd8faa" + integrity sha1-PhJyFtpY0rxb7PE3q5Ha46fNj6o= + dependencies: + no-case "^2.2.0" + upper-case "^1.0.3" + tmp@0.0.33, tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -7098,11 +8289,31 @@ tmp@0.0.33, tmp@^0.0.33: dependencies: os-tmpdir "~1.0.2" +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M= + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= + dependencies: + kind-of "^3.0.2" + to-readable-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -7110,11 +8321,26 @@ to-regex-range@^5.0.1: dependencies: is-number "^7.0.0" +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + toidentifier@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + tough-cookie@^2.3.3, tough-cookie@~2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" @@ -7123,6 +8349,11 @@ tough-cookie@^2.3.3, tough-cookie@~2.5.0: psl "^1.1.28" punycode "^2.1.1" +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o= + "true-case-path@^2.2.1": version "2.2.1" resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-2.2.1.tgz#c5bf04a5bbec3fd118be4084461b3a27c4d796bf" @@ -7149,6 +8380,11 @@ tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@^2.2.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.3.1.tgz#e8a335add5ceae51aa261d32a490158ef042ef01" + integrity sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw== + tslib@~2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.1.0.tgz#da60860f1c2ecaa5703ab7d39bc05b6bf988b97a" @@ -7159,6 +8395,11 @@ tsort@0.0.1: resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" integrity sha1-4igPXoF/i/QnVlf9D5rr1E9aJ4Y= +tty-browserify@0.0.0: + version "0.0.0" + resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" + integrity sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY= + tunnel-agent@^0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" @@ -7228,7 +8469,7 @@ type@^1.0.1: resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== -type@^2.0.0: +type@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/type/-/type-2.5.0.tgz#0a2e78c2e77907b252abe5f298c1b01c63f0db3d" integrity sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw== @@ -7245,17 +8486,41 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +uglify-js@^2.8.29: + version "2.8.29" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd" + integrity sha1-KcVzMUgFe7Th913zW3qcty5qWd0= + dependencies: + source-map "~0.5.1" + yargs "~3.10.0" + optionalDependencies: + uglify-to-browserify "~1.0.0" + uglify-js@^3.1.4: - version "3.13.2" - resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.2.tgz#fe10319861bccc8682bfe2e8151fbdd8aa921c44" - integrity sha512-SbMu4D2Vo95LMC/MetNaso1194M1htEA+JrqE9Hk+G2DhI+itfS9TRu9ZKeCahLDNa/J3n4MqUJ/fOHMzQpRWw== + version "3.14.5" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.14.5.tgz#cdabb7d4954231d80cb4a927654c4655e51f4859" + integrity sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ== + +uglify-to-browserify@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/uglify-to-browserify/-/uglify-to-browserify-1.0.2.tgz#6e0924d6bda6b5afe349e39a6d632850a0f882b7" + integrity sha1-bgkk1r2mta/jSeOabWMoUKD4grc= + +uglifyjs-webpack-plugin@^0.4.6: + version "0.4.6" + resolved "https://registry.yarnpkg.com/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz#b951f4abb6bd617e66f63eb891498e391763e309" + integrity sha1-uVH0q7a9YX5m9j64kUmOORdj4wk= + dependencies: + source-map "^0.5.6" + uglify-js "^2.8.29" + webpack-sources "^1.0.1" ultron@~1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/ultron/-/ultron-1.1.1.tgz#9fe1536a10a664a65266a1e3ccf85fd36302bc9c" integrity sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og== -unbox-primitive@^1.0.0: +unbox-primitive@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" integrity sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw== @@ -7265,15 +8530,30 @@ unbox-primitive@^1.0.0: has-symbols "^1.0.2" which-boxed-primitive "^1.0.2" +underscore@1.12.1: + version "1.12.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" + integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== + underscore@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.1.tgz#06dce34a0e68a7babc29b365b8e74b8925203961" integrity sha512-5/4etnCkd9c8gwgowi5/om/mYO5ajCaOgdzj/oW+0eQV9WxKBDZw5+ycmKmeaTXjInS/W0BzpGLo2xR2aBwZdg== underscore@^1.8.3: - version "1.12.1" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.12.1.tgz#7bb8cc9b3d397e201cf8553336d262544ead829e" - integrity sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw== + version "1.13.1" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.1.tgz#0c1c6bd2df54b6b69f2314066d65b6cde6fcf9d1" + integrity sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g== + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" universalify@^0.1.0: version "0.1.2" @@ -7285,6 +8565,31 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +upper-case-first@^1.1.0, upper-case-first@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/upper-case-first/-/upper-case-first-1.1.2.tgz#5d79bedcff14419518fd2edb0a0507c9b6859115" + integrity sha1-XXm+3P8UQZUY/S7bCgUHybaFkRU= + dependencies: + upper-case "^1.1.1" + +upper-case@^1.0.3, upper-case@^1.1.0, upper-case@^1.1.1, upper-case@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/upper-case/-/upper-case-1.1.3.tgz#f6b4501c2ec4cdd26ba78be7222961de77621598" + integrity sha1-9rRQHC7EzdJrp4vnIilh3ndiFZg= + uri-js@^4.2.2: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" @@ -7292,6 +8597,11 @@ uri-js@^4.2.2: dependencies: punycode "^2.1.0" +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= + url-join@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" @@ -7321,12 +8631,25 @@ url-to-options@^1.0.1: resolved "https://registry.yarnpkg.com/url-to-options/-/url-to-options-1.0.1.tgz#1505a03a289a48cbd7a434efbaeec5055f5633a9" integrity sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k= +url@^0.11.0: + version "0.11.0" + resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" + integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + utf-8-validate@^5.0.2: - version "5.0.4" - resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.4.tgz#72a1735983ddf7a05a43a9c6b67c5ce1c910f9b8" - integrity sha512-MEF05cPSq3AwJ2C7B7sHAA6i53vONoZbMGX8My5auEVm6W+dJ2Jd/TZPyGJ5CH42V2XtbI5FD28HeHeqlPzZ3Q== + version "5.0.7" + resolved "https://registry.yarnpkg.com/utf-8-validate/-/utf-8-validate-5.0.7.tgz#c15a19a6af1f7ad9ec7ddc425747ca28c3644922" + integrity sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q== dependencies: - node-gyp-build "^4.2.0" + node-gyp-build "^4.3.0" utf8@3.0.0, utf8@^3.0.0: version "3.0.0" @@ -7338,21 +8661,24 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= -util.promisify@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.1.1.tgz#77832f57ced2c9478174149cae9b96e9918cd54b" - integrity sha512-/s3UsZUrIfa6xDhr7zZhnE9SLQ5RIXyYfiVnMMyMDzOc8WhWN4Nbh36H842OyurKbCDAesZOJaVyvmSl6fhGQw== +util@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" + integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= dependencies: - call-bind "^1.0.0" - define-properties "^1.1.3" - for-each "^0.3.3" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.1" + inherits "2.0.1" + +util@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/util/-/util-0.11.1.tgz#3236733720ec64bb27f6e26f421aaa2e1b588d61" + integrity sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ== + dependencies: + inherits "2.0.3" util@^0.12.0: - version "0.12.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.3.tgz#971bb0292d2cc0c892dab7c6a5d37c2bec707888" - integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog== + version "0.12.4" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.4.tgz#66121a31420df8f01ca0c464be15dfa1d1850253" + integrity sha512-bxZ9qtSlGUWSOy9Qa9Xgk11kSslpuZwaxCg4sNIDj6FLucDab2JxnHwyNTCpHMtK1MjoQiWQ6DiUMZYbSrO+Sw== dependencies: inherits "^2.0.3" is-arguments "^1.0.4" @@ -7381,11 +8707,24 @@ uuid@^3.3.2: resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + v8-compile-cache@^2.0.3: version "2.3.0" resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz#2de19618c66dc247dcfb6f99338035d8245a2cee" integrity sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA== +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + varint@^5.0.0: version "5.0.2" resolved "https://registry.yarnpkg.com/varint/-/varint-5.0.2.tgz#5b47f8a947eb668b848e034dcfa87d0ff8a7f7a4" @@ -7405,633 +8744,646 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -web3-bzz@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.2.9.tgz#25f8a373bc2dd019f47bf80523546f98b93c8790" - integrity sha512-ogVQr9jHodu9HobARtvUSmWG22cv2EUQzlPeejGWZ7j5h20HX40EDuWyomGY5VclIj5DdLY76Tmq88RTf/6nxA== +vm-browserify@^1.0.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" + integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== + +watchpack-chokidar2@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz#38500072ee6ece66f3769936950ea1771be1c957" + integrity sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww== + dependencies: + chokidar "^2.1.8" + +watchpack@^1.4.0: + version "1.7.5" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" + integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== + dependencies: + graceful-fs "^4.1.2" + neo-async "^2.5.0" + optionalDependencies: + chokidar "^3.4.1" + watchpack-chokidar2 "^2.0.1" + +web3-bzz@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.6.tgz#95f370aecc3ff6ad07f057e6c0c916ef09b04dde" + integrity sha512-ibHdx1wkseujFejrtY7ZyC0QxQ4ATXjzcNUpaLrvM6AEae8prUiyT/OloG9FWDgFD2CPLwzKwfSQezYQlANNlw== dependencies: - "@types/node" "^10.12.18" + "@types/node" "^12.12.6" got "9.6.0" swarm-js "^0.1.40" - underscore "1.9.1" + underscore "1.12.1" -web3-bzz@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.3.4.tgz#9be529353c4063bc68395370cb5d8e414c6b6c87" - integrity sha512-DBRVQB8FAgoAtZCpp2GAGPCJjgBgsuwOKEasjV044AAZiONpXcKHbkO6G1SgItIixnrJsRJpoGLGw52Byr6FKw== +web3-bzz@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.5.3.tgz#e36456905ce051138f9c3ce3623cbc73da088c2b" + integrity sha512-SlIkAqG0eS6cBS9Q2eBOTI1XFzqh83RqGJWnyrNZMDxUwsTVHL+zNnaPShVPvrWQA1Ub5b0bx1Kc5+qJVxsTJg== dependencies: "@types/node" "^12.12.6" got "9.6.0" swarm-js "^0.1.40" - underscore "1.9.1" -web3-bzz@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.6.0.tgz#584b51339f21eedff159abc9239b4b7ef6ded840" - integrity sha512-ugYV6BsinwhIi0CsLWINBz4mqN9wR9vNG0WmyEbdECjxcPyr6vkaWt4qi0zqlUxEnYAwGj4EJXNrbjPILntQTQ== +web3-bzz@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-bzz/-/web3-bzz-1.6.1.tgz#8430eb3cbb69baaee4981d190b840748c37a9ec2" + integrity sha512-JbnFNbRlwwHJZPtVuCxo7rC4U4OTg+mPsyhjgPQJJhS0a6Y54OgVWYk9UA/95HqbmTJwTtX329gJoSsseEfrng== dependencies: "@types/node" "^12.12.6" got "9.6.0" swarm-js "^0.1.40" -web3-core-helpers@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.2.9.tgz#6381077c3e01c127018cb9e9e3d1422697123315" - integrity sha512-t0WAG3orLCE3lqi77ZoSRNFok3VQWZXTniZigDQjyOJYMAX7BU3F3js8HKbjVnAxlX3tiKoDxI0KBk9F3AxYuw== +web3-core-helpers@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.6.tgz#c478246a9abe4e5456acf42657dac2f7c330be74" + integrity sha512-nhtjA2ZbkppjlxTSwG0Ttu6FcPkVu1rCN5IFAOVpF/L0SEt+jy+O5l90+cjDq0jAYvlBwUwnbh2mR9hwDEJCNA== dependencies: - underscore "1.9.1" - web3-eth-iban "1.2.9" - web3-utils "1.2.9" + underscore "1.12.1" + web3-eth-iban "1.3.6" + web3-utils "1.3.6" -web3-core-helpers@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.3.4.tgz#b8549740bf24d5c71688d89c3cdd802d8d36b4e4" - integrity sha512-n7BqDalcTa1stncHMmrnFtyTgDhX5Fy+avNaHCf6qcOP2lwTQC8+mdHVBONWRJ6Yddvln+c8oY/TAaB6PzWK0A== +web3-core-helpers@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.5.3.tgz#099030235c477aadf39a94199ef40092151d563c" + integrity sha512-Ip1IjB3S8vN7Kf1PPjK41U5gskmMk6IJQlxIVuS8/1U7n/o0jC8krqtpRwiMfAgYyw3TXwBFtxSRTvJtnLyXZw== dependencies: - underscore "1.9.1" - web3-eth-iban "1.3.4" - web3-utils "1.3.4" + web3-eth-iban "1.5.3" + web3-utils "1.5.3" -web3-core-helpers@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.6.0.tgz#77e161b6ba930a4008a0df804ab379e0aa7e1e7f" - integrity sha512-H/IAH/0mrgvad/oxVKiAMC7qDzMrPPe/nRKmJOoIsupRg9/frvL62kZZiHhqVD1HMyyswbQFC69QRl7JqWzvxg== +web3-core-helpers@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-core-helpers/-/web3-core-helpers-1.6.1.tgz#cb21047306871f4cf0fedfece7d47ea2aa96141b" + integrity sha512-om2PZvK1uoWcgMq6JfcSx3241LEIVF6qi2JuHz2SLKiKEW5UsBUaVx0mNCmcZaiuYQCyOsLS3r33q5AdM+v8ng== dependencies: - web3-eth-iban "1.6.0" - web3-utils "1.6.0" + web3-eth-iban "1.6.1" + web3-utils "1.6.1" -web3-core-method@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.2.9.tgz#3fb538751029bea570e4f86731e2fa5e4945e462" - integrity sha512-bjsIoqP3gs7A/gP8+QeLUCyOKJ8bopteCSNbCX36Pxk6TYfYWNuC6hP+2GzUuqdP3xaZNe+XEElQFUNpR3oyAg== +web3-core-method@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.6.tgz#4b0334edd94b03dfec729d113c69a4eb6ebc68ae" + integrity sha512-RyegqVGxn0cyYW5yzAwkPlsSEynkdPiegd7RxgB4ak1eKk2Cv1q2x4C7D2sZjeeCEF+q6fOkVmo2OZNqS2iQxg== dependencies: "@ethersproject/transactions" "^5.0.0-beta.135" - underscore "1.9.1" - web3-core-helpers "1.2.9" - web3-core-promievent "1.2.9" - web3-core-subscriptions "1.2.9" - web3-utils "1.2.9" + underscore "1.12.1" + web3-core-helpers "1.3.6" + web3-core-promievent "1.3.6" + web3-core-subscriptions "1.3.6" + web3-utils "1.3.6" -web3-core-method@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.3.4.tgz#6c2812d96dd6c811b9e6c8a5d25050d2c22b9527" - integrity sha512-JxmQrujsAWYRRN77P/RY7XuZDCzxSiiQJrgX/60Lfyf7FF1Y0le4L/UMCi7vUJnuYkbU1Kfl9E0udnqwyPqlvQ== +web3-core-method@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.5.3.tgz#6cff97ed19fe4ea2e9183d6f703823a079f5132c" + integrity sha512-8wJrwQ2qD9ibWieF9oHXwrJsUGrv3XAtEkNeyvyNMpktNTIjxJ2jaFGQUuLiyUrMubD18XXgLk4JS6PJU4Loeg== dependencies: + "@ethereumjs/common" "^2.4.0" "@ethersproject/transactions" "^5.0.0-beta.135" - underscore "1.9.1" - web3-core-helpers "1.3.4" - web3-core-promievent "1.3.4" - web3-core-subscriptions "1.3.4" - web3-utils "1.3.4" + web3-core-helpers "1.5.3" + web3-core-promievent "1.5.3" + web3-core-subscriptions "1.5.3" + web3-utils "1.5.3" -web3-core-method@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.6.0.tgz#ebe4ea51f5a4fa809bb68185576186359d3982e9" - integrity sha512-cHekyEil4mtcCOk6Q1Zh4y+2o5pTwsLIxP6Bpt4BRtZgdsyPiadYJpkLAVT/quch5xN7Qs5ZwG5AvRCS3VwD2g== +web3-core-method@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-core-method/-/web3-core-method-1.6.1.tgz#4ae91c639bf1da85ebfd8b99595da6a2235d7b98" + integrity sha512-szH5KyIWIaULQDBdDvevQUCHV9lsExJ/oV0ePqK+w015D2SdMPMuhii0WB+HCePaksWO+rr/GAypvV9g2T3N+w== dependencies: - "@ethereumjs/common" "^2.4.0" "@ethersproject/transactions" "^5.0.0-beta.135" - web3-core-helpers "1.6.0" - web3-core-promievent "1.6.0" - web3-core-subscriptions "1.6.0" - web3-utils "1.6.0" + web3-core-helpers "1.6.1" + web3-core-promievent "1.6.1" + web3-core-subscriptions "1.6.1" + web3-utils "1.6.1" -web3-core-promievent@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.2.9.tgz#bb1c56aa6fac2f4b3c598510f06554d25c11c553" - integrity sha512-0eAUA2zjgXTleSrnc1wdoKQPPIHU6KHf4fAscu4W9kKrR+mqP1KsjYrxY9wUyjNnXxfQ+5M29ipvbiaK8OqdOw== +web3-core-promievent@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.6.tgz#6c27dc79de8f71b74f5d17acaf9aaf593d3cb0c9" + integrity sha512-Z+QzfyYDTXD5wJmZO5wwnRO8bAAHEItT1XNSPVb4J1CToV/I/SbF7CuF8Uzh2jns0Cm1109o666H7StFFvzVKw== dependencies: - eventemitter3 "3.1.2" + eventemitter3 "4.0.4" -web3-core-promievent@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.3.4.tgz#d166239012d91496cdcbe91d5d54071ea818bc73" - integrity sha512-V61dZIeBwogg6hhZZUt0qL9hTp1WDhnsdjP++9fhTDr4vy/Gz8T5vibqT2LLg6lQC8i+Py33yOpMeMNjztaUaw== +web3-core-promievent@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.5.3.tgz#3f11833c3dc6495577c274350b61144e0a4dba01" + integrity sha512-CFfgqvk3Vk6PIAxtLLuX+pOMozxkKCY+/GdGr7weMh033mDXEPvwyVjoSRO1PqIKj668/hMGQsVoIgbyxkJ9Mg== dependencies: eventemitter3 "4.0.4" -web3-core-promievent@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.6.0.tgz#8b6053ae83cb47164540167fc361469fc604d2dd" - integrity sha512-ZzsevjMXWkhqW9dnVfTfb1OUcK7jKcKPvPIbQ4boJccNgvNZPZKlo8xB4pkAX38n4c59O5mC7Lt/z2QL/M5CeQ== +web3-core-promievent@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-core-promievent/-/web3-core-promievent-1.6.1.tgz#f650dea9361e2edf02691015b213fcc8ea499992" + integrity sha512-byJ5s2MQxrWdXd27pWFmujfzsTZK4ik8rDgIV1RFDFc+rHZ2nZhq+VWk7t/Nkrj7EaVXncEgTdPEHc18nx+ocQ== dependencies: eventemitter3 "4.0.4" -web3-core-requestmanager@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.2.9.tgz#dd6d855256c4dd681434fe0867f8cd742fe10503" - integrity sha512-1PwKV2m46ALUnIN5VPPgjOj8yMLJhhqZYvYJE34hTN5SErOkwhzx5zScvo5MN7v7KyQGFnpVCZKKGCiEnDmtFA== +web3-core-requestmanager@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.6.tgz#4fea269fe913fd4fca464b4f7c65cb94857b5b2a" + integrity sha512-2rIaeuqeo7QN1Eex7aXP0ZqeteJEPWXYFS/M3r3LXMiV8R4STQBKE+//dnHJXoo2ctzEB5cgd+7NaJM8S3gPyA== dependencies: - underscore "1.9.1" - web3-core-helpers "1.2.9" - web3-providers-http "1.2.9" - web3-providers-ipc "1.2.9" - web3-providers-ws "1.2.9" + underscore "1.12.1" + util "^0.12.0" + web3-core-helpers "1.3.6" + web3-providers-http "1.3.6" + web3-providers-ipc "1.3.6" + web3-providers-ws "1.3.6" -web3-core-requestmanager@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.3.4.tgz#e105ced735c2b5fcedd5771e0ecf9879ae9c373f" - integrity sha512-xriouCrhVnVDYQ04TZXdEREZm0OOJzkSEsoN5bu4JYsA6e/HzROeU+RjDpMUxFMzN4wxmFZ+HWbpPndS3QwMag== +web3-core-requestmanager@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.5.3.tgz#b339525815fd40e3a2a81813c864ddc413f7b6f7" + integrity sha512-9k/Bze2rs8ONix5IZR+hYdMNQv+ark2Ek2kVcrFgWO+LdLgZui/rn8FikPunjE+ub7x7pJaKCgVRbYFXjo3ZWg== dependencies: - underscore "1.9.1" util "^0.12.0" - web3-core-helpers "1.3.4" - web3-providers-http "1.3.4" - web3-providers-ipc "1.3.4" - web3-providers-ws "1.3.4" + web3-core-helpers "1.5.3" + web3-providers-http "1.5.3" + web3-providers-ipc "1.5.3" + web3-providers-ws "1.5.3" -web3-core-requestmanager@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.6.0.tgz#8ef3a3b89cd08983bd94574f9c5893f70a8a6aea" - integrity sha512-CY5paPdiDXKTXPWaEUZekDfUXSuoE2vPxolwqzsvKwFWH5+H1NaXgrc+D5HpufgSvTXawTw0fy7IAicg8+PWqA== +web3-core-requestmanager@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-core-requestmanager/-/web3-core-requestmanager-1.6.1.tgz#d9c08b0716c9cda546a0c02767b7e08deb04448a" + integrity sha512-4y7etYEUtkfflyYVBfN1oJtCbVFNhNX1omlEYzezhTnPj3/dT7n+dhUXcqvIhx9iKA13unGfpFge80XNFfcB8A== dependencies: util "^0.12.0" - web3-core-helpers "1.6.0" - web3-providers-http "1.6.0" - web3-providers-ipc "1.6.0" - web3-providers-ws "1.6.0" + web3-core-helpers "1.6.1" + web3-providers-http "1.6.1" + web3-providers-ipc "1.6.1" + web3-providers-ws "1.6.1" -web3-core-subscriptions@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.2.9.tgz#335fd7d15dfce5d78b4b7bef05ce4b3d7237b0e4" - integrity sha512-Y48TvXPSPxEM33OmXjGVDMzTd0j8X0t2+sDw66haeBS8eYnrEzasWuBZZXDq0zNUsqyxItgBGDn+cszkgEnFqg== +web3-core-subscriptions@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.6.tgz#ee24e7974d1d72ff6c992c599deba4ef9b308415" + integrity sha512-wi9Z9X5X75OKvxAg42GGIf81ttbNR2TxzkAsp1g+nnp5K8mBwgZvXrIsDuj7Z7gx72Y45mWJADCWjk/2vqNu8g== dependencies: - eventemitter3 "3.1.2" - underscore "1.9.1" - web3-core-helpers "1.2.9" + eventemitter3 "4.0.4" + underscore "1.12.1" + web3-core-helpers "1.3.6" -web3-core-subscriptions@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.3.4.tgz#7b00e92bde21f792620cd02e6e508fcf4f4c31d3" - integrity sha512-drVHVDxh54hv7xmjIm44g4IXjfGj022fGw4/meB5R2D8UATFI40F73CdiBlyqk3DysP9njDOLTJFSQvEkLFUOg== +web3-core-subscriptions@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.5.3.tgz#d7d69c4caad65074212028656e9dc56ca5c2159d" + integrity sha512-L2m9vG1iRN6thvmv/HQwO2YLhOQlmZU8dpLG6GSo9FBN14Uch868Swk0dYVr3rFSYjZ/GETevSXU+O+vhCummA== dependencies: eventemitter3 "4.0.4" - underscore "1.9.1" - web3-core-helpers "1.3.4" + web3-core-helpers "1.5.3" -web3-core-subscriptions@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.6.0.tgz#8c23b15b434a7c9f937652ecca45d7108e2c54df" - integrity sha512-kY9WZUY/m1URSOv3uTLshoZD9ZDiFKReIzHuPUkxFpD5oYNmr1/aPQNPCrrMxKODR7UVX/D90FxWwCYqHhLaxQ== +web3-core-subscriptions@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-core-subscriptions/-/web3-core-subscriptions-1.6.1.tgz#4dfc1f74137354d4ac9eaa628aa916c5e2cc8741" + integrity sha512-WZwxsYttIojyGQ5RqxuQcKg0IJdDCFpUe4EncS3QKZwxPqWzGmgyLwE0rm7tP+Ux1waJn5CUaaoSCBxWGSun1g== dependencies: eventemitter3 "4.0.4" - web3-core-helpers "1.6.0" + web3-core-helpers "1.6.1" -web3-core@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.2.9.tgz#2cba57aa259b6409db532d21bdf57db8d504fd3e" - integrity sha512-fSYv21IP658Ty2wAuU9iqmW7V+75DOYMVZsDH/c14jcF/1VXnedOcxzxSj3vArsCvXZNe6XC5/wAuGZyQwR9RA== +web3-core@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.6.tgz#a6a761d1ff2f3ee462b8dab679229d2f8e267504" + integrity sha512-gkLDM4T1Sc0T+HZIwxrNrwPg0IfWI0oABSglP2X5ZbBAYVUeEATA0o92LWV8BeF+okvKXLK1Fek/p6axwM/h3Q== dependencies: - "@types/bn.js" "^4.11.4" - "@types/node" "^12.6.1" + "@types/bn.js" "^4.11.5" + "@types/node" "^12.12.6" bignumber.js "^9.0.0" - web3-core-helpers "1.2.9" - web3-core-method "1.2.9" - web3-core-requestmanager "1.2.9" - web3-utils "1.2.9" + web3-core-helpers "1.3.6" + web3-core-method "1.3.6" + web3-core-requestmanager "1.3.6" + web3-utils "1.3.6" -web3-core@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.3.4.tgz#2cc7ba7f35cc167f7a0a46fd5855f86e51d34ce8" - integrity sha512-7OJu46RpCEfTerl+gPvHXANR2RkLqAfW7l2DAvQ7wN0pnCzl9nEfdgW6tMhr31k3TR2fWucwKzCyyxMGzMHeSA== +web3-core@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.5.3.tgz#59f8728b27c8305b349051326aa262b9b7e907bf" + integrity sha512-ACTbu8COCu+0eUNmd9pG7Q9EVsNkAg2w3Y7SqhDr+zjTgbSHZV01jXKlapm9z+G3AN/BziV3zGwudClJ4u4xXQ== dependencies: "@types/bn.js" "^4.11.5" "@types/node" "^12.12.6" bignumber.js "^9.0.0" - web3-core-helpers "1.3.4" - web3-core-method "1.3.4" - web3-core-requestmanager "1.3.4" - web3-utils "1.3.4" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-core-requestmanager "1.5.3" + web3-utils "1.5.3" -web3-core@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.6.0.tgz#144eb00f651c9812faf7176abd7ee99d5f45e212" - integrity sha512-o0WsLrJ2yD+HAAc29lGMWJef/MutTyuzpJC0UzLJtIAQJqtpDalzWINEu4j8XYXGk34N/V6vudtzRPo23QEE6g== +web3-core@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-core/-/web3-core-1.6.1.tgz#b41f08fdc9ea1082d15384a3d6fa93a47c3fc1b4" + integrity sha512-m+b7UfYvU5cQUAh6NRfxRzH/5B3to1AdEQi1HIQt570cDWlObOOmoO9tY6iJnI5w4acxIO19LqjDMqEJGBYyRQ== dependencies: "@types/bn.js" "^4.11.5" "@types/node" "^12.12.6" bignumber.js "^9.0.0" - web3-core-helpers "1.6.0" - web3-core-method "1.6.0" - web3-core-requestmanager "1.6.0" - web3-utils "1.6.0" + web3-core-helpers "1.6.1" + web3-core-method "1.6.1" + web3-core-requestmanager "1.6.1" + web3-utils "1.6.1" -web3-eth-abi@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.2.9.tgz#14bedd7e4be04fcca35b2ac84af1400574cd8280" - integrity sha512-3YwUYbh/DMfDbhMWEebAdjSd5bj3ZQieOjLzWFHU23CaLEqT34sUix1lba+hgUH/EN6A7bKAuKOhR3p0OvTn7Q== +web3-eth-abi@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.6.tgz#4272ca48d817aa651bbf97b269f5ff10abc2b8a9" + integrity sha512-Or5cRnZu6WzgScpmbkvC6bfNxR26hqiKK4i8sMPFeTUABQcb/FU3pBj7huBLYbp9dH+P5W79D2MqwbWwjj9DoQ== dependencies: - "@ethersproject/abi" "5.0.0-beta.153" - underscore "1.9.1" - web3-utils "1.2.9" + "@ethersproject/abi" "5.0.7" + underscore "1.12.1" + web3-utils "1.3.6" -web3-eth-abi@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.3.4.tgz#10f5d8b6080dbb6cbaa1bcef7e0c70573da6566f" - integrity sha512-PVSLXJ2dzdXsC+R24llIIEOS6S1KhG5qwNznJjJvXZFe3sqgdSe47eNvwUamZtCBjcrdR/HQr+L/FTxqJSf80Q== +web3-eth-abi@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.5.3.tgz#5aea9394d797f99ca0d9bd40c3417eb07241c96c" + integrity sha512-i/qhuFsoNrnV130CSRYX/z4SlCfSQ4mHntti5yTmmQpt70xZKYZ57BsU0R29ueSQ9/P+aQrL2t2rqkQkAloUxg== dependencies: "@ethersproject/abi" "5.0.7" - underscore "1.9.1" - web3-utils "1.3.4" + web3-utils "1.5.3" -web3-eth-abi@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.6.0.tgz#4225608f61ebb0607d80849bb2b20f910780253d" - integrity sha512-fImomGE9McuTMJLwK8Tp0lTUzXqCkWeMm00qPVIwpJ/h7lCw9UFYV9+4m29wSqW6FF+FIZKwc6UBEf9dlx3orA== +web3-eth-abi@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth-abi/-/web3-eth-abi-1.6.1.tgz#15b937e3188570754d50bbac51a4bb0578600d1d" + integrity sha512-svhYrAlXP9XQtV7poWKydwDJq2CaNLMtmKydNXoOBLcQec6yGMP+v20pgrxF2H6wyTK+Qy0E3/5ciPOqC/VuoQ== dependencies: "@ethersproject/abi" "5.0.7" - web3-utils "1.6.0" + web3-utils "1.6.1" -web3-eth-accounts@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.2.9.tgz#7ec422df90fecb5243603ea49dc28726db7bdab6" - integrity sha512-jkbDCZoA1qv53mFcRHCinoCsgg8WH+M0YUO1awxmqWXRmCRws1wW0TsuSQ14UThih5Dxolgl+e+aGWxG58LMwg== +web3-eth-accounts@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.6.tgz#f9fcb50b28ee58090ab292a10d996155caa2b474" + integrity sha512-Ilr0hG6ONbCdSlVKffasCmNwftD5HsNpwyQASevocIQwHdTlvlwO0tb3oGYuajbKOaDzNTwXfz25bttAEoFCGA== dependencies: crypto-browserify "3.12.0" - eth-lib "^0.2.8" + eth-lib "0.2.8" ethereumjs-common "^1.3.2" ethereumjs-tx "^2.1.1" scrypt-js "^3.0.1" - underscore "1.9.1" + underscore "1.12.1" uuid "3.3.2" - web3-core "1.2.9" - web3-core-helpers "1.2.9" - web3-core-method "1.2.9" - web3-utils "1.2.9" + web3-core "1.3.6" + web3-core-helpers "1.3.6" + web3-core-method "1.3.6" + web3-utils "1.3.6" -web3-eth-accounts@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.3.4.tgz#cf513d78531c13ce079a5e7862820570350e79a5" - integrity sha512-gz9ReSmQEjqbYAjpmAx+UZF4CVMbyS4pfjSYWGAnNNI+Xz0f0u0kCIYXQ1UEaE+YeLcYiE+ZlZdgg6YoatO5nA== +web3-eth-accounts@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.5.3.tgz#076c816ff4d68c9dffebdc7fd2bfaddcfc163d77" + integrity sha512-pdGhXgeBaEJENMvRT6W9cmji3Zz/46ugFSvmnLLw79qi5EH7XJhKISNVb41eWCrs4am5GhI67GLx5d2s2a72iw== dependencies: + "@ethereumjs/common" "^2.3.0" + "@ethereumjs/tx" "^3.2.1" crypto-browserify "3.12.0" eth-lib "0.2.8" - ethereumjs-common "^1.3.2" - ethereumjs-tx "^2.1.1" + ethereumjs-util "^7.0.10" scrypt-js "^3.0.1" - underscore "1.9.1" uuid "3.3.2" - web3-core "1.3.4" - web3-core-helpers "1.3.4" - web3-core-method "1.3.4" - web3-utils "1.3.4" + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-utils "1.5.3" -web3-eth-accounts@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.6.0.tgz#530927f4c5b78df93b3ea1203abbb467de29cd04" - integrity sha512-2f6HS4KIH4laAsNCOfbNX3dRiQosqSY2TRK86C8jtAA/QKGdx+5qlPfYzbI2RjG81iayb2+mVbHIaEaBGZ8sGw== +web3-eth-accounts@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth-accounts/-/web3-eth-accounts-1.6.1.tgz#aeb0dfb52c4391773550569732975b471212583f" + integrity sha512-rGn3jwnuOKwaQRu4SiShz0YAQ87aVDBKs4HO43+XTCI1q1Y1jn3NOsG3BW9ZHaOckev4+zEyxze/Bsh2oEk24w== dependencies: - "@ethereumjs/common" "^2.3.0" - "@ethereumjs/tx" "^3.2.1" + "@ethereumjs/common" "^2.5.0" + "@ethereumjs/tx" "^3.3.2" crypto-browserify "3.12.0" eth-lib "0.2.8" ethereumjs-util "^7.0.10" scrypt-js "^3.0.1" uuid "3.3.2" - web3-core "1.6.0" - web3-core-helpers "1.6.0" - web3-core-method "1.6.0" - web3-utils "1.6.0" + web3-core "1.6.1" + web3-core-helpers "1.6.1" + web3-core-method "1.6.1" + web3-utils "1.6.1" -web3-eth-contract@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.2.9.tgz#713d9c6d502d8c8f22b696b7ffd8e254444e6bfd" - integrity sha512-PYMvJf7EG/HyssUZa+pXrc8IB06K/YFfWYyW4R7ed3sab+9wWUys1TlWxBCBuiBXOokSAyM6H6P6/cKEx8FT8Q== +web3-eth-contract@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.6.tgz#cccf4d32dc56917fb6923e778498a9ba2a5ba866" + integrity sha512-8gDaRrLF2HCg+YEZN1ov0zN35vmtPnGf3h1DxmJQK5Wm2lRMLomz9rsWsuvig3UJMHqZAQKD7tOl3ocJocQsmA== dependencies: - "@types/bn.js" "^4.11.4" - underscore "1.9.1" - web3-core "1.2.9" - web3-core-helpers "1.2.9" - web3-core-method "1.2.9" - web3-core-promievent "1.2.9" - web3-core-subscriptions "1.2.9" - web3-eth-abi "1.2.9" - web3-utils "1.2.9" - -web3-eth-contract@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.3.4.tgz#1ea2dd71be0c4a9cf4772d4f75dbb2fa99751472" - integrity sha512-Fvy8ZxUksQY2ePt+XynFfOiSqxgQtMn4m2NJs6VXRl2Inl17qyRi/nIJJVKTcENLocm+GmZ/mxq2eOE5u02nPg== + "@types/bn.js" "^4.11.5" + underscore "1.12.1" + web3-core "1.3.6" + web3-core-helpers "1.3.6" + web3-core-method "1.3.6" + web3-core-promievent "1.3.6" + web3-core-subscriptions "1.3.6" + web3-eth-abi "1.3.6" + web3-utils "1.3.6" + +web3-eth-contract@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.5.3.tgz#12b03a4a16ce583a945f874bea2ff2fb4c5b81ad" + integrity sha512-Gdlt1L6cdHe83k7SdV6xhqCytVtOZkjD0kY/15x441AuuJ4JLubCHuqu69k2Dr3tWifHYVys/vG8QE/W16syGg== dependencies: "@types/bn.js" "^4.11.5" - underscore "1.9.1" - web3-core "1.3.4" - web3-core-helpers "1.3.4" - web3-core-method "1.3.4" - web3-core-promievent "1.3.4" - web3-core-subscriptions "1.3.4" - web3-eth-abi "1.3.4" - web3-utils "1.3.4" - -web3-eth-contract@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.6.0.tgz#deb946867ad86d32bcbba899d733b681b25ea674" - integrity sha512-ZUtO77zFnxuFtrc+D+iJ3AzNgFXAVcKnhEYN7f1PNz/mFjbtE6dJ+ujO0mvMbxIZF02t9IZv0CIXRpK0rDvZAw== + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-core-promievent "1.5.3" + web3-core-subscriptions "1.5.3" + web3-eth-abi "1.5.3" + web3-utils "1.5.3" + +web3-eth-contract@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth-contract/-/web3-eth-contract-1.6.1.tgz#4b0a2c0b37015d70146e54c7cb3f035a58fbeec0" + integrity sha512-GXqTe3mF6kpbOAakiNc7wtJ120/gpuKMTZjuGFKeeY8aobRLfbfgKzM9IpyqVZV2v5RLuGXDuurVN2KPgtu3hQ== dependencies: "@types/bn.js" "^4.11.5" - web3-core "1.6.0" - web3-core-helpers "1.6.0" - web3-core-method "1.6.0" - web3-core-promievent "1.6.0" - web3-core-subscriptions "1.6.0" - web3-eth-abi "1.6.0" - web3-utils "1.6.0" - -web3-eth-ens@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.2.9.tgz#577b9358c036337833fb2bdc59c11be7f6f731b6" - integrity sha512-kG4+ZRgZ8I1WYyOBGI8QVRHfUSbbJjvJAGA1AF/NOW7JXQ+x7gBGeJw6taDWJhSshMoEKWcsgvsiuoG4870YxQ== + web3-core "1.6.1" + web3-core-helpers "1.6.1" + web3-core-method "1.6.1" + web3-core-promievent "1.6.1" + web3-core-subscriptions "1.6.1" + web3-eth-abi "1.6.1" + web3-utils "1.6.1" + +web3-eth-ens@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.6.tgz#0d28c5d4ea7b4462ef6c077545a77956a6cdf175" + integrity sha512-n27HNj7lpSkRxTgSx+Zo7cmKAgyg2ElFilaFlUu/X2CNH23lXfcPm2bWssivH9z0ndhg0OyR4AYFZqPaqDHkJA== dependencies: content-hash "^2.5.2" eth-ens-namehash "2.0.8" - underscore "1.9.1" - web3-core "1.2.9" - web3-core-helpers "1.2.9" - web3-core-promievent "1.2.9" - web3-eth-abi "1.2.9" - web3-eth-contract "1.2.9" - web3-utils "1.2.9" - -web3-eth-ens@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.3.4.tgz#a7e4bb18481fb0e2ce5bfb3b3da2fbb0ad78cefe" - integrity sha512-b0580tQyQwpV2wyacwQiBEfQmjCUln5iPhge3IBIMXaI43BUNtH3lsCL9ERFQeOdweB4o+6rYyNYr6xbRcSytg== + underscore "1.12.1" + web3-core "1.3.6" + web3-core-helpers "1.3.6" + web3-core-promievent "1.3.6" + web3-eth-abi "1.3.6" + web3-eth-contract "1.3.6" + web3-utils "1.3.6" + +web3-eth-ens@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.5.3.tgz#ef6eee1ddf32b1ff9536fc7c599a74f2656bafe1" + integrity sha512-QmGFFtTGElg0E+3xfCIFhiUF+1imFi9eg/cdsRMUZU4F1+MZCC/ee+IAelYLfNTGsEslCqfAusliKOT9DdGGnw== dependencies: content-hash "^2.5.2" eth-ens-namehash "2.0.8" - underscore "1.9.1" - web3-core "1.3.4" - web3-core-helpers "1.3.4" - web3-core-promievent "1.3.4" - web3-eth-abi "1.3.4" - web3-eth-contract "1.3.4" - web3-utils "1.3.4" - -web3-eth-ens@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.6.0.tgz#af13852168d56fa71b9198eb097e96fb93831c2a" - integrity sha512-AG24PNv9qbYHSpjHcU2pViOII0jvIR7TeojJ2bxXSDqfcgHuRp3NZGKv6xFvT4uNI4LEQHUhSC7bzHoNF5t8CA== + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-promievent "1.5.3" + web3-eth-abi "1.5.3" + web3-eth-contract "1.5.3" + web3-utils "1.5.3" + +web3-eth-ens@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth-ens/-/web3-eth-ens-1.6.1.tgz#801bd5fb5237377ec2ed8517a9fe4634f2269c7a" + integrity sha512-ngprtbnoRgxg8s1wXt9nXpD3h1P+p7XnKXrp/8GdFI9uDmrbSQPRfzBw86jdZgOmy78hAnWmrHI6pBInmgi2qQ== dependencies: content-hash "^2.5.2" eth-ens-namehash "2.0.8" - web3-core "1.6.0" - web3-core-helpers "1.6.0" - web3-core-promievent "1.6.0" - web3-eth-abi "1.6.0" - web3-eth-contract "1.6.0" - web3-utils "1.6.0" - -web3-eth-iban@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.2.9.tgz#4ebf3d8783f34d04c4740dc18938556466399f7a" - integrity sha512-RtdVvJE0pyg9dHLy0GzDiqgnLnssSzfz/JYguhC1wsj9+Gnq1M6Diy3NixACWUAp6ty/zafyOaZnNQ+JuH9TjQ== + web3-core "1.6.1" + web3-core-helpers "1.6.1" + web3-core-promievent "1.6.1" + web3-eth-abi "1.6.1" + web3-eth-contract "1.6.1" + web3-utils "1.6.1" + +web3-eth-iban@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.6.tgz#0d6ba21fe78f190af8919e9cd5453882457209e0" + integrity sha512-nfMQaaLA/zsg5W4Oy/EJQbs8rSs1vBAX6b/35xzjYoutXlpHMQadujDx2RerTKhSHqFXSJeQAfE+2f6mdhYkRQ== dependencies: - bn.js "4.11.8" - web3-utils "1.2.9" + bn.js "^4.11.9" + web3-utils "1.3.6" -web3-eth-iban@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.3.4.tgz#5eb7a564e0dcf68730d68f48f95dd207cd173d81" - integrity sha512-Y7/hLjVvIN/OhaAyZ8L/hxbTqVX6AFTl2RwUXR6EEU9oaLydPcMjAx/Fr8mghUvQS3QJSr+UGubP3W4SkyNiYw== +web3-eth-iban@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.5.3.tgz#91b1475893a877b10eac1de5cce6eb379fb81b5d" + integrity sha512-vMzmGqolYZvRHwP9P4Nf6G8uYM5aTLlQu2a34vz78p0KlDC+eV1th3+90Qeaupa28EG7OO0IT1F0BejiIauOPw== dependencies: bn.js "^4.11.9" - web3-utils "1.3.4" + web3-utils "1.5.3" -web3-eth-iban@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.6.0.tgz#edbe46cedc5b148d53fa455edea6b4eef53b2be7" - integrity sha512-HM/bKBS/e8qg0+Eh7B8C/JVG+GkR4AJty17DKRuwMtrh78YsonPj7GKt99zS4n5sDLFww1Imu/ZIk3+K5uJCjw== +web3-eth-iban@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth-iban/-/web3-eth-iban-1.6.1.tgz#20bbed75723e3e9ff98e624979629d26329462b6" + integrity sha512-91H0jXZnWlOoXmc13O9NuQzcjThnWyAHyDn5Yf7u6mmKOhpJSGF/OHlkbpXt1Y4v2eJdEPaVFa+6i8aRyagE7Q== dependencies: bn.js "^4.11.9" - web3-utils "1.6.0" + web3-utils "1.6.1" -web3-eth-personal@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.2.9.tgz#9b95eb159b950b83cd8ae15873e1d57711b7a368" - integrity sha512-cFiNrktxZ1C/rIdJFzQTvFn3/0zcsR3a+Jf8Y3KxeQDHszQtosjLWptP7bsUmDwEh4hzh0Cy3KpOxlYBWB8bJQ== - dependencies: - "@types/node" "^12.6.1" - web3-core "1.2.9" - web3-core-helpers "1.2.9" - web3-core-method "1.2.9" - web3-net "1.2.9" - web3-utils "1.2.9" - -web3-eth-personal@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.4.tgz#0d0e0abea3447283d7ee5658ed312990c9bf48dd" - integrity sha512-JiTbaktYVk1j+S2EDooXAhw5j/VsdvZfKRmHtXUe/HizPM9ETXmj1+ne4RT6m+950jQ7DJwUF3XU1FKYNtEDwQ== +web3-eth-personal@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.3.6.tgz#226137916754c498f0284f22c55924c87a2efcf0" + integrity sha512-pOHU0+/h1RFRYoh1ehYBehRbcKWP4OSzd4F7mDljhHngv6W8ewMHrAN8O1ol9uysN2MuCdRE19qkRg5eNgvzFQ== dependencies: "@types/node" "^12.12.6" - web3-core "1.3.4" - web3-core-helpers "1.3.4" - web3-core-method "1.3.4" - web3-net "1.3.4" - web3-utils "1.3.4" + web3-core "1.3.6" + web3-core-helpers "1.3.6" + web3-core-method "1.3.6" + web3-net "1.3.6" + web3-utils "1.3.6" -web3-eth-personal@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.6.0.tgz#b75a61c0737b8b8bcc11d05db2ed7bfce7e4b262" - integrity sha512-8ohf4qAwbShf4RwES2tLHVqa+pHZnS5Q6tV80sU//bivmlZeyO1W4UWyNn59vu9KPpEYvLseOOC6Muxuvr8mFQ== +web3-eth-personal@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.5.3.tgz#4ebe09e9a77dd49d23d93b36b36cfbf4a6dae713" + integrity sha512-JzibJafR7ak/Icas8uvos3BmUNrZw1vShuNR5Cxjo+vteOC8XMqz1Vr7RH65B4bmlfb3bm9xLxetUHO894+Sew== dependencies: "@types/node" "^12.12.6" - web3-core "1.6.0" - web3-core-helpers "1.6.0" - web3-core-method "1.6.0" - web3-net "1.6.0" - web3-utils "1.6.0" + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-net "1.5.3" + web3-utils "1.5.3" -web3-eth@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.2.9.tgz#e40e7b88baffc9b487193211c8b424dc944977b3" - integrity sha512-sIKO4iE9FEBa/CYUd6GdPd7GXt/wISqxUd8PlIld6+hvMJj02lgO7Z7p5T9mZIJcIZJGvZX81ogx8oJ9yif+Ag== +web3-eth-personal@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth-personal/-/web3-eth-personal-1.6.1.tgz#9b524fb9f92b51163f46920ee2663d34a4897c8d" + integrity sha512-ItsC89Ln02+irzJjK6ALcLrMZfbVUCqVbmb/ieDKJ+eLW3pNkBNwoUzaydh92d5NzxNZgNxuQWVdlFyYX2hkEw== dependencies: - underscore "1.9.1" - web3-core "1.2.9" - web3-core-helpers "1.2.9" - web3-core-method "1.2.9" - web3-core-subscriptions "1.2.9" - web3-eth-abi "1.2.9" - web3-eth-accounts "1.2.9" - web3-eth-contract "1.2.9" - web3-eth-ens "1.2.9" - web3-eth-iban "1.2.9" - web3-eth-personal "1.2.9" - web3-net "1.2.9" - web3-utils "1.2.9" + "@types/node" "^12.12.6" + web3-core "1.6.1" + web3-core-helpers "1.6.1" + web3-core-method "1.6.1" + web3-net "1.6.1" + web3-utils "1.6.1" -web3-eth@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.4.tgz#7c4607685e66a1c43e3e315e526c959f24f96907" - integrity sha512-8OIVMLbvmx+LB5RZ4tDhXuFGWSdNMrCZ4HM0+PywQ08uEcmAcqTMFAn4vdPii+J8gCatZR501r1KdzX3SDLoPw== - dependencies: - underscore "1.9.1" - web3-core "1.3.4" - web3-core-helpers "1.3.4" - web3-core-method "1.3.4" - web3-core-subscriptions "1.3.4" - web3-eth-abi "1.3.4" - web3-eth-accounts "1.3.4" - web3-eth-contract "1.3.4" - web3-eth-ens "1.3.4" - web3-eth-iban "1.3.4" - web3-eth-personal "1.3.4" - web3-net "1.3.4" - web3-utils "1.3.4" - -web3-eth@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.6.0.tgz#4c9d5fb4eccf9f8744828281757e6ea76af58cbd" - integrity sha512-qJMvai//r0be6I9ghU24/152f0zgJfYC23TMszN3Y6jse1JtjCBP2TlTibFcvkUN1RRdIUY5giqO7ZqAYAmp7w== - dependencies: - web3-core "1.6.0" - web3-core-helpers "1.6.0" - web3-core-method "1.6.0" - web3-core-subscriptions "1.6.0" - web3-eth-abi "1.6.0" - web3-eth-accounts "1.6.0" - web3-eth-contract "1.6.0" - web3-eth-ens "1.6.0" - web3-eth-iban "1.6.0" - web3-eth-personal "1.6.0" - web3-net "1.6.0" - web3-utils "1.6.0" - -web3-net@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.2.9.tgz#51d248ed1bc5c37713c4ac40c0073d9beacd87d3" - integrity sha512-d2mTn8jPlg+SI2hTj2b32Qan6DmtU9ap/IUlJTeQbZQSkTLf0u9suW8Vjwyr4poJYXTurdSshE7OZsPNn30/ZA== +web3-eth@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.3.6.tgz#2c650893d540a7a0eb1365dd5b2dca24ac919b7c" + integrity sha512-9+rnywRRpyX3C4hfsAQXPQh6vHh9XzQkgLxo3gyeXfbhbShUoq2gFVuy42vsRs//6JlsKdyZS7Z3hHPHz2wreA== + dependencies: + underscore "1.12.1" + web3-core "1.3.6" + web3-core-helpers "1.3.6" + web3-core-method "1.3.6" + web3-core-subscriptions "1.3.6" + web3-eth-abi "1.3.6" + web3-eth-accounts "1.3.6" + web3-eth-contract "1.3.6" + web3-eth-ens "1.3.6" + web3-eth-iban "1.3.6" + web3-eth-personal "1.3.6" + web3-net "1.3.6" + web3-utils "1.3.6" + +web3-eth@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.5.3.tgz#d7d1ac7198f816ab8a2088c01e0bf1eda45862fe" + integrity sha512-saFurA1L23Bd7MEf7cBli6/jRdMhD4X/NaMiO2mdMMCXlPujoudlIJf+VWpRWJpsbDFdu7XJ2WHkmBYT5R3p1Q== + dependencies: + web3-core "1.5.3" + web3-core-helpers "1.5.3" + web3-core-method "1.5.3" + web3-core-subscriptions "1.5.3" + web3-eth-abi "1.5.3" + web3-eth-accounts "1.5.3" + web3-eth-contract "1.5.3" + web3-eth-ens "1.5.3" + web3-eth-iban "1.5.3" + web3-eth-personal "1.5.3" + web3-net "1.5.3" + web3-utils "1.5.3" + +web3-eth@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-eth/-/web3-eth-1.6.1.tgz#a25aba1ac213d872ecf3f81c7b4ab8072ecae224" + integrity sha512-kOV1ZgCKypSo5BQyltRArS7ZC3bRpIKAxSgzl7pUFinUb/MxfbM9KGeNxUXoCfTSErcCQJaDjcS6bSre5EMKuQ== + dependencies: + web3-core "1.6.1" + web3-core-helpers "1.6.1" + web3-core-method "1.6.1" + web3-core-subscriptions "1.6.1" + web3-eth-abi "1.6.1" + web3-eth-accounts "1.6.1" + web3-eth-contract "1.6.1" + web3-eth-ens "1.6.1" + web3-eth-iban "1.6.1" + web3-eth-personal "1.6.1" + web3-net "1.6.1" + web3-utils "1.6.1" + +web3-net@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.6.tgz#a56492e2227475e38db29394f8bac305a2446e41" + integrity sha512-KhzU3wMQY/YYjyMiQzbaLPt2kut88Ncx2iqjy3nw28vRux3gVX0WOCk9EL/KVJBiAA/fK7VklTXvgy9dZnnipw== dependencies: - web3-core "1.2.9" - web3-core-method "1.2.9" - web3-utils "1.2.9" + web3-core "1.3.6" + web3-core-method "1.3.6" + web3-utils "1.3.6" -web3-net@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.3.4.tgz#d76158bf0b4a7b3b14352b4f95472db9efc57a2a" - integrity sha512-wVyqgVC3Zt/0uGnBiR3GpnsS8lvOFTDgWZMxAk9C6Guh8aJD9MUc7pbsw5rHrPUVe6S6RUfFJvh/Xq8oMIQgSw== +web3-net@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.5.3.tgz#545fee49b8e213b0c55cbe74ffd0295766057463" + integrity sha512-0W/xHIPvgVXPSdLu0iZYnpcrgNnhzHMC888uMlGP5+qMCt8VuflUZHy7tYXae9Mzsg1kxaJAS5lHVNyeNw4CoQ== dependencies: - web3-core "1.3.4" - web3-core-method "1.3.4" - web3-utils "1.3.4" + web3-core "1.5.3" + web3-core-method "1.5.3" + web3-utils "1.5.3" -web3-net@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.6.0.tgz#2c28f8787073110a7c2310336889d2dad647e500" - integrity sha512-LFfG95ovTT2sNHkO1TEfsaKpYcxOSUtbuwHQ0K3G0e5nevKDJkPEFIqIcob40yiwcWoqEjENJP9Bjk8CRrZ99Q== +web3-net@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-net/-/web3-net-1.6.1.tgz#7a630a804ec9f81908ae52ccbb4ebbb9530b3906" + integrity sha512-gpnqKEIwfUHh5ik7wsQFlCje1DfcmGv+Sk7LCh1hCqn++HEDQxJ/mZCrMo11ZZpZHCH7c87imdxTg96GJnRxDw== dependencies: - web3-core "1.6.0" - web3-core-method "1.6.0" - web3-utils "1.6.0" + web3-core "1.6.1" + web3-core-method "1.6.1" + web3-utils "1.6.1" -web3-providers-http@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.2.9.tgz#e698aa5377e2019c24c5a1e6efa0f51018728934" - integrity sha512-F956tCIj60Ttr0UvEHWFIhx+be3He8msoPzyA44/kfzzYoMAsCFRn5cf0zQG6al0znE75g6HlWVSN6s3yAh51A== +web3-providers-http@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.6.tgz#36e8724a7424d52827819d53fd75dbf31f5422c2" + integrity sha512-OQkT32O1A06dISIdazpGLveZcOXhEo5cEX6QyiSQkiPk/cjzDrXMw4SKZOGQbbS1+0Vjizm1Hrp7O8Vp2D1M5Q== dependencies: - web3-core-helpers "1.2.9" + web3-core-helpers "1.3.6" xhr2-cookies "1.1.0" -web3-providers-http@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.3.4.tgz#89389e18e27148faa2fef58842740ffadbdda8cc" - integrity sha512-aIg/xHXvxpqpFU70sqfp+JC3sGkLfAimRKTUhG4oJZ7U+tTcYTHoxBJj+4A3Id4JAoKiiv0k1/qeyQ8f3rMC3g== +web3-providers-http@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.5.3.tgz#74f170fc3d79eb7941d9fbc34e2a067d61ced0b2" + integrity sha512-5DpUyWGHtDAr2RYmBu34Fu+4gJuBAuNx2POeiJIooUtJ+Mu6pIx4XkONWH6V+Ez87tZAVAsFOkJRTYuzMr3rPw== dependencies: - web3-core-helpers "1.3.4" + web3-core-helpers "1.5.3" xhr2-cookies "1.1.0" -web3-providers-http@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.6.0.tgz#8db4e589abf7197f5d65b12af1bf9726c45f4160" - integrity sha512-sNxHFNv3lnxpmULt34AS6M36IYB/Hzm2Et4yPNzdP1XE644D8sQBZQZaJQdTaza5HfrlwoqU6AOK935armqGuA== +web3-providers-http@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-providers-http/-/web3-providers-http-1.6.1.tgz#b59b14eefef23b98c327806f5f566303a73bd435" + integrity sha512-xBoKOJxu10+kO3ikamXmBfrWZ/xpQOGy0ocdp7Y81B17En5TXELwlmMXt1UlIgWiyYDhjq4OwlH/VODYqHXy3A== dependencies: - web3-core-helpers "1.6.0" + web3-core-helpers "1.6.1" xhr2-cookies "1.1.0" -web3-providers-ipc@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.2.9.tgz#6159eacfcd7ac31edc470d93ef10814fe874763b" - integrity sha512-NQ8QnBleoHA2qTJlqoWu7EJAD/FR5uimf7Ielzk4Z2z+m+6UAuJdJMSuQNj+Umhz9L/Ys6vpS1vHx9NizFl+aQ== +web3-providers-ipc@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.6.tgz#cef8d12c1ebb47adce5ebf597f553c623362cb4a" + integrity sha512-+TVsSd2sSVvVgHG4s6FXwwYPPT91boKKcRuEFXqEfAbUC5t52XOgmyc2LNiD9LzPhed65FbV4LqICpeYGUvSwA== dependencies: - oboe "2.1.4" - underscore "1.9.1" - web3-core-helpers "1.2.9" + oboe "2.1.5" + underscore "1.12.1" + web3-core-helpers "1.3.6" -web3-providers-ipc@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.3.4.tgz#b963518989b1b7847063cdd461ff73b83855834a" - integrity sha512-E0CvXEJElr/TIlG1YfJeO3Le5NI/4JZM+1SsEdiPIfBUAJN18oOoum138EBGKv5+YaLKZUtUuJSXWjIIOR/0Ig== +web3-providers-ipc@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.5.3.tgz#4bd7f5e445c2f3c2595fce0929c72bb879320a3f" + integrity sha512-JmeAptugVpmXI39LGxUSAymx0NOFdgpuI1hGQfIhbEAcd4sv7fhfd5D+ZU4oLHbRI8IFr4qfGU0uhR8BXhDzlg== dependencies: oboe "2.1.5" - underscore "1.9.1" - web3-core-helpers "1.3.4" + web3-core-helpers "1.5.3" -web3-providers-ipc@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.6.0.tgz#6a3410fd47a67c4a36719fb97f99534ae12aac98" - integrity sha512-ETYdfhpGiGoWpmmSJnONvnPfd3TPivHEGjXyuX+L5FUsbMOVZj9MFLNIS19Cx/YGL8UWJ/8alLJoTcWSIdz/aA== +web3-providers-ipc@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-providers-ipc/-/web3-providers-ipc-1.6.1.tgz#7ba460589d46896bb3d124288deed1b6a72d517e" + integrity sha512-anyoIZlpMzwEQI4lwylTzDrHsVp20v0QUtSTp2B5jInBinmQtyCE7vnbX20jEQ4j5uPwfJabKNtoJsk6a3O4WQ== dependencies: oboe "2.1.5" - web3-core-helpers "1.6.0" + web3-core-helpers "1.6.1" -web3-providers-ws@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.2.9.tgz#22c2006655ec44b4ad2b41acae62741a6ae7a88c" - integrity sha512-6+UpvINeI//dglZoAKStUXqxDOXJy6Iitv2z3dbgInG4zb8tkYl/VBDL80UjUg3ZvzWG0g7EKY2nRPEpON2TFA== +web3-providers-ws@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.6.tgz#e1df617bc89d66165abdf2191da0014c505bfaac" + integrity sha512-bk7MnJf5or0Re2zKyhR3L3CjGululLCHXx4vlbc/drnaTARUVvi559OI5uLytc/1k5HKUUyENAxLvetz2G1dnQ== dependencies: - eventemitter3 "^4.0.0" - underscore "1.9.1" - web3-core-helpers "1.2.9" - websocket "^1.0.31" + eventemitter3 "4.0.4" + underscore "1.12.1" + web3-core-helpers "1.3.6" + websocket "^1.0.32" -web3-providers-ws@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.3.4.tgz#b94c2e0ec51a0c472abdec53a472b5bf8176bec1" - integrity sha512-WBd9hk2fUAdrbA3kUyUk94ZeILtE6txLeoVVvIKAw2bPegx+RjkLyxC1Du0oceKgQ/qQWod8CCzl1E/GgTP+MQ== +web3-providers-ws@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.5.3.tgz#eec6cfb32bb928a4106de506f13a49070a21eabf" + integrity sha512-6DhTw4Q7nm5CFYEUHOJM0gAb3xFx+9gWpVveg3YxJ/ybR1BUvEWo3bLgIJJtX56cYX0WyY6DS35a7f0LOI1kVg== dependencies: eventemitter3 "4.0.4" - underscore "1.9.1" - web3-core-helpers "1.3.4" + web3-core-helpers "1.5.3" websocket "^1.0.32" -web3-providers-ws@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.6.0.tgz#dc15dc18c30089efda992015fd5254bd2b77af5f" - integrity sha512-eNRmlhOPCpuVYwBrKBBQRLGPFb4U1Uo44r9EWV69Cpo4gP6XeBTl6nkawhLz6DS0fq79apyPfItJVuSfAy77pA== +web3-providers-ws@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-providers-ws/-/web3-providers-ws-1.6.1.tgz#f7ee71f158971102b865e99ea7911f483e0507e9" + integrity sha512-FWMEFYb4rYFYRgSFBf/O1Ex4p/YKSlN+JydCtdlJwRimd89qm95CTfs4xGjCskwvXMjV2sarH+f1NPwJXicYpg== dependencies: eventemitter3 "4.0.4" - web3-core-helpers "1.6.0" + web3-core-helpers "1.6.1" websocket "^1.0.32" -web3-shh@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.2.9.tgz#c4ba70d6142cfd61341a50752d8cace9a0370911" - integrity sha512-PWa8b/EaxaMinFaxy6cV0i0EOi2M7a/ST+9k9nhyhCjVa2vzXuNoBNo2IUOmeZ0WP2UQB8ByJ2+p4htlJaDOjA== +web3-shh@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.6.tgz#4e3486c7eca5cbdb87f88910948223a5b7ea6c20" + integrity sha512-9zRo415O0iBslxBnmu9OzYjNErzLnzOsy+IOvSpIreLYbbAw0XkDWxv3SfcpKnTIWIACBR4AYMIxmmyi5iB3jw== dependencies: - web3-core "1.2.9" - web3-core-method "1.2.9" - web3-core-subscriptions "1.2.9" - web3-net "1.2.9" + web3-core "1.3.6" + web3-core-method "1.3.6" + web3-core-subscriptions "1.3.6" + web3-net "1.3.6" -web3-shh@1.3.4: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.3.4.tgz#b7d29e118f26416c1a74575e585be379cc01a77a" - integrity sha512-zoeww5mxLh3xKcqbX85irQbtFe5pc5XwrgjvmdMkhkOdZzPASlWOgqzUFtaPykpLwC3yavVx4jG5RqifweXLUA== +web3-shh@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.5.3.tgz#3c04aa4cda9ba0b746d7225262401160f8e38b13" + integrity sha512-COfEXfsqoV/BkcsNLRxQqnWc1Teb8/9GxdGag5GtPC5gQC/vsN+7hYVJUwNxY9LtJPKYTij2DHHnx6UkITng+Q== dependencies: - web3-core "1.3.4" - web3-core-method "1.3.4" - web3-core-subscriptions "1.3.4" - web3-net "1.3.4" + web3-core "1.5.3" + web3-core-method "1.5.3" + web3-core-subscriptions "1.5.3" + web3-net "1.5.3" -web3-shh@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.6.0.tgz#838a3435dce1039f669a48e53e948062de197931" - integrity sha512-ymN0OFL81WtEeSyb+PFpuUv39fR3frGwsZnIg5EVPZvrOIdaDSFcGSLDmafUt0vKSubvLMVYIBOCskRD6YdtEQ== +web3-shh@1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-shh/-/web3-shh-1.6.1.tgz#eebaab2e5e6be80fe2585c6c094fa10a03349ca7" + integrity sha512-oP00HbAtybLCGlLOZUYXOdeB9xq88k2l0TtStvKBtmFqRt+zVk5TxEeuOnVPRxNhcA2Un8RUw6FtvgZlWStu9A== dependencies: - web3-core "1.6.0" - web3-core-method "1.6.0" - web3-core-subscriptions "1.6.0" - web3-net "1.6.0" + web3-core "1.6.1" + web3-core-method "1.6.1" + web3-core-subscriptions "1.6.1" + web3-net "1.6.1" web3-utils@1.2.9: version "1.2.9" @@ -8047,10 +9399,10 @@ web3-utils@1.2.9: underscore "1.9.1" utf8 "3.0.0" -web3-utils@1.3.4, web3-utils@^1.2.5, web3-utils@^1.3.0: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.4.tgz#9b1aa30d7549f860b573e7bb7e690999e7192198" - integrity sha512-/vC2v0MaZNpWooJfpRw63u0Y3ag2gNjAWiLtMSL6QQLmCqCy4SQIndMt/vRyx0uMoeGt1YTwSXEcHjUzOhLg0A== +web3-utils@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.3.6.tgz#390bc9fa3a7179746963cfaca55bb80ac4d8dc10" + integrity sha512-hHatFaQpkQgjGVER17gNx8u1qMyaXFZtM0y0XLGH1bzsjMPlkMPLRcYOrZ00rOPfTEuYFOdrpGOqZXVmGrMZRg== dependencies: bn.js "^4.11.9" eth-lib "0.2.8" @@ -8058,13 +9410,26 @@ web3-utils@1.3.4, web3-utils@^1.2.5, web3-utils@^1.3.0: ethjs-unit "0.1.6" number-to-bn "1.7.0" randombytes "^2.1.0" - underscore "1.9.1" + underscore "1.12.1" utf8 "3.0.0" -web3-utils@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.6.0.tgz#1975c5ee5b7db8a0836eb7004848a7cd962d1ddc" - integrity sha512-bgCAWAeQnJF035YTFxrcHJ5mGEfTi/McsjqldZiXRwlHK7L1PyOqvXiQLE053dlzvy1kdAxWl/sSSfLMyNUAXg== +web3-utils@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.5.3.tgz#e914c9320cd663b2a09a5cb920ede574043eb437" + integrity sha512-56nRgA+Ad9SEyCv39g36rTcr5fpsd4L9LgV3FK0aB66nAMazLAA6Qz4lH5XrUKPDyBIPGJIR+kJsyRtwcu2q1Q== + dependencies: + bn.js "^4.11.9" + eth-lib "0.2.8" + ethereum-bloom-filters "^1.0.6" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +web3-utils@1.6.1, web3-utils@^1.0.0-beta.31, web3-utils@^1.2.5, web3-utils@^1.3.0: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.6.1.tgz#befcb23922b00603ab56d8c5b4158468dc494aca" + integrity sha512-RidGKv5kOkcerI6jQqDFDoTllQQqV+rPhTzZHhmbqtFObbYpU93uc+yG1LHivRTQhA6llIx67iudc/vzisgO+w== dependencies: bn.js "^4.11.9" ethereum-bloom-filters "^1.0.6" @@ -8074,49 +9439,90 @@ web3-utils@1.6.0: randombytes "^2.1.0" utf8 "3.0.0" -web3@1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.2.9.tgz#cbcf1c0fba5e213a6dfb1f2c1f4b37062e4ce337" - integrity sha512-Mo5aBRm0JrcNpN/g4VOrDzudymfOnHRC3s2VarhYxRA8aWgF5rnhQ0ziySaugpic1gksbXPe105pUWyRqw8HUA== - dependencies: - web3-bzz "1.2.9" - web3-core "1.2.9" - web3-eth "1.2.9" - web3-eth-personal "1.2.9" - web3-net "1.2.9" - web3-shh "1.2.9" - web3-utils "1.2.9" +web3@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.6.tgz#599425461c3f9a8cbbefa70616438995f4a064cc" + integrity sha512-jEpPhnL6GDteifdVh7ulzlPrtVQeA30V9vnki9liYlUvLV82ZM7BNOQJiuzlDePuE+jZETZSP/0G/JlUVt6pOA== + dependencies: + web3-bzz "1.3.6" + web3-core "1.3.6" + web3-eth "1.3.6" + web3-eth-personal "1.3.6" + web3-net "1.3.6" + web3-shh "1.3.6" + web3-utils "1.3.6" + +web3@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.5.3.tgz#11882679453c645bf33620fbc255a243343075aa" + integrity sha512-eyBg/1K44flfv0hPjXfKvNwcUfIVDI4NX48qHQe6wd7C8nPSdbWqo9vLy6ksZIt9NLa90HjI8HsGYgnMSUxn6w== + dependencies: + web3-bzz "1.5.3" + web3-core "1.5.3" + web3-eth "1.5.3" + web3-eth-personal "1.5.3" + web3-net "1.5.3" + web3-shh "1.5.3" + web3-utils "1.5.3" + +web3@^1.0.0-beta.34, web3@^1.2.5, web3@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/web3/-/web3-1.6.1.tgz#c9e68fe7b3073adddf35393441f950ec69b92735" + integrity sha512-c299lLiyb2/WOcxh7TinwvbATaMmrgNIeAzbLbmOKHI0LcwyfsB1eu2ReOIrfrCYDYRW2KAjYr7J7gHawqDNPQ== + dependencies: + web3-bzz "1.6.1" + web3-core "1.6.1" + web3-eth "1.6.1" + web3-eth-personal "1.6.1" + web3-net "1.6.1" + web3-shh "1.6.1" + web3-utils "1.6.1" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE= -web3@^1.0.0-beta.34, web3@^1.2.5: - version "1.3.4" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.3.4.tgz#31e014873360aa5840eb17f9f171190c967cffb7" - integrity sha512-D6cMb2EtTMLHgdGbkTPGl/Qi7DAfczR+Lp7iFX3bcu/bsD9V8fZW69hA8v5cRPNGzXUwVQebk3bS17WKR4cD2w== +webpack-sources@^1.0.1: + version "1.4.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.4.3.tgz#eedd8ec0b928fbf1cbfe994e22d2d890f330a933" + integrity sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ== dependencies: - web3-bzz "1.3.4" - web3-core "1.3.4" - web3-eth "1.3.4" - web3-eth-personal "1.3.4" - web3-net "1.3.4" - web3-shh "1.3.4" - web3-utils "1.3.4" + source-list-map "^2.0.0" + source-map "~0.6.1" -web3@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/web3/-/web3-1.6.0.tgz#d8fa0cd9e7bf252f9fe43bb77dc42bc6671affde" - integrity sha512-rWpXnO88MiVX5yTRqMBCVKASxc7QDkXZZUl1D48sKlbX4dt3BAV+nVMVUKCBKiluZ5Bp8pDrVCUdPx/jIYai5Q== - dependencies: - web3-bzz "1.6.0" - web3-core "1.6.0" - web3-eth "1.6.0" - web3-eth-personal "1.6.0" - web3-net "1.6.0" - web3-shh "1.6.0" - web3-utils "1.6.0" - -websocket@^1.0.31, websocket@^1.0.32: - version "1.0.33" - resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.33.tgz#407f763fc58e74a3fa41ca3ae5d78d3f5e3b82a5" - integrity sha512-XwNqM2rN5eh3G2CUQE3OHZj+0xfdH42+OFK6LdC2yqiC0YU8e5UK0nYre220T0IyyN031V/XOvtHvXozvJYFWA== +webpack@^3.0.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.12.0.tgz#3f9e34360370602fcf639e97939db486f4ec0d74" + integrity sha512-Sw7MdIIOv/nkzPzee4o0EdvCuPmxT98+vVpIvwtcwcF1Q4SDSNp92vwcKc4REe7NItH9f1S4ra9FuQ7yuYZ8bQ== + dependencies: + acorn "^5.0.0" + acorn-dynamic-import "^2.0.0" + ajv "^6.1.0" + ajv-keywords "^3.1.0" + async "^2.1.2" + enhanced-resolve "^3.4.0" + escope "^3.6.0" + interpret "^1.0.0" + json-loader "^0.5.4" + json5 "^0.5.1" + loader-runner "^2.3.0" + loader-utils "^1.1.0" + memory-fs "~0.4.1" + mkdirp "~0.5.0" + node-libs-browser "^2.0.0" + source-map "^0.5.3" + supports-color "^4.2.1" + tapable "^0.2.7" + uglifyjs-webpack-plugin "^0.4.6" + watchpack "^1.4.0" + webpack-sources "^1.0.1" + yargs "^8.0.2" + +websocket@^1.0.32: + version "1.0.34" + resolved "https://registry.yarnpkg.com/websocket/-/websocket-1.0.34.tgz#2bdc2602c08bf2c82253b730655c0ef7dcab3111" + integrity sha512-PRDso2sGwF6kM75QykIesBijKSVceR6jL2G8NGYyq2XrItNC2P5/qL5XeR056GhA+Ly7JMFvJb9I312mJfmqnQ== dependencies: bufferutil "^4.0.1" debug "^2.2.0" @@ -8125,6 +9531,14 @@ websocket@^1.0.31, websocket@^1.0.32: utf-8-validate "^5.0.2" yaeti "^0.0.6" +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha1-lmRU6HZUYuN2RNNib2dCzotwll0= + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + which-boxed-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" @@ -8136,23 +9550,27 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-module@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" + integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= which-typed-array@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.4.tgz#8fcb7d3ee5adf2d771066fba7cf37e32fe8711ff" - integrity sha512-49E0SpUe90cjpoc7BOJwyPHRqSAd12c10Qm2amdEZrJPCY2NDxaW01zHITrem+rnETY3dwrbH3UUrUwagfCYDA== + version "1.1.7" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.7.tgz#2761799b9a22d4b8660b3c1b40abaa7739691793" + integrity sha512-vjxaB4nfDqwKI0ws7wZpxIlde1XrLX5uB0ZjpfshgmapJMD7jJWhZI+yToJTqaFByF0eNBcYxbjmCzoRP7CfEw== dependencies: - available-typed-arrays "^1.0.2" - call-bind "^1.0.0" - es-abstract "^1.18.0-next.1" + available-typed-arrays "^1.0.5" + call-bind "^1.0.2" + es-abstract "^1.18.5" foreach "^2.0.5" - function-bind "^1.1.1" - has-symbols "^1.0.1" - is-typed-array "^1.1.3" + has-tostringtag "^1.0.0" + is-typed-array "^1.1.7" which@1.3.1, which@^1.1.1, which@^1.2.9, which@^1.3.1: version "1.3.1" @@ -8175,16 +9593,39 @@ wide-align@1.1.3: dependencies: string-width "^1.0.2 || 2" +window-size@0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.1.0.tgz#5438cd2ea93b202efa3a19fe8887aee7c94f9c9d" + integrity sha1-VDjNLqk7IC76Ohn+iIeu58lPnJ0= + +window-size@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/window-size/-/window-size-0.2.0.tgz#b4315bb4214a3d7058ebeee892e13fa24d98b075" + integrity sha1-tDFbtCFKPXBY6+7okuE/ok2YsHU= + word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== +wordwrap@0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.2.tgz#b79669bb42ecb409f83d583cad52ca17eaa1643f" + integrity sha1-t5Zpu0LstAn4PVg8rVLKF+qhZD8= + wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= +wrap-ansi@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" + integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= + dependencies: + string-width "^1.0.1" + strip-ansi "^3.0.1" + wrap-ansi@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" @@ -8239,9 +9680,9 @@ ws@^3.0.0: ultron "~1.1.0" ws@^7.4.6: - version "7.5.5" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.5.tgz#8b4bc4af518cfabd0473ae4f99144287b33eb881" - integrity sha512-BAkMFcAzl8as1G/hArkxOxq3G7pjUqQ3gzYbLL0/5zNkph70e+lCoxBGnm6AW1+/aiNeV4fnKqZ8m4GZewmH2w== + version "7.5.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.6.tgz#e59fc509fb15ddfb65487ee9765c5a51dec5fe7b" + integrity sha512-6GLgCqo2cy2A2rjCNFlxQS6ZljG/coZfZXclldI8FB/1G3CCI36Zd8xy2HrFVACi8tfk5XrgLQEk+P0Tnz9UcA== xhr-request-promise@^0.1.2: version "0.1.3" @@ -8290,17 +9731,27 @@ xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== +y18n@^3.2.1: + version "3.2.2" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.2.tgz#85c901bd6470ce71fc4bb723ad209b70f7f28696" + integrity sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ== + y18n@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.1.tgz#8db2b83c31c5d75099bb890b23f3094891e247d4" - integrity sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ== + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== yaeti@^0.0.6: version "0.0.6" resolved "https://registry.yarnpkg.com/yaeti/-/yaeti-0.0.6.tgz#f26f484d72684cf42bedfb76970aa1608fbf9577" integrity sha1-8m9ITXJoTPQr7ft2lwqhYI+/lXc= -yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3: +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= + +yallist@^3.0.0, yallist@^3.0.2, yallist@^3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== @@ -8310,7 +9761,7 @@ yallist@^4.0.0: resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== -yaml@^1.10.0: +yaml@^1.10.2: version "1.10.2" resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== @@ -8323,6 +9774,21 @@ yargs-parser@13.1.2, yargs-parser@^13.1.0, yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-2.4.1.tgz#85568de3cf150ff49fa51825f03a8c880ddcc5c4" + integrity sha1-hVaN488VD/SfpRgl8DqMiA3cxcQ= + dependencies: + camelcase "^3.0.0" + lodash.assign "^4.0.6" + +yargs-parser@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-7.0.0.tgz#8d0ac42f16ea55debd332caf4c4038b3e3f5dfd9" + integrity sha1-jQrELxbqVd69MyyvTEA4s+P139k= + dependencies: + camelcase "^4.1.0" + yargs-unparser@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" @@ -8365,6 +9831,55 @@ yargs@13.3.2, yargs@^13.3.0: y18n "^4.0.0" yargs-parser "^13.1.2" +yargs@^4.7.1: + version "4.8.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-4.8.1.tgz#c0c42924ca4aaa6b0e6da1739dfb216439f9ddc0" + integrity sha1-wMQpJMpKqmsObaFznfshZDn53cA= + dependencies: + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + lodash.assign "^4.0.3" + os-locale "^1.4.0" + read-pkg-up "^1.0.1" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^1.0.1" + which-module "^1.0.0" + window-size "^0.2.0" + y18n "^3.2.1" + yargs-parser "^2.4.1" + +yargs@^8.0.2: + version "8.0.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-8.0.2.tgz#6299a9055b1cefc969ff7e79c1d918dceb22c360" + integrity sha1-YpmpBVsc78lp/355wdkY3Osiw2A= + dependencies: + camelcase "^4.1.0" + cliui "^3.2.0" + decamelize "^1.1.1" + get-caller-file "^1.0.1" + os-locale "^2.0.0" + read-pkg-up "^2.0.0" + require-directory "^2.1.1" + require-main-filename "^1.0.1" + set-blocking "^2.0.0" + string-width "^2.0.0" + which-module "^2.0.0" + y18n "^3.2.1" + yargs-parser "^7.0.0" + +yargs@~3.10.0: + version "3.10.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-3.10.0.tgz#f7ee7bd857dd7c1d2d38c0e74efbd681d1431fd1" + integrity sha1-9+572FfdfB0tOMDnTvvWgdFDH9E= + dependencies: + camelcase "^1.0.2" + cliui "^2.1.0" + decamelize "^1.0.0" + window-size "0.1.0" + yn@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" From 791292452c459cc2bc06a3d20543d2f6aaeffe81 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Sun, 19 Dec 2021 14:23:03 +0200 Subject: [PATCH 42/55] Refactor operator onboarding --- abi/Oracles.json | 266 +++---- abi/Pool.json | 152 ++-- abi/PoolValidators.json | 335 ++------- contracts/Oracles.sol | 64 +- contracts/interfaces/IOracles.sol | 47 +- contracts/interfaces/IPool.sol | 23 +- contracts/interfaces/IPoolValidators.sol | 116 +--- contracts/pool/Pool.sol | 35 +- contracts/pool/PoolValidators.sol | 212 +----- deployments/index.js | 17 +- deployments/settings.js | 3 - hardhat.config.js | 2 +- test/Proxies.test.js | 6 - test/oracles/Oracles.test.js | 143 +++- test/oracles/upgrading.test.js | 3 +- test/pool/PoolValidators.test.js | 839 +++-------------------- test/pool/depositDataMerkleRoot.js | 362 ++++++++++ test/pool/finalizeMerkleRoot.js | 166 ----- test/pool/initializeMerkleRoot.js | 166 ----- test/pool/settings.test.js | 26 +- test/pool/stake.test.js | 62 +- test/utils.js | 178 +---- 22 files changed, 984 insertions(+), 2239 deletions(-) create mode 100644 test/pool/depositDataMerkleRoot.js delete mode 100644 test/pool/finalizeMerkleRoot.js delete mode 100644 test/pool/initializeMerkleRoot.js diff --git a/abi/Oracles.json b/abi/Oracles.json index 14fc6126..75df261f 100644 --- a/abi/Oracles.json +++ b/abi/Oracles.json @@ -1,78 +1,4 @@ [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "oracle", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "name": "FinalizeValidatorVoteSubmitted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "oracle", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "nonce", - "type": "uint256" - } - ], - "name": "InitializeValidatorVoteSubmitted", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -162,6 +88,43 @@ "name": "Paused", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "sender", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "oracle", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "nonce", + "type": "uint256" + } + ], + "name": "RegisterValidatorVoteSubmitted", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -391,56 +354,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "withdrawalCredentials", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "depositDataRoot", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct IPoolValidators.DepositData", - "name": "depositData", - "type": "tuple" - }, - { - "internalType": "bytes32[]", - "name": "merkleProof", - "type": "bytes32[]" - }, - { - "internalType": "bytes[]", - "name": "signatures", - "type": "bytes[]" - } - ], - "name": "finalizeValidator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -583,56 +496,6 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "withdrawalCredentials", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "depositDataRoot", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct IPoolValidators.DepositData", - "name": "depositData", - "type": "tuple" - }, - { - "internalType": "bytes32[]", - "name": "merkleProof", - "type": "bytes32[]" - }, - { - "internalType": "bytes[]", - "name": "signatures", - "type": "bytes[]" - } - ], - "name": "initializeValidator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -723,6 +586,61 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "withdrawalCredentials", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "depositDataRoot", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct IPoolValidators.DepositData", + "name": "depositData", + "type": "tuple" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + }, + { + "internalType": "bytes32", + "name": "validatorsDepositCount", + "type": "bytes32" + }, + { + "internalType": "bytes[]", + "name": "signatures", + "type": "bytes[]" + } + ], + "name": "registerValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { diff --git a/abi/Pool.json b/abi/Pool.json index f5b88d41..9f11165d 100644 --- a/abi/Pool.json +++ b/abi/Pool.json @@ -270,25 +270,6 @@ "name": "Unpaused", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "address", - "name": "operator", - "type": "address" - } - ], - "name": "ValidatorInitialized", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -334,19 +315,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "VALIDATOR_INIT_DEPOSIT", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "VALIDATOR_TOTAL_DEPOSIT", @@ -478,46 +446,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "withdrawalCredentials", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "depositDataRoot", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct IPoolValidators.DepositData", - "name": "depositData", - "type": "tuple" - } - ], - "name": "finalizeValidator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -622,46 +550,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "withdrawalCredentials", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "depositDataRoot", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct IPoolValidators.DepositData", - "name": "depositData", - "type": "tuple" - } - ], - "name": "initializeValidator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [ { @@ -766,6 +654,46 @@ "stateMutability": "payable", "type": "function" }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "withdrawalCredentials", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "depositDataRoot", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct IPoolValidators.DepositData", + "name": "depositData", + "type": "tuple" + } + ], + "name": "registerValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { diff --git a/abi/PoolValidators.json b/abi/PoolValidators.json index e6bd955f..92d3b9f7 100644 --- a/abi/PoolValidators.json +++ b/abi/PoolValidators.json @@ -1,29 +1,4 @@ [ - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "collateralRecipient", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "collateral", - "type": "uint256" - } - ], - "name": "CollateralWithdrawn", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -36,25 +11,13 @@ { "indexed": true, "internalType": "bytes32", - "name": "initializeMerkleRoot", + "name": "depositDataMerkleRoot", "type": "bytes32" }, { "indexed": false, "internalType": "string", - "name": "initializeMerkleProofs", - "type": "string" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "finalizeMerkleRoot", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "string", - "name": "finalizeMerkleProofs", + "name": "depositDataMerkleProofs", "type": "string" } ], @@ -69,12 +32,6 @@ "internalType": "address", "name": "operator", "type": "address" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "collateral", - "type": "uint256" } ], "name": "OperatorCommitted", @@ -99,31 +56,6 @@ "name": "OperatorRemoved", "type": "event" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "refundedAmount", - "type": "uint256" - } - ], - "name": "OperatorSlashed", - "type": "event" - }, { "anonymous": false, "inputs": [ @@ -273,22 +205,12 @@ }, { "internalType": "bytes32", - "name": "initializeMerkleRoot", + "name": "depositDataMerkleRoot", "type": "bytes32" }, { "internalType": "string", - "name": "initializeMerkleProofs", - "type": "string" - }, - { - "internalType": "bytes32", - "name": "finalizeMerkleRoot", - "type": "bytes32" - }, - { - "internalType": "string", - "name": "finalizeMerkleProofs", + "name": "depositDataMerkleProofs", "type": "string" } ], @@ -310,74 +232,10 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "name": "collaterals", - "outputs": [ - { - "internalType": "uint256", - "name": "", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "commitOperator", "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "withdrawalCredentials", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "depositDataRoot", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct IPoolValidators.DepositData", - "name": "depositData", - "type": "tuple" - }, - { - "internalType": "bytes32[]", - "name": "merkleProof", - "type": "bytes32[]" - } - ], - "name": "finalizeValidator", - "outputs": [], "stateMutability": "nonpayable", "type": "function" }, @@ -391,11 +249,6 @@ ], "name": "getOperator", "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - }, { "internalType": "bytes32", "name": "", @@ -540,46 +393,20 @@ { "inputs": [ { - "components": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "withdrawalCredentials", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "depositDataRoot", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct IPoolValidators.DepositData", - "name": "depositData", - "type": "tuple" - }, + "internalType": "address", + "name": "_account", + "type": "address" + } + ], + "name": "isAdmin", + "outputs": [ { - "internalType": "bytes32[]", - "name": "merkleProof", - "type": "bytes32[]" + "internalType": "bool", + "name": "", + "type": "bool" } ], - "name": "initializeValidator", - "outputs": [], - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function" }, { @@ -590,7 +417,7 @@ "type": "address" } ], - "name": "isAdmin", + "name": "isPauser", "outputs": [ { "internalType": "bool", @@ -604,12 +431,12 @@ { "inputs": [ { - "internalType": "address", - "name": "_account", - "type": "address" + "internalType": "bytes32", + "name": "", + "type": "bytes32" } ], - "name": "isPauser", + "name": "isValidatorRegistered", "outputs": [ { "internalType": "bool", @@ -640,6 +467,51 @@ "stateMutability": "view", "type": "function" }, + { + "inputs": [ + { + "components": [ + { + "internalType": "address", + "name": "operator", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "withdrawalCredentials", + "type": "bytes32" + }, + { + "internalType": "bytes32", + "name": "depositDataRoot", + "type": "bytes32" + }, + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "signature", + "type": "bytes" + } + ], + "internalType": "struct IPoolValidators.DepositData", + "name": "depositData", + "type": "tuple" + }, + { + "internalType": "bytes32[]", + "name": "merkleProof", + "type": "bytes32[]" + } + ], + "name": "registerValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, { "inputs": [ { @@ -715,88 +587,11 @@ "stateMutability": "nonpayable", "type": "function" }, - { - "inputs": [ - { - "components": [ - { - "internalType": "address", - "name": "operator", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "withdrawalCredentials", - "type": "bytes32" - }, - { - "internalType": "bytes32", - "name": "depositDataRoot", - "type": "bytes32" - }, - { - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "internalType": "bytes", - "name": "signature", - "type": "bytes" - } - ], - "internalType": "struct IPoolValidators.DepositData", - "name": "depositData", - "type": "tuple" - }, - { - "internalType": "bytes32[]", - "name": "merkleProof", - "type": "bytes32[]" - } - ], - "name": "slashOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, { "inputs": [], "name": "unpause", "outputs": [], "stateMutability": "nonpayable", "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "name": "validatorStatuses", - "outputs": [ - { - "internalType": "enum IPoolValidators.ValidatorStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address payable", - "name": "collateralRecipient", - "type": "address" - } - ], - "name": "withdrawCollateral", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" } ] diff --git a/contracts/Oracles.sol b/contracts/Oracles.sol index a70f4157..1eff385a 100644 --- a/contracts/Oracles.sol +++ b/contracts/Oracles.sol @@ -77,7 +77,7 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { // migrate data from previous Oracles contract rewardsNonce._value = IOraclesV1(oraclesV1).currentNonce().add(1000); uint256 oraclesCount = AccessControlUpgradeable(oraclesV1).getRoleMemberCount(ORACLE_ROLE); - for(uint256 i = 0; i < oraclesCount; i++) { + for (uint256 i = 0; i < oraclesCount; i++) { address oracle = AccessControlUpgradeable(oraclesV1).getRoleMember(ORACLE_ROLE, i); _setupRole(ORACLE_ROLE, oracle); emit OracleAdded(oracle); @@ -228,60 +228,26 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { } /** - * @dev See {IOracles-initializeValidator}. + * @dev See {IOracles-registerValidator}. */ - function initializeValidator( + function registerValidator( IPoolValidators.DepositData calldata depositData, bytes32[] calldata merkleProof, + bytes32 validatorsDepositCount, bytes[] calldata signatures ) - external override whenNotPaused + external override onlyOracle whenNotPaused { - require(isEnoughSignatures(signatures.length), "Oracles: invalid number of signatures"); - - // calculate candidate ID hash - uint256 nonce = validatorsNonce.current(); - bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( - keccak256(abi.encode(nonce, depositData.publicKey, depositData.operator)) + require( + keccak256(pool.validatorRegistration().get_deposit_count()) == validatorsDepositCount, + "Oracles: invalid validators deposit count" ); - - // check signatures and calculate number of submitted oracle votes - address[] memory signedOracles = new address[](signatures.length); - for (uint256 i = 0; i < signatures.length; i++) { - bytes memory signature = signatures[i]; - address signer = ECDSAUpgradeable.recover(candidateId, signature); - require(hasRole(ORACLE_ROLE, signer), "Oracles: invalid signer"); - - for (uint256 j = 0; j < i; j++) { - require(signedOracles[j] != signer, "Oracles: repeated signature"); - } - signedOracles[i] = signer; - emit InitializeValidatorVoteSubmitted(msg.sender, signer, depositData.operator, depositData.publicKey, nonce); - } - - // increment nonce for future signatures - validatorsNonce.increment(); - - // initialize validator - poolValidators.initializeValidator(depositData, merkleProof); - } - - /** - * @dev See {IOracles-finalizeValidator}. - */ - function finalizeValidator( - IPoolValidators.DepositData calldata depositData, - bytes32[] calldata merkleProof, - bytes[] calldata signatures - ) - external override whenNotPaused - { require(isEnoughSignatures(signatures.length), "Oracles: invalid number of signatures"); // calculate candidate ID hash uint256 nonce = validatorsNonce.current(); bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( - keccak256(abi.encode(nonce, depositData.publicKey, depositData.operator)) + keccak256(abi.encode(nonce, depositData.publicKey, depositData.operator, validatorsDepositCount)) ); // check signatures and calculate number of submitted oracle votes @@ -295,13 +261,19 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { require(signedOracles[j] != signer, "Oracles: repeated signature"); } signedOracles[i] = signer; - emit FinalizeValidatorVoteSubmitted(msg.sender, signer, depositData.operator, depositData.publicKey, nonce); + emit RegisterValidatorVoteSubmitted( + msg.sender, + signer, + depositData.operator, + depositData.publicKey, + nonce + ); } // increment nonce for future signatures validatorsNonce.increment(); - // finalize validator - poolValidators.finalizeValidator(depositData, merkleProof); + // register validator + poolValidators.registerValidator(depositData, merkleProof); } } diff --git a/contracts/interfaces/IOracles.sol b/contracts/interfaces/IOracles.sol index e0c8e4df..91806617 100644 --- a/contracts/interfaces/IOracles.sol +++ b/contracts/interfaces/IOracles.sol @@ -48,30 +48,14 @@ interface IOracles { ); /** - * @dev Event for tracking validator initialization votes. + * @dev Event for tracking validator registration votes. * @param sender - address of the transaction sender. * @param oracle - address of the signed oracle. * @param operator - address of the operator the vote was sent for. * @param publicKey - public key of the validator the vote was sent for. - * @param nonce - validator initialization nonce. + * @param nonce - validator registration nonce. */ - event InitializeValidatorVoteSubmitted( - address indexed sender, - address indexed oracle, - address indexed operator, - bytes publicKey, - uint256 nonce - ); - - /** - * @dev Event for tracking validator finalization votes. - * @param sender - address of the transaction sender. - * @param oracle - address of the signed oracle. - * @param operator - address of the operator the vote was sent for. - * @param publicKey - public key of the validator the vote was sent for. - * @param nonce - validator finalization nonce. - */ - event FinalizeValidatorVoteSubmitted( + event RegisterValidatorVoteSubmitted( address indexed sender, address indexed oracle, address indexed operator, @@ -171,28 +155,17 @@ interface IOracles { ) external; /** - * @dev Function for submitting initialization of the new validator. - * The quorum of signatures over the same data is required to initialize. - * @param depositData - the deposit data for the initialization. - * @param merkleProof - an array of hashes to verify whether the deposit data is part of the initialize merkle root. - * @param signatures - oracles' signatures. - */ - function initializeValidator( - IPoolValidators.DepositData calldata depositData, - bytes32[] calldata merkleProof, - bytes[] calldata signatures - ) external; - - /** - * @dev Function for submitting finalization of the new validator. - * The quorum of signatures over the same data is required to finalize. - * @param depositData - the deposit data for the finalization. - * @param merkleProof - an array of hashes to verify whether the deposit data is part of the finalize merkle root. + * @dev Function for submitting registration of the new validator. + * The quorum of signatures over the same data is required to register. + * @param depositData - the deposit data for the registration. + * @param merkleProof - an array of hashes to verify whether the deposit data is part of the deposit data merkle root. + * @param validatorsDepositCount - validators deposit count to protect from malicious operators. * @param signatures - oracles' signatures. */ - function finalizeValidator( + function registerValidator( IPoolValidators.DepositData calldata depositData, bytes32[] calldata merkleProof, + bytes32 validatorsDepositCount, bytes[] calldata signatures ) external; } diff --git a/contracts/interfaces/IPool.sol b/contracts/interfaces/IPool.sol index e4a4e4d5..4dd1d93d 100644 --- a/contracts/interfaces/IPool.sol +++ b/contracts/interfaces/IPool.sol @@ -10,13 +10,6 @@ import "./IPoolValidators.sol"; * @dev Interface of the Pool contract. */ interface IPool { - /** - * @dev Event for tracking initialized validators. - * @param publicKey - validator public key. - * @param operator - address of the validator operator. - */ - event ValidatorInitialized(bytes publicKey, address operator); - /** * @dev Event for tracking registered validators. * @param publicKey - validator public key. @@ -98,12 +91,6 @@ interface IPool { // solhint-disable-next-line func-name-mixedcase function VALIDATOR_TOTAL_DEPOSIT() external view returns (uint256); - /** - * @dev Function for getting the initial validator deposit. - */ - // solhint-disable-next-line func-name-mixedcase - function VALIDATOR_INIT_DEPOSIT() external view returns (uint256); - /** * @dev Function for retrieving the total amount of pending validators. */ @@ -221,16 +208,10 @@ interface IPool { function activateMultiple(address account, uint256[] calldata validatorIndexes) external; /** - * @dev Function for initializing new pool validator. - * @param depositData - the deposit data to submit for the validator. - */ - function initializeValidator(IPoolValidators.DepositData calldata depositData) external; - - /** - * @dev Function for finalizing new pool validator registration. + * @dev Function for registering new pool validator registration. * @param depositData - the deposit data to submit for the validator. */ - function finalizeValidator(IPoolValidators.DepositData calldata depositData) external; + function registerValidator(IPoolValidators.DepositData calldata depositData) external; /** * @dev Function for refunding to the pool. diff --git a/contracts/interfaces/IPoolValidators.sol b/contracts/interfaces/IPoolValidators.sol index 712cb189..289386d4 100644 --- a/contracts/interfaces/IPoolValidators.sol +++ b/contracts/interfaces/IPoolValidators.sol @@ -9,15 +9,11 @@ pragma abicoder v2; interface IPoolValidators { /** * @dev Structure for storing operator data. - * @param initializeMerkleRoot - validators registration initialization merkle root. - * @param finalizeMerkleRoot - validators registration finalization merkle root. - * @param locked - defines whether operator is currently locked. + * @param depositDataMerkleRoot - validators deposit data merkle root. * @param committed - defines whether operator has committed its readiness to host validators. */ struct Operator { - bytes32 initializeMerkleRoot; - bytes32 finalizeMerkleRoot; - bool locked; + bytes32 depositDataMerkleRoot; bool committed; } @@ -37,52 +33,23 @@ interface IPoolValidators { bytes signature; } - /** - * @dev Enum to track status of the validator registration. - * @param Uninitialized - validator has not been initialized. - * @param Initialized - 1 ether deposit has been made to the ETH2 registration contract for the public key. - * @param Finalized - 31 ether deposit has been made to the ETH2 registration contract for the public key. - * @param Failed - 1 ether deposit has failed as it was assigned to the different from the protocol's withdrawal key. - */ - enum ValidatorStatus { Uninitialized, Initialized, Finalized, Failed } - /** * @dev Event for tracking new operators. * @param operator - address of the operator. - * @param initializeMerkleRoot - validators initialization merkle root. - * @param initializeMerkleProofs - validators initialization merkle proofs. - * @param finalizeMerkleRoot - validators finalization merkle root. - * @param finalizeMerkleProofs - validators finalization merkle proofs. + * @param depositDataMerkleRoot - validators deposit data merkle root. + * @param depositDataMerkleProofs - validators deposit data merkle proofs. */ event OperatorAdded( address indexed operator, - bytes32 indexed initializeMerkleRoot, - string initializeMerkleProofs, - bytes32 indexed finalizeMerkleRoot, - string finalizeMerkleProofs + bytes32 indexed depositDataMerkleRoot, + string depositDataMerkleProofs ); /** * @dev Event for tracking operator's commitments. * @param operator - address of the operator that expressed its readiness to host validators. - * @param collateral - collateral amount deposited. */ - event OperatorCommitted( - address indexed operator, - uint256 collateral - ); - - /** - * @dev Event for tracking operator's collateral withdrawals. - * @param operator - address of the operator. - * @param collateralRecipient - address of the collateral recipient. - * @param collateral - amount withdrawn. - */ - event CollateralWithdrawn( - address indexed operator, - address indexed collateralRecipient, - uint256 collateral - ); + event OperatorCommitted(address indexed operator); /** * @dev Event for tracking operators' removals. @@ -94,18 +61,6 @@ interface IPoolValidators { address indexed operator ); - /** - * @dev Event for tracking operators' slashes. - * @param operator - address of the operator. - * @param publicKey - public key of the slashed validator. - * @param refundedAmount - amount refunded to the pool. - */ - event OperatorSlashed( - address indexed operator, - bytes publicKey, - uint256 refundedAmount - ); - /** * @dev Constructor for initializing the PoolValidators contract. * @param _admin - address of the contract admin. @@ -118,48 +73,31 @@ interface IPoolValidators { * @dev Function for retrieving the operator. * @param _operator - address of the operator to retrieve the data for. */ - function getOperator(address _operator) external view returns (bytes32, bytes32, bool); + function getOperator(address _operator) external view returns (bytes32, bool); /** - * @dev Function for retrieving the collateral of the operator. - * @param operator - address of the operator to retrieve the collateral for. - */ - function collaterals(address operator) external view returns (uint256); - - /** - * @dev Function for retrieving registration status of the validator. + * @dev Function for checking whether validator is registered. * @param validatorId - hash of the validator public key to receive the status for. */ - function validatorStatuses(bytes32 validatorId) external view returns (ValidatorStatus); + function isValidatorRegistered(bytes32 validatorId) external view returns (bool); /** * @dev Function for adding new operator. * @param _operator - address of the operator to add or update. - * @param initializeMerkleRoot - validators initialization merkle root. - * @param initializeMerkleProofs - validators initialization merkle proofs. - * @param finalizeMerkleRoot - validators finalization merkle root. - * @param finalizeMerkleProofs - validators finalization merkle proofs. + * @param depositDataMerkleRoot - validators deposit data merkle root. + * @param depositDataMerkleProofs - validators deposit data merkle proofs. */ function addOperator( address _operator, - bytes32 initializeMerkleRoot, - string calldata initializeMerkleProofs, - bytes32 finalizeMerkleRoot, - string calldata finalizeMerkleProofs + bytes32 depositDataMerkleRoot, + string calldata depositDataMerkleProofs ) external; /** - * @dev Function for committing operator. If 1 ETH collateral was not deposited yet, - * it must be sent together with the function call. Must be called by the operator address + * @dev Function for committing operator. Must be called by the operator address * specified through the `addOperator` function call. */ - function commitOperator() external payable; - - /** - * @dev Function for withdrawing operator's collateral. Can only be called when the operator was removed. - * @param collateralRecipient - address of the collateral recipient. - */ - function withdrawCollateral(address payable collateralRecipient) external; + function commitOperator() external; /** * @dev Function for removing operator. Can be called either by operator or admin. @@ -168,23 +106,9 @@ interface IPoolValidators { function removeOperator(address _operator) external; /** - * @dev Function for slashing the operator registration. - * @param depositData - deposit data of the validator to slash. - * @param merkleProof - an array of hashes to verify whether the deposit data is part of the initialize merkle root. - */ - function slashOperator(DepositData calldata depositData, bytes32[] calldata merkleProof) external; - - /** - * @dev Function for initializing the operator. - * @param depositData - deposit data of the validator to initialize. - * @param merkleProof - an array of hashes to verify whether the deposit data is part of the initialize merkle root. - */ - function initializeValidator(DepositData calldata depositData, bytes32[] calldata merkleProof) external; - - /** - * @dev Function for finalizing the operator. - * @param depositData - deposit data of the validator to finalize. - * @param merkleProof - an array of hashes to verify whether the deposit data is part of the finalize merkle root. + * @dev Function for registering the validator. + * @param depositData - deposit data of the validator. + * @param merkleProof - an array of hashes to verify whether the deposit data is part of the merkle root. */ - function finalizeValidator(DepositData calldata depositData, bytes32[] calldata merkleProof) external; + function registerValidator(DepositData calldata depositData, bytes32[] calldata merkleProof) external; } diff --git a/contracts/pool/Pool.sol b/contracts/pool/Pool.sol index d94310ce..0e1c5538 100644 --- a/contracts/pool/Pool.sol +++ b/contracts/pool/Pool.sol @@ -22,9 +22,6 @@ contract Pool is IPool, OwnablePausableUpgradeable { // @dev Validator deposit amount. uint256 public constant override VALIDATOR_TOTAL_DEPOSIT = 32 ether; - // @dev Validator initialization amount. - uint256 public constant override VALIDATOR_INIT_DEPOSIT = 1 ether; - // @dev Total activated validators. uint256 public override activatedValidators; @@ -192,7 +189,7 @@ contract Pool is IPool, OwnablePausableUpgradeable { /** * @dev See {IPool-activate}. */ - function activate(address account, uint256 validatorIndex) external override { + function activate(address account, uint256 validatorIndex) external override whenNotPaused { uint256 activatedAmount = _activateAmount( account, validatorIndex, @@ -205,7 +202,7 @@ contract Pool is IPool, OwnablePausableUpgradeable { /** * @dev See {IPool-activateMultiple}. */ - function activateMultiple(address account, uint256[] calldata validatorIndexes) external override { + function activateMultiple(address account, uint256[] calldata validatorIndexes) external override whenNotPaused { uint256 toMint; uint256 maxValidatorIndex = activatedValidators.mul(pendingValidatorsLimit.add(1e4)); for (uint256 i = 0; i < validatorIndexes.length; i++) { @@ -220,7 +217,7 @@ contract Pool is IPool, OwnablePausableUpgradeable { uint256 validatorIndex, uint256 maxValidatorIndex ) - internal whenNotPaused returns (uint256 amount) + internal returns (uint256 amount) { require(validatorIndex.mul(1e4) <= maxValidatorIndex, "Pool: validator is not active yet"); @@ -232,27 +229,9 @@ contract Pool is IPool, OwnablePausableUpgradeable { } /** - * @dev See {IPool-initializeValidator}. - */ - function initializeValidator(IPoolValidators.DepositData calldata depositData) external override whenNotPaused { - require(msg.sender == address(validators), "Pool: access denied"); - require(depositData.withdrawalCredentials == withdrawalCredentials, "Pool: invalid withdrawal credentials"); - - emit ValidatorInitialized(depositData.publicKey, depositData.operator); - - // initiate validator registration - validatorRegistration.deposit{value : VALIDATOR_INIT_DEPOSIT}( - depositData.publicKey, - abi.encodePacked(depositData.withdrawalCredentials), - depositData.signature, - depositData.depositDataRoot - ); - } - - /** - * @dev See {IPool-finalizeValidator}. + * @dev See {IPool-registerValidator}. */ - function finalizeValidator(IPoolValidators.DepositData calldata depositData) external override whenNotPaused { + function registerValidator(IPoolValidators.DepositData calldata depositData) external override whenNotPaused { require(msg.sender == address(validators), "Pool: access denied"); require(depositData.withdrawalCredentials == withdrawalCredentials, "Pool: invalid withdrawal credentials"); @@ -260,8 +239,8 @@ contract Pool is IPool, OwnablePausableUpgradeable { pendingValidators = pendingValidators.add(1); emit ValidatorRegistered(depositData.publicKey, depositData.operator); - // finalize validator registration - validatorRegistration.deposit{value : VALIDATOR_TOTAL_DEPOSIT.sub(VALIDATOR_INIT_DEPOSIT)}( + // register validator + validatorRegistration.deposit{value : VALIDATOR_TOTAL_DEPOSIT}( depositData.publicKey, abi.encodePacked(depositData.withdrawalCredentials), depositData.signature, diff --git a/contracts/pool/PoolValidators.sol b/contracts/pool/PoolValidators.sol index 7080d516..5ba4dd5b 100644 --- a/contracts/pool/PoolValidators.sol +++ b/contracts/pool/PoolValidators.sol @@ -16,15 +16,12 @@ import "../interfaces/IPool.sol"; * * @dev PoolValidators contract keeps track of the pool validators' deposit data and onboards new operators. */ -contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, ReentrancyGuardUpgradeable { +contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, ReentrancyGuardUpgradeable { using AddressUpgradeable for address payable; using SafeMathUpgradeable for uint256; - // Maps hash of the validator public key to its registration status. - mapping(bytes32 => ValidatorStatus) public override validatorStatuses; - - // Maps operator address to its collateral deposit. - mapping(address => uint256) public override collaterals; + // Maps hash of the validator public key to whether it is registered. + mapping(bytes32 => bool) public override isValidatorRegistered; // Maps operator address to its data. mapping(address => Operator) private operators; @@ -51,12 +48,11 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran /** * @dev See {IPoolValidators-getOperator}. */ - function getOperator(address _operator) external view override returns (bytes32, bytes32, bool) { + function getOperator(address _operator) external view override returns (bytes32, bool) { Operator storage operator = operators[_operator]; return ( - operator.initializeMerkleRoot, - operator.finalizeMerkleRoot, - operator.locked + operator.depositDataMerkleRoot, + operator.committed ); } @@ -65,83 +61,41 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran */ function addOperator( address _operator, - bytes32 initializeMerkleRoot, - string calldata initializeMerkleProofs, - bytes32 finalizeMerkleRoot, - string calldata finalizeMerkleProofs + bytes32 depositDataMerkleRoot, + string calldata depositDataMerkleProofs ) external override onlyAdmin whenNotPaused { require(_operator != address(0), "PoolValidators: invalid operator"); - // merkle roots and proofs must be validated off chain before submitting the transaction - require( - initializeMerkleRoot != "" && finalizeMerkleRoot != "" && finalizeMerkleRoot != initializeMerkleRoot, - "PoolValidators: invalid merkle roots" - ); - require( - bytes(initializeMerkleProofs).length != 0 && bytes(finalizeMerkleProofs).length != 0 && - keccak256(bytes(initializeMerkleProofs)) != keccak256(bytes(finalizeMerkleProofs)), - "PoolValidators: invalid merkle proofs" - ); + // merkle root and proofs must be validated off chain prior submitting the transaction + require(depositDataMerkleRoot != "", "PoolValidators: invalid merkle root"); + require(bytes(depositDataMerkleProofs).length != 0, "PoolValidators: invalid merkle proofs"); // load operator Operator storage operator = operators[_operator]; - require(!operator.locked, "PoolValidators: operator locked"); - require(operator.initializeMerkleRoot != initializeMerkleRoot, "PoolValidators: same initialize merkle root"); - require(operator.finalizeMerkleRoot != finalizeMerkleRoot, "PoolValidators: same finalize merkle root"); + require(operator.depositDataMerkleRoot != depositDataMerkleRoot, "PoolValidators: same merkle root"); // update operator - operator.initializeMerkleRoot = initializeMerkleRoot; - operator.finalizeMerkleRoot = finalizeMerkleRoot; + operator.depositDataMerkleRoot = depositDataMerkleRoot; operator.committed = false; emit OperatorAdded( _operator, - initializeMerkleRoot, - initializeMerkleProofs, - finalizeMerkleRoot, - finalizeMerkleProofs + depositDataMerkleRoot, + depositDataMerkleProofs ); } /** * @dev See {IPoolValidators-commitOperator}. */ - function commitOperator() external payable override whenNotPaused { + function commitOperator() external override whenNotPaused { // mark operator as committed Operator storage operator = operators[msg.sender]; - require(operator.initializeMerkleRoot != "" && !operator.committed, "PoolValidators: invalid operator"); + require(operator.depositDataMerkleRoot != "" && !operator.committed, "PoolValidators: invalid operator"); operator.committed = true; - uint256 newCollateral = collaterals[msg.sender].add(msg.value); - require(newCollateral >= pool.VALIDATOR_INIT_DEPOSIT(), "PoolValidators: invalid collateral"); - - // update collateral - collaterals[msg.sender] = newCollateral; - - emit OperatorCommitted(msg.sender, msg.value); - } - - /** - * @dev See {IPoolValidators-withdrawCollateral}. - */ - function withdrawCollateral(address payable collateralRecipient) external override nonReentrant whenNotPaused { - require(collateralRecipient != address(0), "PoolValidators: invalid collateral recipient"); - - // load operator - Operator storage operator = operators[msg.sender]; - require(operator.initializeMerkleRoot == "", "PoolValidators: operator exists"); - - uint256 collateral = collaterals[msg.sender]; - require(collateral > 0, "PoolValidators: collateral does not exist"); - - // remove collateral - delete collaterals[msg.sender]; - - // withdraw amount - collateralRecipient.sendValue(collateral); - - emit CollateralWithdrawn(msg.sender, collateralRecipient, collateral); + emit OperatorCommitted(msg.sender); } /** @@ -151,8 +105,7 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender) || msg.sender == _operator, "PoolValidators: access denied"); Operator storage operator = operators[_operator]; - require(operator.initializeMerkleRoot != "", "PoolValidators: invalid operator"); - require(!operator.locked, "PoolValidators: operator is locked"); + require(operator.depositDataMerkleRoot != "", "PoolValidators: invalid operator"); // clean up operator delete operators[_operator]; @@ -161,81 +114,20 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran } /** - * @dev See {IPoolValidators-slashOperator}. - */ - function slashOperator(DepositData calldata depositData, bytes32[] calldata merkleProof) external override onlyAdmin whenNotPaused { - // fetch operator - Operator storage operator = operators[depositData.operator]; - bytes32 initializeMerkleRoot = operator.initializeMerkleRoot; - require(initializeMerkleRoot != "" && operator.locked, "PoolValidators: invalid operator"); - - // check whether provided deposit data was previously approved - bytes32 node = keccak256(abi.encode( - depositData.publicKey, - depositData.withdrawalCredentials, - depositData.signature, - depositData.depositDataRoot - )); - require( - MerkleProofUpgradeable.verify(merkleProof, initializeMerkleRoot, node), - "PoolValidators: invalid merkle proof" - ); - - uint256 refundAmount = pool.VALIDATOR_INIT_DEPOSIT(); - uint256 operatorCollateral = collaterals[depositData.operator]; - if (refundAmount > operatorCollateral) { - refundAmount = operatorCollateral; - } - - // mark validator as slashed - bytes32 validatorId = keccak256(abi.encode(depositData.publicKey)); - require( - validatorStatuses[validatorId] == ValidatorStatus.Initialized, - "PoolValidators: invalid validator status" - ); - validatorStatuses[validatorId] = ValidatorStatus.Failed; - - // remove operator to prevent further validator assignments - delete operators[depositData.operator]; - - // reduce operator's collateral - collaterals[depositData.operator] = operatorCollateral.sub(refundAmount); - - // refund to pool - pool.refund{value : refundAmount}(); - emit OperatorSlashed(depositData.operator, depositData.publicKey, refundAmount); - } - - /** - * @dev See {IPoolValidators-initializeValidator}. + * @dev See {IPoolValidators-registerValidator}. */ - function initializeValidator(DepositData calldata depositData, bytes32[] calldata merkleProof) external override { + function registerValidator(DepositData calldata depositData, bytes32[] calldata merkleProof) external override { require(msg.sender == oracles, "PoolValidators: access denied"); - // mark validator as initialized -> prevents from initializing the same validator twice + // mark validator as registered -> prevents from registering the same validator twice bytes32 validatorId = keccak256(abi.encode(depositData.publicKey)); - require( - validatorStatuses[validatorId] == ValidatorStatus.Uninitialized, - "PoolValidators: invalid validator status" - ); - validatorStatuses[validatorId] = ValidatorStatus.Initialized; + require(!isValidatorRegistered[validatorId], "PoolValidators: validator already registered"); + isValidatorRegistered[validatorId] = true; - // fetch operator + // fetch deposit data merkle root Operator storage operator = operators[depositData.operator]; - ( - bytes32 initializeMerkleRoot, - bool locked, - bool committed - ) = ( - operator.initializeMerkleRoot, - operator.locked, - operator.committed - ); - require(committed, "PoolValidators: operator not committed"); - require( - collaterals[depositData.operator] >= pool.VALIDATOR_INIT_DEPOSIT(), - "PoolValidators: invalid operator collateral" - ); + bytes32 depositDataMerkleRoot = operator.depositDataMerkleRoot; + require(depositDataMerkleRoot != "" && operator.committed, "PoolValidators: invalid operator"); // check whether provided deposit data was previously approved bytes32 node = keccak256(abi.encode( @@ -245,55 +137,11 @@ contract PoolValidators is IPoolValidators, OwnablePausableUpgradeable, Reentran depositData.depositDataRoot )); require( - MerkleProofUpgradeable.verify(merkleProof, initializeMerkleRoot, node), + MerkleProofUpgradeable.verify(merkleProof, depositDataMerkleRoot, node), "PoolValidators: invalid merkle proof" ); - // lock operator -> prevents from initializing multiple validators - // for the same operator without finalizing them - require(!locked, "PoolValidators: operator already locked"); - operator.locked = true; - - // initialize validator - pool.initializeValidator(depositData); - } - - /** - * @dev See {IPoolValidators-finalizeValidator}. - */ - function finalizeValidator(DepositData calldata depositData, bytes32[] calldata merkleProof) external override { - require(msg.sender == oracles, "PoolValidators: access denied"); - - // mark validator as finalized -> prevents from finalizing the same validator twice - bytes32 validatorId = keccak256(abi.encode(depositData.publicKey)); - require( - validatorStatuses[validatorId] == ValidatorStatus.Initialized, - "PoolValidators: invalid validator status" - ); - validatorStatuses[validatorId] = ValidatorStatus.Finalized; - - // fetch operator - Operator storage operator = operators[depositData.operator]; - (bytes32 finalizeMerkleRoot, bool locked) = (operator.finalizeMerkleRoot, operator.locked); - require(finalizeMerkleRoot != "", "PoolValidators: invalid operator"); - - // check whether provided deposit data was previously approved - bytes32 node = keccak256(abi.encode( - depositData.publicKey, - depositData.withdrawalCredentials, - depositData.signature, - depositData.depositDataRoot - )); - require( - MerkleProofUpgradeable.verify(merkleProof, finalizeMerkleRoot, node), - "PoolValidators: invalid merkle proof" - ); - - // unlock operator to be able to receive further validators - require(locked, "PoolValidators: operator not locked"); - operator.locked = false; - - // finalize validator - pool.finalizeValidator(depositData); + // register validator + pool.registerValidator(depositData); } } diff --git a/deployments/index.js b/deployments/index.js index b44236b9..9e1c98b4 100644 --- a/deployments/index.js +++ b/deployments/index.js @@ -39,7 +39,7 @@ async function deployAndInitializeOracles(poolValidatorsContractAddress) { Oracles, [ contractSettings.admin, - contracts.oracles, + contracts.prevOracles, contracts.rewardEthToken, contracts.pool, poolValidatorsContractAddress, @@ -202,16 +202,23 @@ async function deployContracts() { } async function upgradeContracts() { - await upgradeMerkleDistributor(contracts.oracles); + const { poolValidators, oracles, roles } = await deployContracts(); + + await upgradeMerkleDistributor(oracles); log(white('Upgraded MerkleDistributor contract')); - await upgradePool(contracts.poolValidators, contracts.oracles); + await upgradePool(poolValidators, oracles); log(white('Upgraded Pool contract')); - await upgradeRewardEthToken(contracts.oracles); + await upgradeRewardEthToken(oracles); log(white('Upgraded RewardEthToken contract')); - return contracts; + return { + ...contracts, + poolValidators, + oracles, + roles, + }; } module.exports = { diff --git a/deployments/settings.js b/deployments/settings.js index 8165676d..6836374a 100644 --- a/deployments/settings.js +++ b/deployments/settings.js @@ -25,9 +25,7 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { } else { contracts = { prevOracles: '0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514', - oracles: '0xE949060ACE386D5e277De217703B17A2547f24C0', pool: '0xC874b064f465bdD6411D45734b56fac750Cda29A', - poolValidators: '0x0e75786cB831bEE6d4484031Af12490Ab528c770', poolEscrow: '0x2296e122c1a20Fca3CAc3371357BdAd3be0dF079', stakedEthToken: '0xFe2e637202056d30016725477c5da089Ab0A043A', rewardEthToken: '0x20BC832ca081b91433ff6c17f85701B6e92486c5', @@ -35,7 +33,6 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { vestingEscrowFactory: '0x7B910cc3D4B42FEFF056218bD56d7700E4ea7dD5', merkleDrop: '0x2AAB6822a1a9f982fd7b0Fe35A5A5b6148eCf4d5', merkleDistributor: '0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20', - roles: '0xC486c10e3611565F5b38b50ad68277b11C889623', contractChecker: '0xFC1fC7257AEA7C7c08A498594DCA97CE5A72fdCB', proxyAdmin: '0x3EB0175dcD67d3AB139aA03165e24AA2188A4C22', }; diff --git a/hardhat.config.js b/hardhat.config.js index d02ca7e2..1c2efe70 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -145,6 +145,6 @@ module.exports = { apiKey: 'api key goes here', }, mocha: { - timeout: 4000, + timeout: 20000, }, }; diff --git a/test/Proxies.test.js b/test/Proxies.test.js index 3efb7e8d..0f92b5cc 100644 --- a/test/Proxies.test.js +++ b/test/Proxies.test.js @@ -2,27 +2,21 @@ const hre = require('hardhat'); const { contractSettings, contracts } = require('../deployments/settings'); let proxies = [ - contracts.oracles, contracts.pool, - contracts.poolValidators, contracts.stakedEthToken, contracts.rewardEthToken, contracts.stakeWiseToken, contracts.vestingEscrowFactory, contracts.merkleDistributor, - contracts.roles, ]; let implementations = [ - '0x1cFcF1893326844270ec077fe996C785EFDed4B1', '0xc8970E7C07c251625F9F93cE510b1D9c1a08d299', - '0xD420f9BE4cd6c96993fd940EF13110746AE48abC', '0x41bcac23e4db058d8D7aAbE2Fccdae5F01FE647A', '0x610B58583642610967727fe4fadd125a92D6F678', '0xA28C2d79f0c5B78CeC699DAB0303008179815396', '0xbeE3Eb97Cfd94ace6B66E606B8088C57c5f78fBf', '0x459beef3c5Bd5D1E66de93AC908E278ee2488F14', - '0x584E5D4bD0AE1EEF838796aEe8fb805BbB82439C', ]; contract('Proxies', () => { diff --git a/test/oracles/Oracles.test.js b/test/oracles/Oracles.test.js index f1869239..9758dc85 100644 --- a/test/oracles/Oracles.test.js +++ b/test/oracles/Oracles.test.js @@ -16,16 +16,22 @@ const { } = require('../utils'); const { contractSettings, contracts } = require('../../deployments/settings'); const { upgradeContracts } = require('../../deployments'); +const { + depositDataMerkleRoot, + depositData, +} = require('../pool/depositDataMerkleRoot'); const RewardEthToken = artifacts.require('RewardEthToken'); const Oracles = artifacts.require('Oracles'); const Pool = artifacts.require('Pool'); const MulticallMock = artifacts.require('MulticallMock'); const MerkleDistributor = artifacts.require('MerkleDistributor'); +const PoolValidators = artifacts.require('PoolValidators'); +const iDepositContract = artifacts.require('IDepositContract'); -contract('Oracles', ([_, anyone, ...accounts]) => { +contract('Oracles', ([_, anyone, operator, ...accounts]) => { let admin = contractSettings.admin; - let oracles, rewardEthToken, pool, merkleDistributor; + let oracles, rewardEthToken, pool, merkleDistributor, poolValidators; let [oracle, anotherOracle] = accounts; after(async () => stopImpersonatingAccount(admin)); @@ -40,6 +46,7 @@ contract('Oracles', ([_, anyone, ...accounts]) => { pool = await Pool.at(contracts.pool); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); merkleDistributor = await MerkleDistributor.at(contracts.merkleDistributor); + poolValidators = await PoolValidators.at(upgradedContracts.poolValidators); }); afterEach(async () => resetFork()); @@ -464,4 +471,136 @@ contract('Oracles', ([_, anyone, ...accounts]) => { ); }); }); + + describe('validator voting', () => { + const depositDataMerkleProofs = + 'ipfs://QmehR8yCaKdHqHSxZMSJA5q2SWc8jTVCSKuVgbtqDEdXCH'; + let { + publicKey, + signature, + depositDataRoot, + withdrawalCredentials, + merkleProof, + } = depositData[0]; + let currentNonce, oracleAccounts, candidateId, signatures, validatorsCount; + let validatorData = { + operator, + withdrawalCredentials, + depositDataRoot, + publicKey, + signature, + }; + + beforeEach(async () => { + await poolValidators.addOperator( + operator, + depositDataMerkleRoot, + depositDataMerkleProofs, + { + from: admin, + } + ); + await poolValidators.commitOperator({ + from: operator, + }); + oracleAccounts = await setupOracleAccounts({ oracles, accounts, admin }); + currentNonce = await oracles.currentValidatorsNonce(); + + let depositContract = await iDepositContract.at( + await pool.validatorRegistration() + ); + validatorsCount = keccak256(await depositContract.get_deposit_count()); + + let encoded = defaultAbiCoder.encode( + ['uint256', 'bytes', 'address', 'bytes32'], + [currentNonce.toString(), publicKey, operator, validatorsCount] + ); + candidateId = keccak256(encoded); + + signatures = []; + for (const oracleAccount of oracleAccounts) { + signatures.push(await web3.eth.sign(candidateId, oracleAccount)); + } + }); + + it('fails to submit when contract is paused', async () => { + await oracles.pause({ from: admin }); + expect(await oracles.paused()).equal(true); + + await expectRevert( + oracles.registerValidator( + validatorData, + merkleProof, + validatorsCount, + signatures, + { + from: oracleAccounts[0], + } + ), + 'Pausable: paused' + ); + }); + + it('fails to submit with not enough signatures', async () => { + await expectRevert( + oracles.registerValidator( + validatorData, + merkleProof, + validatorsCount, + signatures.slice(signatures.length - 1), + { + from: oracleAccounts[0], + } + ), + 'Oracles: invalid number of signatures' + ); + }); + + it('fails to submit with invalid signature', async () => { + signatures[0] = await web3.eth.sign(candidateId, anyone); + await expectRevert( + oracles.registerValidator( + validatorData, + merkleProof, + validatorsCount, + signatures, + { + from: oracleAccounts[0], + } + ), + 'Oracles: invalid signer' + ); + }); + + it('fails to submit with repeated signature', async () => { + signatures.push(signatures[0]); + await expectRevert( + oracles.registerValidator( + validatorData, + merkleProof, + validatorsCount, + signatures, + { + from: oracleAccounts[0], + } + ), + 'Oracles: repeated signature' + ); + }); + + it('fails to submit without oracle role assigned', async () => { + await expectRevert( + oracles.registerValidator( + validatorData, + merkleProof, + validatorsCount, + signatures, + { + from: anyone, + } + ), + 'Oracles: access denied' + ); + }); + }); }); diff --git a/test/oracles/upgrading.test.js b/test/oracles/upgrading.test.js index 3b378fc4..be1e6aae 100644 --- a/test/oracles/upgrading.test.js +++ b/test/oracles/upgrading.test.js @@ -31,7 +31,8 @@ contract('Oracles (upgrading)', ([anyone]) => { (await oracles.currentRewardsNonce()).sub(new BN('1000')) ); - prevOracles = await Oracles.at(contracts.oracles); + // use Oracles abi for prevOracles contract + prevOracles = await Oracles.at(contracts.prevOracles); let oraclesRole = await oracles.ORACLE_ROLE(); let totalOracles = await oracles.getRoleMemberCount(oraclesRole); expect(totalOracles).to.bignumber.equal( diff --git a/test/pool/PoolValidators.test.js b/test/pool/PoolValidators.test.js index f47f90b8..b13af787 100644 --- a/test/pool/PoolValidators.test.js +++ b/test/pool/PoolValidators.test.js @@ -1,5 +1,4 @@ const { - BN, expectRevert, expectEvent, ether, @@ -10,10 +9,8 @@ const { const { keccak256, defaultAbiCoder } = require('ethers/lib/utils'); const { upgradeContracts } = require('../../deployments'); const { contractSettings, contracts } = require('../../deployments/settings'); -const { vrcAbi } = require('../../deployments/vrc'); const { - initializeValidator, - finalizeValidator, + registerValidator, setupOracleAccounts, stopImpersonatingAccount, impersonateAccount, @@ -21,35 +18,29 @@ const { checkValidatorRegistered, } = require('../utils'); const { - initializeData, - initializeMerkleRoot, -} = require('./initializeMerkleRoot'); -const { finalizeData, finalizeMerkleRoot } = require('./finalizeMerkleRoot'); + depositData, + depositDataMerkleRoot, +} = require('./depositDataMerkleRoot'); const Pool = artifacts.require('Pool'); const PoolValidators = artifacts.require('PoolValidators'); const Oracles = artifacts.require('Oracles'); +const iDepositContract = artifacts.require('IDepositContract'); contract('Pool Validators', (accounts) => { const admin = contractSettings.admin; const validatorDeposit = ether('32'); - const initializeMerkleProofs = - 'ipfs://QmSYduvpsJp7bo3xenRK3qDdoLkzWcvVeU3U16v1n3Cb5d'; - const finalizeMerkleProofs = + const depositDataMerkleProofs = 'ipfs://QmSTP443zR6oKnYVRE23RARyuuzwhhaidUiSXyRTsw3pDs'; let pool, validators, - vrc, - initAmount, - finalizeAmount, + validatorDepositAmount, oracleAccounts, - oracles; + oracles, + depositContract, + validatorsCount; let [operator, anyone, ...otherAccounts] = accounts; - before(async () => { - vrc = new web3.eth.Contract(vrcAbi, contractSettings.VRC); - }); - after(async () => stopImpersonatingAccount(admin)); beforeEach(async () => { @@ -58,8 +49,11 @@ contract('Pool Validators', (accounts) => { let upgradedContracts = await upgradeContracts(); pool = await Pool.at(contracts.pool); - initAmount = await pool.VALIDATOR_INIT_DEPOSIT(); - finalizeAmount = (await pool.VALIDATOR_TOTAL_DEPOSIT()).sub(initAmount); + depositContract = await iDepositContract.at( + await pool.validatorRegistration() + ); + validatorDepositAmount = await pool.VALIDATOR_TOTAL_DEPOSIT(); + validatorsCount = keccak256(await depositContract.get_deposit_count()); validators = await PoolValidators.at(upgradedContracts.poolValidators); @@ -86,10 +80,8 @@ contract('Pool Validators', (accounts) => { await expectRevert( validators.addOperator( operator, - initializeMerkleRoot, - initializeMerkleProofs, - finalizeMerkleRoot, - finalizeMerkleProofs, + depositDataMerkleRoot, + depositDataMerkleProofs, { from: anyone, } @@ -102,10 +94,8 @@ contract('Pool Validators', (accounts) => { await expectRevert( validators.addOperator( constants.ZERO_ADDRESS, - initializeMerkleRoot, - initializeMerkleProofs, - finalizeMerkleRoot, - finalizeMerkleProofs, + depositDataMerkleRoot, + depositDataMerkleProofs, { from: admin, } @@ -114,171 +104,46 @@ contract('Pool Validators', (accounts) => { ); }); - it('fails to add with invalid merkle roots', async () => { - await expectRevert( - validators.addOperator( - operator, - constants.ZERO_BYTES32, - initializeMerkleProofs, - finalizeMerkleRoot, - finalizeMerkleProofs, - { - from: admin, - } - ), - 'PoolValidators: invalid merkle roots' - ); + it('fails to add with invalid merkle root', async () => { await expectRevert( validators.addOperator( operator, - initializeMerkleRoot, - initializeMerkleProofs, constants.ZERO_BYTES32, - finalizeMerkleProofs, + depositDataMerkleProofs, { from: admin, } ), - 'PoolValidators: invalid merkle roots' - ); - - // same merkle roots - await expectRevert( - validators.addOperator( - operator, - initializeMerkleRoot, - initializeMerkleProofs, - initializeMerkleRoot, - finalizeMerkleProofs, - { - from: admin, - } - ), - 'PoolValidators: invalid merkle roots' + 'PoolValidators: invalid merkle root' ); }); it('fails to add with invalid merkle proofs', async () => { await expectRevert( - validators.addOperator( - operator, - initializeMerkleRoot, - '', - finalizeMerkleRoot, - finalizeMerkleProofs, - { - from: admin, - } - ), - 'PoolValidators: invalid merkle proofs' - ); - await expectRevert( - validators.addOperator( - operator, - initializeMerkleRoot, - initializeMerkleProofs, - finalizeMerkleRoot, - '', - { - from: admin, - } - ), - 'PoolValidators: invalid merkle proofs' - ); - - // same merkle roots - await expectRevert( - validators.addOperator( - operator, - initializeMerkleRoot, - initializeMerkleProofs, - finalizeMerkleRoot, - initializeMerkleProofs, - { - from: admin, - } - ), - 'PoolValidators: invalid merkle proofs' - ); - }); - - it('fails to update with locked operator', async () => { - await validators.addOperator( - operator, - initializeMerkleRoot, - initializeMerkleProofs, - finalizeMerkleRoot, - finalizeMerkleProofs, - { + validators.addOperator(operator, depositDataMerkleRoot, '', { from: admin, - } - ); - - await validators.commitOperator({ - value: initAmount, - from: operator, - }); - - let { - publicKey, - signature, - withdrawalCredentials, - merkleProof, - depositDataRoot, - } = initializeData[0]; - await initializeValidator({ - operator, - merkleProof, - signature, - publicKey, - depositDataRoot, - oracles, - oracleAccounts, - withdrawalCredentials, - }); - - let initializeMerkleRoot2 = - '0x2a6d4eed3ba81bd99efdfd31333e244bb84989cfadbf9ddbf8fabd7296099bc0'; - let finalizeMerkleRoot2 = - '0xd7a7db4c225d87bb434aa5348ddc690f01c553fec86869383af30aa83b5b1d87'; - await expectRevert( - validators.addOperator( - operator, - initializeMerkleRoot2, - initializeMerkleProofs, - finalizeMerkleRoot2, - finalizeMerkleProofs, - { - from: admin, - } - ), - 'PoolValidators: operator locked' + }), + 'PoolValidators: invalid merkle proofs' ); }); it('can update existing operator', async () => { await validators.addOperator( operator, - initializeMerkleRoot, - initializeMerkleProofs, - finalizeMerkleRoot, - finalizeMerkleProofs, + depositDataMerkleRoot, + depositDataMerkleProofs, { from: admin, } ); - let initializeMerkleRoot2 = + let depositDataMerkleRoot2 = '0x2a6d4eed3ba81bd99efdfd31333e244bb84989cfadbf9ddbf8fabd7296099bc0'; - let finalizeMerkleRoot2 = - '0xd7a7db4c225d87bb434aa5348ddc690f01c553fec86869383af30aa83b5b1d87'; let receipt = await validators.addOperator( operator, - initializeMerkleRoot2, - initializeMerkleProofs, - finalizeMerkleRoot2, - finalizeMerkleProofs, + depositDataMerkleRoot2, + depositDataMerkleProofs, { from: admin, } @@ -286,25 +151,20 @@ contract('Pool Validators', (accounts) => { await expectEvent(receipt, 'OperatorAdded', { operator, - initializeMerkleRoot: initializeMerkleRoot2, - initializeMerkleProofs, - finalizeMerkleRoot: finalizeMerkleRoot2, - finalizeMerkleProofs, + depositDataMerkleRoot: depositDataMerkleRoot2, + depositDataMerkleProofs, }); let _operator = await validators.getOperator(operator); - expect(_operator[0]).to.equal(initializeMerkleRoot2); - expect(_operator[1]).to.equal(finalizeMerkleRoot2); - expect(_operator[2]).to.equal(false); + expect(_operator[0]).to.equal(depositDataMerkleRoot2); + expect(_operator[1]).to.equal(false); }); it('can add new operator', async () => { let receipt = await validators.addOperator( operator, - initializeMerkleRoot, - initializeMerkleProofs, - finalizeMerkleRoot, - finalizeMerkleProofs, + depositDataMerkleRoot, + depositDataMerkleProofs, { from: admin, } @@ -312,16 +172,13 @@ contract('Pool Validators', (accounts) => { await expectEvent(receipt, 'OperatorAdded', { operator, - initializeMerkleRoot, - initializeMerkleProofs, - finalizeMerkleRoot, - finalizeMerkleProofs, + depositDataMerkleRoot, + depositDataMerkleProofs, }); let _operator = await validators.getOperator(operator); - expect(_operator[0]).to.equal(initializeMerkleRoot); - expect(_operator[1]).to.equal(finalizeMerkleRoot); - expect(_operator[2]).to.equal(false); + expect(_operator[0]).to.equal(depositDataMerkleRoot); + expect(_operator[1]).to.equal(false); }); }); @@ -329,10 +186,8 @@ contract('Pool Validators', (accounts) => { beforeEach(async () => { await validators.addOperator( operator, - initializeMerkleRoot, - initializeMerkleProofs, - finalizeMerkleRoot, - finalizeMerkleProofs, + depositDataMerkleRoot, + depositDataMerkleProofs, { from: admin, } @@ -357,38 +212,6 @@ contract('Pool Validators', (accounts) => { ); }); - it('fails to remove locked operator', async () => { - await validators.commitOperator({ - value: initAmount, - from: operator, - }); - - let { - publicKey, - signature, - withdrawalCredentials, - merkleProof, - depositDataRoot, - } = initializeData[0]; - await initializeValidator({ - operator, - merkleProof, - signature, - publicKey, - depositDataRoot, - oracles, - oracleAccounts, - withdrawalCredentials, - }); - - await expectRevert( - validators.removeOperator(operator, { - from: admin, - }), - 'PoolValidators: operator is locked' - ); - }); - it('operator or admin can remove operator', async () => { let receipt = await validators.removeOperator(operator, { from: admin, @@ -401,8 +224,7 @@ contract('Pool Validators', (accounts) => { let _operator = await validators.getOperator(operator); expect(_operator[0]).to.equal(constants.ZERO_BYTES32); - expect(_operator[1]).to.equal(constants.ZERO_BYTES32); - expect(_operator[2]).to.equal(false); + expect(_operator[1]).to.equal(false); }); }); @@ -410,10 +232,8 @@ contract('Pool Validators', (accounts) => { beforeEach(async () => { await validators.addOperator( operator, - initializeMerkleRoot, - initializeMerkleProofs, - finalizeMerkleRoot, - finalizeMerkleProofs, + depositDataMerkleRoot, + depositDataMerkleProofs, { from: admin, } @@ -423,7 +243,6 @@ contract('Pool Validators', (accounts) => { it('fails to commit invalid operator', async () => { await expectRevert( validators.commitOperator({ - value: initAmount, from: anyone, }), 'PoolValidators: invalid operator' @@ -432,143 +251,50 @@ contract('Pool Validators', (accounts) => { it('fails to commit operator twice', async () => { await validators.commitOperator({ - value: initAmount, from: operator, }); await expectRevert( validators.commitOperator({ - value: initAmount, from: operator, }), 'PoolValidators: invalid operator' ); }); - it('fails to commit with invalid collateral value', async () => { - await expectRevert( - validators.commitOperator({ - value: initAmount.sub(new BN(1)), - from: operator, - }), - 'PoolValidators: invalid collateral' - ); - }); - it('can commit operator', async () => { let receipt = await validators.commitOperator({ - value: initAmount, from: operator, }); await expectEvent(receipt, 'OperatorCommitted', { operator, - collateral: initAmount, }); - - let collateral = await validators.collaterals(operator); - expect(collateral).to.bignumber.equal(initAmount); }); }); - describe('withdraw collateral', () => { - const collateralRecipient = otherAccounts[0]; - beforeEach(async () => { - await validators.addOperator( - operator, - initializeMerkleRoot, - initializeMerkleProofs, - finalizeMerkleRoot, - finalizeMerkleProofs, - { - from: admin, - } - ); - await validators.commitOperator({ - value: initAmount, - from: operator, - }); - }); - - it('fails to withdraw with zero recipient address', async () => { - await expectRevert( - validators.withdrawCollateral(constants.ZERO_ADDRESS, { - from: operator, - }), - 'PoolValidators: invalid collateral recipient' - ); - }); - - it('fails to withdraw for the existing operator', async () => { - await expectRevert( - validators.withdrawCollateral(collateralRecipient, { - from: operator, - }), - 'PoolValidators: operator exists' - ); - }); - - it('fails to withdraw twice', async () => { - await validators.removeOperator(operator, { from: operator }); - await validators.withdrawCollateral(collateralRecipient, { - from: operator, - }); - await expectRevert( - validators.withdrawCollateral(collateralRecipient, { - from: operator, - }), - 'PoolValidators: collateral does not exist' - ); - }); - - it('operator can withdraw collateral', async () => { - await validators.removeOperator(operator, { from: admin }); - let currentBalance = await balance.current(collateralRecipient); - let receipt = await validators.withdrawCollateral(collateralRecipient, { - from: operator, - }); - - await expectEvent(receipt, 'CollateralWithdrawn', { - operator, - collateralRecipient, - collateral: initAmount, - }); - - let collateral = await validators.collaterals(operator); - expect(collateral).to.bignumber.equal(new BN(0)); - expect(await balance.current(collateralRecipient)).to.bignumber.equal( - currentBalance.add(initAmount) - ); - }); - }); - - describe('slash operator', () => { + describe('register validator', () => { let { publicKey, signature, withdrawalCredentials, merkleProof, depositDataRoot, - } = initializeData[0]; + } = depositData[0]; + beforeEach(async () => { await validators.addOperator( operator, - initializeMerkleRoot, - initializeMerkleProofs, - finalizeMerkleRoot, - finalizeMerkleProofs, + depositDataMerkleRoot, + depositDataMerkleProofs, { from: admin, } ); - await validators.commitOperator({ - value: initAmount, - from: operator, - }); }); - it('fails to slash by user other than admin', async () => { + it('fails to register validator by not oracles', async () => { await expectRevert( - validators.slashOperator( + validators.registerValidator( { operator, withdrawalCredentials, @@ -581,267 +307,85 @@ contract('Pool Validators', (accounts) => { from: anyone, } ), - 'OwnablePausable: access denied' - ); - }); - - it('fails to slash not locked operator', async () => { - await expectRevert( - validators.slashOperator( - { - operator, - withdrawalCredentials, - depositDataRoot, - publicKey, - signature, - }, - merkleProof, - { - from: admin, - } - ), - 'PoolValidators: invalid operator' - ); - }); - - it('fails to slash not added operator', async () => { - await expectRevert( - validators.slashOperator( - { - operator: anyone, - withdrawalCredentials, - depositDataRoot, - publicKey, - signature, - }, - merkleProof, - { - from: admin, - } - ), - 'PoolValidators: invalid operator' - ); - }); - - it('fails to slash operator with invalid deposit data', async () => { - await initializeValidator({ - operator, - merkleProof, - signature, - publicKey, - depositDataRoot, - oracles, - oracleAccounts, - withdrawalCredentials, - }); - await expectRevert( - validators.slashOperator( - { - operator, - withdrawalCredentials, - depositDataRoot: constants.ZERO_BYTES32, - publicKey, - signature, - }, - merkleProof, - { - from: admin, - } - ), - 'PoolValidators: invalid merkle proof' + 'PoolValidators: access denied' ); }); - it('fails to slash operator with invalid validator status', async () => { - await initializeValidator({ - operator, - merkleProof, - signature, - publicKey, - depositDataRoot, - oracles, - oracleAccounts, - withdrawalCredentials, - }); + it('fails to register validator for not committed operator', async () => { await expectRevert( - validators.slashOperator( - { - operator, - withdrawalCredentials: initializeData[1].withdrawalCredentials, - depositDataRoot: initializeData[1].depositDataRoot, - publicKey: initializeData[1].publicKey, - signature: initializeData[1].signature, - }, - initializeData[1].merkleProof, - { - from: admin, - } - ), - 'PoolValidators: invalid validator status' - ); - }); - - it('admin can slash operator', async () => { - let poolBalance = await balance.current(pool.address); - await initializeValidator({ - operator, - merkleProof, - signature, - publicKey, - depositDataRoot, - oracles, - oracleAccounts, - withdrawalCredentials, - }); - expect(await balance.current(pool.address)).to.bignumber.equal( - poolBalance.sub(initAmount) - ); - - let receipt = await validators.slashOperator( - { + registerValidator({ operator, - withdrawalCredentials, - depositDataRoot, - publicKey, - signature, - }, - merkleProof, - { - from: admin, - } - ); - - await expectEvent(receipt, 'OperatorSlashed', { - operator, - publicKey, - refundedAmount: initAmount, - }); - - let _operator = await validators.getOperator(operator); - expect(_operator[0]).to.equal(constants.ZERO_BYTES32); - expect(_operator[1]).to.equal(constants.ZERO_BYTES32); - expect(_operator[2]).to.equal(false); - expect(await balance.current(pool.address)).to.bignumber.equal( - poolBalance - ); - }); - }); - - describe('initialize validator', () => { - let { - publicKey, - signature, - withdrawalCredentials, - merkleProof, - depositDataRoot, - } = initializeData[0]; - - beforeEach(async () => { - await validators.addOperator( - operator, - initializeMerkleRoot, - initializeMerkleProofs, - finalizeMerkleRoot, - finalizeMerkleProofs, - { - from: admin, - } - ); - }); - - it('fails to initialize validator by not oracles', async () => { - await expectRevert( - validators.initializeValidator( - { - operator, - withdrawalCredentials, - depositDataRoot, - publicKey, - signature, - }, merkleProof, - { - from: anyone, - } - ), - 'PoolValidators: access denied' + signature, + publicKey, + depositDataRoot, + oracles, + oracleAccounts, + withdrawalCredentials, + validatorsCount, + }), + 'PoolValidators: invalid operator' ); }); - it('fails to initialize twice', async () => { + it('fails to register validator twice', async () => { await validators.commitOperator({ - value: initAmount, from: operator, }); - await initializeValidator({ + await registerValidator({ operator, merkleProof, signature, publicKey, + withdrawalCredentials, depositDataRoot, oracles, oracleAccounts, - withdrawalCredentials, + validatorsCount, }); await expectRevert( - initializeValidator({ + registerValidator({ operator, merkleProof, signature, publicKey, - depositDataRoot, - oracles, - oracleAccounts, withdrawalCredentials, - }), - 'PoolValidators: invalid validator status' - ); - }); - - it('fails to initialize validator for not committed operator', async () => { - await expectRevert( - initializeValidator({ - operator, - merkleProof, - signature, - publicKey, depositDataRoot, oracles, oracleAccounts, - withdrawalCredentials, + validatorsCount: keccak256(await depositContract.get_deposit_count()), }), - 'PoolValidators: operator not committed' + 'PoolValidators: validator already registered' ); }); - it('fails to initialize for invalid operator', async () => { + it('fails to register for invalid operator', async () => { await validators.commitOperator({ - value: initAmount, from: operator, }); await expectRevert( - initializeValidator({ + registerValidator({ operator: anyone, merkleProof, signature, publicKey, + withdrawalCredentials, depositDataRoot, oracles, oracleAccounts, - withdrawalCredentials, + validatorsCount, }), - 'PoolValidators: operator not committed' + 'PoolValidators: invalid operator' ); }); - it('fails to initialize for invalid deposit data', async () => { + it('fails to register for invalid deposit data', async () => { await validators.commitOperator({ - value: initAmount, from: operator, }); await expectRevert( - initializeValidator({ + registerValidator({ operator, merkleProof, signature, @@ -850,160 +394,18 @@ contract('Pool Validators', (accounts) => { oracles, oracleAccounts, withdrawalCredentials, + validatorsCount, }), 'PoolValidators: invalid merkle proof' ); }); - it('fails to initialize for already locked operator', async () => { - await validators.commitOperator({ - value: initAmount, - from: operator, - }); - await initializeValidator({ - operator, - merkleProof, - signature, - publicKey, - depositDataRoot, - oracles, - oracleAccounts, - withdrawalCredentials, - }); - - await expectRevert( - initializeValidator({ - operator, - merkleProof: initializeData[1].merkleProof, - signature: initializeData[1].signature, - publicKey: initializeData[1].publicKey, - withdrawalCredentials: initializeData[1].withdrawalCredentials, - depositDataRoot: initializeData[1].depositDataRoot, - oracles, - oracleAccounts, - }), - 'PoolValidators: operator already locked' - ); - }); - - it('oracles can initialize validator', async () => { - await validators.commitOperator({ - value: initAmount, - from: operator, - }); - - let poolBalance = await balance.current(pool.address); - let receipt = await initializeValidator({ - operator, - merkleProof, - signature, - publicKey, - depositDataRoot, - oracles, - oracleAccounts, - withdrawalCredentials, - }); - - await expectEvent.inTransaction( - receipt.tx, - Pool, - 'ValidatorInitialized', - { - operator, - publicKey, - } - ); - expect( - await validators.validatorStatuses( - keccak256(defaultAbiCoder.encode(['bytes'], [publicKey])) - ) - ).to.bignumber.equal(new BN('1')); - let _operator = await validators.getOperator(operator); - expect(_operator[2]).to.equal(true); - expect(await balance.current(pool.address)).to.bignumber.equal( - poolBalance.sub(initAmount) - ); - }); - }); - - describe('finalize validator', () => { - let { - publicKey, - signature, - withdrawalCredentials, - merkleProof, - depositDataRoot, - } = finalizeData[0]; - - beforeEach(async () => { - await validators.addOperator( - operator, - initializeMerkleRoot, - initializeMerkleProofs, - finalizeMerkleRoot, - finalizeMerkleProofs, - { - from: admin, - } - ); - + it('fails to register with invalid validators count', async () => { await validators.commitOperator({ - value: initAmount, from: operator, }); - - let { - publicKey, - signature, - withdrawalCredentials, - merkleProof, - depositDataRoot, - } = initializeData[0]; - await initializeValidator({ - operator, - merkleProof, - signature, - publicKey, - depositDataRoot, - oracles, - oracleAccounts, - withdrawalCredentials, - }); - }); - - it('fails to finalize validator by not oracles', async () => { await expectRevert( - validators.finalizeValidator( - { - operator, - withdrawalCredentials, - depositDataRoot, - publicKey, - signature, - }, - merkleProof, - { - from: anyone, - } - ), - 'PoolValidators: access denied' - ); - }); - - it('fails to finalize twice', async () => { - await finalizeValidator({ - operator, - merkleProof, - signature, - publicKey, - depositDataRoot, - oracles, - oracleAccounts, - withdrawalCredentials, - }); - - await expectRevert( - finalizeValidator({ + registerValidator({ operator, merkleProof, signature, @@ -1012,70 +414,19 @@ contract('Pool Validators', (accounts) => { oracles, oracleAccounts, withdrawalCredentials, + validatorsCount: keccak256('0x6be4000000000000'), }), - 'PoolValidators: invalid validator status' + 'Oracles: invalid validators deposit count' ); }); - it('fails to finalize not initialized validator', async () => { - let { - publicKey, - signature, - withdrawalCredentials, - merkleProof, - depositDataRoot, - } = finalizeData[1]; - - await expectRevert( - finalizeValidator({ - operator, - merkleProof, - signature, - publicKey, - depositDataRoot, - oracles, - oracleAccounts, - withdrawalCredentials, - }), - 'PoolValidators: invalid validator status' - ); - }); - - it('fails to finalize for invalid operator', async () => { - await expectRevert( - finalizeValidator({ - operator: anyone, - merkleProof, - signature, - publicKey, - depositDataRoot, - oracles, - oracleAccounts, - withdrawalCredentials, - }), - 'PoolValidators: invalid operator' - ); - }); - - it('fails to finalize for invalid deposit data', async () => { - await expectRevert( - finalizeValidator({ - operator, - merkleProof, - signature, - publicKey, - depositDataRoot: constants.ZERO_BYTES32, - oracles, - oracleAccounts, - withdrawalCredentials, - }), - 'PoolValidators: invalid merkle proof' - ); - }); + it('oracles can register validator', async () => { + await validators.commitOperator({ + from: operator, + }); - it('oracles can finalize validator', async () => { let poolBalance = await balance.current(pool.address); - let receipt = await finalizeValidator({ + let receipt = await registerValidator({ operator, merkleProof, signature, @@ -1084,6 +435,7 @@ contract('Pool Validators', (accounts) => { oracles, oracleAccounts, withdrawalCredentials, + validatorsCount, }); await expectEvent.inTransaction(receipt.tx, Pool, 'ValidatorRegistered', { @@ -1091,24 +443,21 @@ contract('Pool Validators', (accounts) => { publicKey, }); expect( - await validators.validatorStatuses( + await validators.isValidatorRegistered( keccak256(defaultAbiCoder.encode(['bytes'], [publicKey])) ) - ).to.bignumber.equal(new BN('2')); - + ).to.equal(true); let _operator = await validators.getOperator(operator); - expect(_operator[2]).to.equal(false); + expect(_operator[1]).to.equal(true); expect(await balance.current(pool.address)).to.bignumber.equal( - poolBalance.sub(finalizeAmount) + poolBalance.sub(validatorDepositAmount) ); await checkValidatorRegistered({ - vrc, - operator, transaction: receipt.tx, pubKey: publicKey, withdrawalCredentials, signature, - validatorDepositAmount: finalizeAmount, + validatorDepositAmount, }); }); }); diff --git a/test/pool/depositDataMerkleRoot.js b/test/pool/depositDataMerkleRoot.js new file mode 100644 index 00000000..6522d03d --- /dev/null +++ b/test/pool/depositDataMerkleRoot.js @@ -0,0 +1,362 @@ +const depositDataMerkleRoot = + '0x29d7fc50216bc4cba49c0d8b31a1051a2d7cb48382d785009c7da0ea2702cc8e'; + +const depositData = [ + { + amount: '32000000000000000000', + depositDataRoot: + '0xcccacf8386b796d725a67bc7052158f5753f7ced36d9e1a6ace3ff53a966b4d1', + merkleProof: [ + '0x6821b132933b9e1771d14d8a69100cf73ed24bfb0e2b96a61968d90c38aa3326', + '0xdc020283d5739e700bb84135acbf0d09953e7b77ba8a18e8cc0067ad373631cf', + '0xe2c7975b01aa60d2a9d99de471d7f72b70f7e8e99c57e1f0ffdf9e349a133541', + '0x0609d9618e54a30adc12b5684c95a003fd7aed407ecdb7c7ec84c92e9cf7c090', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xb6495cc4ce37cb5627dfbb1226b2973bc1069b8f9b6b1ec4c3e551cbc6b1534a7cb4f820f768bb24c153caf7157835cf', + signature: + '0xa418a527998cd1f6f81659efa876edfa524ce0b3e44f0695bfca3de95f95fce6b36bf3dda012d4de30a343a50cf1b60e0bfe074ba4dcc06054e21494076a69175c42b05d0a1ec7eaa9e8d260607a50e29dd3d658127d95e6bdffebe6206927e3', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x81418e8cb990c55f74fdd8cefb9989eb2f98b079a706017e0841488aeb829fd2', + merkleProof: [ + '0x09aa891bc0370a422b246c317d4a587fa6a252b54ae0052243952eb0843324ef', + '0xd2547f9c37c08d6a47c33046b8020dc0b4c228b0a90b1d0afea1521c9d41772f', + '0xf5178384d004c8989ffae2f1a6e0cd68ad2517b63d3865a8b13236a931c31fa9', + '0x0609d9618e54a30adc12b5684c95a003fd7aed407ecdb7c7ec84c92e9cf7c090', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xa90cfb18b6fc9a0acd26e37f43c18081aab4c9c337639730daca683f1cb15230b49b143dae9151fe76d2d95c6fb10423', + signature: + '0x8ce693531c9de86e5864830fdd4fd93b54cd2817cb564caf1fe6547d6affe683348dc140e43fe1d51b50aba8858b619f0040ed309446a22d23fbe0720a60a35b2c932d7e83ce9ed6f0baebc213e3a6cd13e3e88b2b52b268356deabf4cabb7c8', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x9052ff21f1675a72b4fdc3b2193dde9ff513826c92d09cf93529ea352606f043', + merkleProof: [ + '0xe4270c6e26bc957269912710be0f40a9b5c83dfbb0f02124aa0c3777202f8e10', + '0xd8364e8622fe07611c160ce421d1ed49eeed8e52549ad3ed3beac60b3bcecefe', + '0xb576afeb66e0d43fe70271d5e6a529520b57e9c0767a75d3d1ea4743c5565d3b', + ], + publicKey: + '0xb5e181843ecff8a563c17ec7ce897ee5b9ad90f2dc9fdd814c9890cfdaa796307e4178ca8ae62bd5101a69f8b4dffe38', + signature: + '0x96b73715512d295e5429e5648a50b9eee2df198702c0a18c635aee7ff2840363d7c5d4478b2b2ec6729922960ecd7b2b106288e7775c0ceb21933d23a848eaf4ca214e4bc4ab5757ad8516e07586ea3e81fbcd51d61b148d1e77140ddb2031e1', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x5a1eec35a4ee86d3114a28372ec81c21fcf8617deb5c9cf78b7cb06ad29e7150', + merkleProof: [ + '0xc07cff912f1b3d3080af217d15d6d96ccb140ced91b2a513899764e779b60887', + '0xd8364e8622fe07611c160ce421d1ed49eeed8e52549ad3ed3beac60b3bcecefe', + '0xb576afeb66e0d43fe70271d5e6a529520b57e9c0767a75d3d1ea4743c5565d3b', + ], + publicKey: + '0xaf3679b497b43c7fe5eb730fb3e7535fa98e98bc6ec0e92495f6127cddd64b7d113ce8f3b92498b4bfec392940373778', + signature: + '0x8fc88068283fa6eff542024dd6b359f171add8be6b71b738478d291015f936f6fde9a086308c4c8607742991093c973f06eb19ff118f17ccaf21c13147777eb5606fa71ca7e30aca2615f2f6b7f20b5d0c6fc5e097c265dadcdf47461c06587a', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x5b0e24581f97a974485bcbbae392dbe729f4f0a29a833a4857fe8c7b56a3d239', + merkleProof: [ + '0x9c3ff00ce6bd4c1098571e73f83db7ad4a3f53429515b208fa738441bd4f7a0d', + '0x0b1d9c2f398810bf35a66345d87f36a177326184150ac0427b49addc9a568c04', + '0x5e71fd62714f5edd3540f7e4411441ff009925ca83c5885badd3b8a336e4190f', + '0x2564ea72c8ecf07809a6c57e9e0c7f37fcc77a26e25f789770d2dd60402d925f', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0x8c8352d83b677cbc577a61c7bfb6838cb21cb3e18a4ab3152a266b122bcccbb11cd81885854cf9c4f277f76d32caa3d6', + signature: + '0xa930d46042d38c34b4cf6dda30be5c3d234f1a45f18493c2c86e47a3ece4e22873ddb190c047c901f80d58e70012952c109b66de19b419d30cbefbde3e3277fbcd081b7d8d3331fb62dd5e93a96e0d2cb0486a2d9642c57d87c441ed354f668e', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x20d42807c1af7740bd7d8a9eedebc47e77ac83db644bd89c2e8643477ee83cd7', + merkleProof: [ + '0x4f0cb8a7ea47f382704393338d2d52840bcf5f53fe1d23dff871ac7d0ad220bc', + '0x4f3814db1d48a3699ab7700e319563a2d90332032f92b34c0cf9d397f14b39c8', + '0xe2c7975b01aa60d2a9d99de471d7f72b70f7e8e99c57e1f0ffdf9e349a133541', + '0x0609d9618e54a30adc12b5684c95a003fd7aed407ecdb7c7ec84c92e9cf7c090', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0x9944d852ab7906fc6043d428e44c70f6661239b74a835571c0229fa16b45fb93d6a33a7723f2d282de306b7ecfb8dc42', + signature: + '0x82de46cc24f229a5ddc0d0cb2daef6bf0aede690ab8e6d002d57ad66c000142023dbc4b185c23c63c5f61f97f6238cf015713a7a9a952e6866fa2220228cef1adfed9dcd2374182c6e1924bc070712ab2472a10f16963274ff3959e40db8dc35', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x3594430dfa971714c1856fa175541f36f67ab107bde20ba154cd0df964ec5d12', + merkleProof: [ + '0xfec450d516e35341b8074848c6a967edf4f36066a15ca51c9f1bf0243b5e2b60', + '0x8ff3bb2fbdeabe68c1a118306dc3ffa308bd347c2afab3070fc121b649ec77b4', + '0xb576afeb66e0d43fe70271d5e6a529520b57e9c0767a75d3d1ea4743c5565d3b', + ], + publicKey: + '0x8d17cbdcf72b872d6022797042ddedb4c60ba0934380d22628fabd84e51a95e82408f08cf12642979c73b87ed635ea43', + signature: + '0x96a8eb7ffb2b5c3ec2f1015cd4eb0945f962e956b7f3605c1bdf9cc7155142c3f51ab04ebd3f3e1bb4eef8c898e571cd0b8e1788cce56f8b3a2a9d12f8f37372f340e35d5cb0dae761f28a470d12e28a5082a48cf56192ccf1f7dfab70df3ab4', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0xd2daf3e37076e68a21474066d502fa10a33d8b22c72407678a0287c7d1859998', + merkleProof: [ + '0x7d028b488b7a88fbe994c99e9360397f2c5f66dc8aca00512bcdb7bc34f72967', + '0x1c16b21f531964c4b4ce9ae8eb342e2bde26db2ff2d46a8d371a7c623cdbadd0', + '0x5e71fd62714f5edd3540f7e4411441ff009925ca83c5885badd3b8a336e4190f', + '0x2564ea72c8ecf07809a6c57e9e0c7f37fcc77a26e25f789770d2dd60402d925f', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xa9c2d1b8e410f9c0fddb4acc0afaec7d7f533281aadbf16025419c3b0a59661493e4a7c82f3be8bef13ef74237db1f03', + signature: + '0xa33e1426452bf374e14f76600f259587bfd178630575fec125e24a7877bfca1ab57394bfdb8f19b7e8e1a12d7ca556c8010698cc1d0f3462e6d5099f2c65cd09b6d4e8beb19daf6432d90a7ad472add4329afde4ad71c90f867a7c00ad6a669b', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x2365533b2eb7e07b34046c5cc82ae53f3ddf79c48a213dae680383b742a1c609', + merkleProof: [ + '0x484b461380d9e6d2e29983dcd6279a55f6900877ae8f361d25b77cd3c6b5776f', + '0x8e55d7e28f72c09f34a2e0f674d738e84abdb969e77b973702944478392edbb5', + '0xf5178384d004c8989ffae2f1a6e0cd68ad2517b63d3865a8b13236a931c31fa9', + '0x0609d9618e54a30adc12b5684c95a003fd7aed407ecdb7c7ec84c92e9cf7c090', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xb7a67bf5be7dfb70b0aa131aac42ae32f741f780a274e25cb8341bcbc23ba226394b12ac98c529c1d01d94e1e20e7656', + signature: + '0x93f57ca32e437fb4db288e55513452b7cbab3d4b7a0829ea0f04e17a1551e3347b5014f3276c74ed8f03335fbdc597dd0217454959ca3e5ebb22324d747ea91f420e9cd5ab8659e620b1e2ff791a96dfc89fdd12072a1447c91a6b145f70c820', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x1eb358a759b2c82a86f760b4a21d837a489ee11e271173fbf21885915d44d5e6', + merkleProof: [ + '0x73ee03c3e7f8a0e7b98095c90fb9961143577dd815699e7514027622649acfa4', + '0xdc020283d5739e700bb84135acbf0d09953e7b77ba8a18e8cc0067ad373631cf', + '0xe2c7975b01aa60d2a9d99de471d7f72b70f7e8e99c57e1f0ffdf9e349a133541', + '0x0609d9618e54a30adc12b5684c95a003fd7aed407ecdb7c7ec84c92e9cf7c090', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0x86fcb52d578aeaf519f3d47efb2f2b09cb6ab46f88026d7eae6fca9dc7c285ebdae663d848b552a2041ee80a25617b6f', + signature: + '0xb324d2fcf2df124b9a711fb6b7afce722dd182a1942d64660639ff656aa120b872206c4d7eec9339b724cb19901591b202cedeb0821bb0b9b3cc0dd71e0fba9086aa186c9b73b7f7e6f5355cabc99324882a784340e4ca6191fbe1b1f336c46d', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0xb6faa5db13a6e6ecf125030970d83c6bccadd5b6eee5536daf088283b3754e24', + merkleProof: [ + '0x1af76be7cf21381b86842912a011353d792f25967d5567db5582c46a4e28d778', + '0xd2547f9c37c08d6a47c33046b8020dc0b4c228b0a90b1d0afea1521c9d41772f', + '0xf5178384d004c8989ffae2f1a6e0cd68ad2517b63d3865a8b13236a931c31fa9', + '0x0609d9618e54a30adc12b5684c95a003fd7aed407ecdb7c7ec84c92e9cf7c090', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xa2791e7200433a48a65b8440a316d6d4b1aebbefb475d20214d48d0c6f8a4213be32431b2e1b0438f2742600b2eab79b', + signature: + '0xa0a1165b939f298127ca5558946b0522a7d942965765bc3f36b68e0f63627bea8d339b0f19e6ca09ae70da5b59f06bc214b9e7ab2c83e6ddca65e1389e753f5826f6d9293114feba0bde7f2187a99688342abcc082c6fe31bfb19f7036daf322', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0xf20f651e145cf2be6d39298977a79c83bd53cf20d91e5a7fcd1c5158d526798b', + merkleProof: [ + '0xba1702e0c13916f2382891d6a3da9bd39a590f5d7a333c4e8a59b9f48271f206', + '0xd71b3a963a6b1f58198dd731c834f828b1faccfe5b3fa52c0bdcfd83cf3c6eb9', + '0xa2630e7de4a9b9c7595ed3af463baeb109318a5f5c0f081e94b5fc01e4ec27cb', + '0x2564ea72c8ecf07809a6c57e9e0c7f37fcc77a26e25f789770d2dd60402d925f', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xb11100b9789fd0a6edb847f37d71a2c75e486f5b2f0edf652fa5d8df4efd1f13263db2e93ca1faccbc021ff3ab743fb0', + signature: + '0x92207c189dec07386398899a42fc5be9c117cf33d35be363fd7ea687bda5b63b561f5d375c9dd15b5bb7b643c2b140ac134128c301a3b885777037b60459a0a206a58efd6c48b1ef587ffc6508aded968f2a6a38a747950f4425cf596c368b22', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0xae1d94310fdd58d4004ebc96add719a1e243252a479698308b267af78499076a', + merkleProof: [ + '0x741c78665be5fc4ecad84b73834afb70c6a7720d5c4c92c4bd2f958bb7a7c139', + '0x1c16b21f531964c4b4ce9ae8eb342e2bde26db2ff2d46a8d371a7c623cdbadd0', + '0x5e71fd62714f5edd3540f7e4411441ff009925ca83c5885badd3b8a336e4190f', + '0x2564ea72c8ecf07809a6c57e9e0c7f37fcc77a26e25f789770d2dd60402d925f', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xa12c8b578215a93cd83ba31810b24027f4175a2321105fc98b4dcdbaadc3fa5576a7ac32c06dbd4fd8f77600692d074a', + signature: + '0xb766531b6dcaf92d33190b33ed4e36ace04dc96409f3f1653333930f573a43a1271375e20a5037cf8e654320e954dd41094ecca6061f28ff7492fe68063753fe60f38036b06ce585eb9e14f89d785902d84cf9b19ac2dbf3c1397f22a56f5dd8', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x84ad0525a837c2c717de29faddb6ac7b55f4a769139f73a3ad3f739cee08bde3', + merkleProof: [ + '0xa9e7754329d37b273cb687a3c72bab97fb46b72e9fb8074e3094e4014c7f4db0', + '0xd71b3a963a6b1f58198dd731c834f828b1faccfe5b3fa52c0bdcfd83cf3c6eb9', + '0xa2630e7de4a9b9c7595ed3af463baeb109318a5f5c0f081e94b5fc01e4ec27cb', + '0x2564ea72c8ecf07809a6c57e9e0c7f37fcc77a26e25f789770d2dd60402d925f', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xa71c7f0d3a04792191505a964531f90ae8d3287027f4e2e82247664cd0c048d00741da43d7aa591bf57c607532eb33d0', + signature: + '0xb4e710f85aa79598c9be4ca754b0d6b452d40e90049782a08d762d4336a0a4cae0d4df107698399f2b236ee16b534d2014c3c60935614e567e4f6f5f92b044a8d51efd4ad10f61f22a9de1af271c3cdd49ea8e9f274cd24654e8ca05e899f9a7', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0xf2103aed334750d0bfbce33b8c0d366abc02bf4aa95fc88d68fcb390db1db760', + merkleProof: [ + '0xf4a7e1427a330d72f73cd325832d8ba0fe2f9872059ecb5c44343838172a7bb8', + '0x8ff3bb2fbdeabe68c1a118306dc3ffa308bd347c2afab3070fc121b649ec77b4', + '0xb576afeb66e0d43fe70271d5e6a529520b57e9c0767a75d3d1ea4743c5565d3b', + ], + publicKey: + '0xb44f595cb9be710f23babff4031cbd65a8cc9ba1dda76512147e82b51e26822dd33f24db2213c66139f55285ff9a2571', + signature: + '0xa70275cb5b96ff132425c6426ec36e450eb372aadf47abb7d11ea3ca79986740e4fd78183e12aa383165c8babb60e9b015daa179c32480e4b209c9b327f5e4819672ece998642e165c7db9fca70698228397ae1dcca29b80f7c541898c522ed0', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0xb477d49c7585761a4f4a2b582f1269e0460c6732c0bbf9f1990aabc3348e1946', + merkleProof: [ + '0xbfd702c9d24334e372610758bfe0513718f45de0b89e85a3d038e79e010aea18', + '0xdb26887c31065f0bcda615acb28af0fc66a671f83c0c8b0eedcce813bf082ca3', + '0xa2630e7de4a9b9c7595ed3af463baeb109318a5f5c0f081e94b5fc01e4ec27cb', + '0x2564ea72c8ecf07809a6c57e9e0c7f37fcc77a26e25f789770d2dd60402d925f', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0x8c0ec3be2b93cda6b130778955a93008aef32eb73d54478e364d7b3af6e0759d4281f3424e8e9457888515bd2cbaae28', + signature: + '0x91eece005ffde29cf320d825d5ee0e29be434d06cdb284c0d7e9b637b2e1efd37d94149c72f53537ded2afea82dab97d13a466a7c84fa149d82d2c14a619644dec52a26c2edf9a6af9ee7383053b269a663d9579261916146b660873abc8ccc7', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x4246e1fd1d9929b83d5484ed0f382bd68c29eaabb79259572a4eefaa10fac06c', + merkleProof: [ + '0x399fc262ac318aa450b85fc48b9ac030fd46192103ce64888225795a56a77c79', + '0x8e55d7e28f72c09f34a2e0f674d738e84abdb969e77b973702944478392edbb5', + '0xf5178384d004c8989ffae2f1a6e0cd68ad2517b63d3865a8b13236a931c31fa9', + '0x0609d9618e54a30adc12b5684c95a003fd7aed407ecdb7c7ec84c92e9cf7c090', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xa3a5cfe51d416dc52c391fab0a7864d586adda3e6b5740349342a22bd12cd6d20520cca82660663a9f8d2c728e1829a5', + signature: + '0xb4e8e71e6164a2716aa5b523850d72fb5501423faa21c5c1e8c54dede7222d39d8b34ec3b75d19765bf2c117aa9daf750e3918b1ca7d725cc5856fc3a6ee23209e170f0b9328a8f54b457fd98c1d69864021d953995ef9a44d76dc1748a48309', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x6c1463920cc9e17893f5482736b668acff3c72c1138e9c8c624581b187c9520c', + merkleProof: [ + '0x87a841c6d5f0d05a915841e5445fea19b3f8368ae32f310e88583a4089c317cc', + '0x0b1d9c2f398810bf35a66345d87f36a177326184150ac0427b49addc9a568c04', + '0x5e71fd62714f5edd3540f7e4411441ff009925ca83c5885badd3b8a336e4190f', + '0x2564ea72c8ecf07809a6c57e9e0c7f37fcc77a26e25f789770d2dd60402d925f', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xad6304f931c1e0970a7b5f76ccae142be8c8509484e5b7cc54063baf6af71467bc34172775058ffbb8e049c399e3b51a', + signature: + '0x86099d7c244e2cf8884c2a0295d02da895fb2343ae28d4b482fbc4a764cd87480a8bad2dbc34f3b1bd17bb262ba238e901273c3f23841fa26a222cdfcd438caa3ba69ee307d61d8bfe6b79660d3090c9f56feb6bdc539f8366210e303065ff71', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0xc7d2143ce6808a6466524bc9499888ae22300b824e6422138266345438e4d24d', + merkleProof: [ + '0x55f0e0719a348a4dbc810d830f20f32aaa5183df5dfa8f64e5a1f83569af87b5', + '0x4f3814db1d48a3699ab7700e319563a2d90332032f92b34c0cf9d397f14b39c8', + '0xe2c7975b01aa60d2a9d99de471d7f72b70f7e8e99c57e1f0ffdf9e349a133541', + '0x0609d9618e54a30adc12b5684c95a003fd7aed407ecdb7c7ec84c92e9cf7c090', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xb0136d62e49f327f07141a33846d72006083331a7b4e2cfe45df4c07e737e79d6e91a5ec54efb68dde05efd2c163da16', + signature: + '0xb2f7646b9a288efb0fb8be27aec4e3602a4e08e62cc8cc2b1b93a61494c55e596c6e1ee96f74b9e0f754369442066971004d6cd2d61d2c0bb9a01512960e26dd4e2aee5aa8d6235ba3e095dc7ddc7c6ccc25ab32cd0f0a554f58245d332340cb', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, + { + amount: '32000000000000000000', + depositDataRoot: + '0x221c0a38479ef202d7439c8fd4faf74bbba1a2ebfb47f2ca6a86088425ef898c', + merkleProof: [ + '0xbcc107cdeb85c643ecd930ab22e80e048dff42ceab2adf7aa006d59c286156e2', + '0xdb26887c31065f0bcda615acb28af0fc66a671f83c0c8b0eedcce813bf082ca3', + '0xa2630e7de4a9b9c7595ed3af463baeb109318a5f5c0f081e94b5fc01e4ec27cb', + '0x2564ea72c8ecf07809a6c57e9e0c7f37fcc77a26e25f789770d2dd60402d925f', + '0x4c1bf50778b44f99c856bd0ea067ead075a196b824eeede9c775f43c3effa031', + ], + publicKey: + '0xa3695a11ed45481919c7a2b36c6a6c5d2a898403ff321c0baf228a5943f02759695c2f249b4c9bc53be3dcd79d2d8c97', + signature: + '0xa356a11b3c660572a7f87c6e1871d9f801cd8c921ab8b40f2f6a5b1cb303507d39afff6add66037d72da6281ca80d510015da342fc0dd95bc616041c9a121b165ddba83fe05e2385518250e5b997066026aad5563b26ef5174ba5b5ed16f11ef', + withdrawalCredentials: + '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', + }, +]; + +module.exports = { + depositData, + depositDataMerkleRoot, +}; diff --git a/test/pool/finalizeMerkleRoot.js b/test/pool/finalizeMerkleRoot.js deleted file mode 100644 index 0a8d6ff3..00000000 --- a/test/pool/finalizeMerkleRoot.js +++ /dev/null @@ -1,166 +0,0 @@ -const finalizeMerkleRoot = - '0xd7bad7a134e43c228f1bb6b0a895aecf41332a6eb2d0a048d9b160b13f453c9d'; - -const finalizeData = [ - { - publicKey: - '0xb96969dea0a510be05f2abb406344e4576b9597fe29053a8ecdb2ab0cbb4b991859f297f43d7e0e9ab1f909466190544', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0xa80e86d3385f9aee2cf6106ed6e7747eefe138ffe792a62d917c181f213d4af1', - signature: - '0xa08107595c5143ddec5ad1aa63bb2cb7e4ea2dac16d44ccc7513e4c10cfd50fbbbc0900e1112576c0b5078d1b1d1509f033b0c68ac040f6e919e78127ce0e68fbafe6747470d45b52d08939d26a16834282460cd3048e7d0118f201e54187f9a', - merkleProof: [ - '0x3ddd7bb3a18efa5a8b41acc1ef4d38d584c944b98a97f508cf7e95fb0e393c81', - '0xbd20f23721f8fc13fbe344d09c1e6980e321355c19a96bca0d07e7fb5320e5a4', - '0xec80a84ffca5b0a30de986d9001bd49887f1ea6a8de410d7b702672614a1f1e8', - '0xba394c7277955115f0f5029e4b0161b9aae615c1da40da9002164448095a95fd', - ], - }, - { - publicKey: - '0x82a1c1e8fefa9b330d8720e2f7ae2946b6c222d5a386dc07edc6e45e950fb697d20f0d082290a0401c409d312582f19a', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0x02381caab2d2950175240df5b08d39cd467c43241bd31e5fcbec751ff2921794', - signature: - '0x840218561235e4a3fa5199ce9f14c466059cdcf0e86a3326f5b889775a540b232f454cd3f9654eef0da3ee0748c44913156ff261c1a9cb8efd7ca870558dc61746258d83072386dbcb8acd1015f537562ab27d1cfc9e36a1559b875954db3c46', - merkleProof: [ - '0x1b265da452369a48f021e0f651f7cfac6832a44b62e2496eece7fc1263469a94', - '0xc4371cf32b7ce68ad0c939f0f7dd77545ce00aba713ab5d7fcc4bafb0b423737', - '0xec80a84ffca5b0a30de986d9001bd49887f1ea6a8de410d7b702672614a1f1e8', - '0xba394c7277955115f0f5029e4b0161b9aae615c1da40da9002164448095a95fd', - ], - }, - { - publicKey: - '0xb9e286101e44fb424047d332a5f81120310fa67e39d5c647156eebdf0fe07b4d1f6a5aafc4f40e8b707a8ef727469bc3', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0x506bed7fa7ba855d737c63070123b53efc294d367d512f3e98866d136b76226c', - signature: - '0xb6f15b10ff6dc20070c34e4777186ae1dc9b083969d1d612a376ebf913a2467813a92f83fc2a8c8c9a4a03a56fe5df361197f3c8962195c1ade78ccd1f3cb60579bbe57d14e935e6f14b1a25d26f4ad482dacd2628d346eae6bf24732f1170ea', - merkleProof: [ - '0xd721914b33cf5e7444215733d5352074a3f14f3c5771022d395d5115849af01f', - '0x93d9212248bc6f0b057b7b3ebac014908286155742c21b800c1b684db2aafcb8', - ], - }, - { - publicKey: - '0x87b54d1fbe23dba1dbbfe5236569b13a6e9e852e2620fc846625360a7f3f8a96c6763f8f73db2ccc21e76591a87f838e', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0xbda2cb877878294a180b1b4843e2de7fe47ef4bb00d6663974a83a7f53e7c503', - signature: - '0xa3256b4a0c8e87dddbf7fd599b1135e9de5c3e9e2db4002328564a2f042ec305279f4b550a189989c326acbe3ba7b7e30c27451ef4c77fbabb7af5672d306f268043dc74d9f623fd06c7b0eb579d353f1b162e1ab1527fd7c086a25cc2f681fd', - merkleProof: [ - '0x8434e8bed125b88faaba19e0459b8dc37ac2d48a26d55899aa42bf28161f58ef', - '0xc254adb685eb48f9b49ff77fd763d0ceddb59e41820dc2d0a21172e2514a1995', - '0x6456a2c65f6e70616952241b769ad5860a06d93fb4dff0341c9dd3e3fa5cdc9c', - '0xba394c7277955115f0f5029e4b0161b9aae615c1da40da9002164448095a95fd', - ], - }, - { - publicKey: - '0x8e44d45b2656a4a84b788866bbbf8274c12f52a36d47c1fc03f9988b11fe11a8cd4e03be207106feeee135b7b6c66aad', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0x9a37a3df36cadbfadf3e7f7efc2433a45d88be6a66cba3933ab6d2b158aa772b', - signature: - '0x8d3ba5b8d7c13b3b03421476e87966355c483e6dd97da0c26e195d13e7c74dd52db3bb5999d073a4fa74d79872ce907c01125d8b7c7999e5ee2ffb7e3ad3bac06cf63f230b72a06673620ed2bea767c917a6c00dedfcae67fe3a462f3667d7ba', - merkleProof: [ - '0x9c8003f4ac520a588092034a7030ea5b9c0db4745360f86e1902682aa60f0344', - '0xf874f50abe4824031bcd7e2e30fd84b1b881aaab4dea950d5f1625d3d1d35065', - '0x6456a2c65f6e70616952241b769ad5860a06d93fb4dff0341c9dd3e3fa5cdc9c', - '0xba394c7277955115f0f5029e4b0161b9aae615c1da40da9002164448095a95fd', - ], - }, - { - publicKey: - '0xafbcd1d40bd1f265342f23d4db678807959e8c4b3575ba479693265b33c3083bfd62cb5ecdf88d54e59d330f3dc5fb01', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0x79af5a40ccd500c5e32e65cd5badd2d1ed1f35d03cc7fadd04054879b0453287', - signature: - '0xb254d367bb819d984e1fab671aed1b918802f49667e3511ce6f09935861aa409bc8b5b36b90ea928b02da1dee25a53a417fdd947b71f2c26abcafc41f6e89dc4aec409f28412996c9885b6d0779172242820db246209e2b4e8dd9b6cd8390e32', - merkleProof: [ - '0x71e06273d214525b525df506f94ee67b665d4536b3ab29804ffc0a622fbb989d', - '0xbd20f23721f8fc13fbe344d09c1e6980e321355c19a96bca0d07e7fb5320e5a4', - '0xec80a84ffca5b0a30de986d9001bd49887f1ea6a8de410d7b702672614a1f1e8', - '0xba394c7277955115f0f5029e4b0161b9aae615c1da40da9002164448095a95fd', - ], - }, - { - publicKey: - '0xa3f82c068ca69cb9696f3b99eed131884c9f6bd9eb6b395c9a7c187d83627e7f859cecb60f8ee7c5789bcea7e557a853', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0x380deff8bfded3ce6a842ca56c5d99c307371a81c403d31656a8ae69b4f37070', - signature: - '0xa8270f9728ae68795a6f4d4e067e53e535993fff23e5b520b78a9d7a64e2060363691b33697648455dae963c50a63f0004cfda05dc08212b13fe330fe5a8651b9f62339288556766395768fe845e71a15e9f22358018a920758c012a0299ff82', - merkleProof: [ - '0x7b053294a407998f97e71db1a00735cd52aa59233da3908b7680532123229434', - '0xc254adb685eb48f9b49ff77fd763d0ceddb59e41820dc2d0a21172e2514a1995', - '0x6456a2c65f6e70616952241b769ad5860a06d93fb4dff0341c9dd3e3fa5cdc9c', - '0xba394c7277955115f0f5029e4b0161b9aae615c1da40da9002164448095a95fd', - ], - }, - { - publicKey: - '0x94b00c20f4c00bd754502b3436e4e9e6da0d81edaede9da04112cbed90beb554a31c94e3157875fb64dc1e0dbefb9ce2', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0x97dbc5d0891126427519b8ae3f04ce2afc23e618ae10c95d21987d10c34926eb', - signature: - '0xb219c3a60be6275586fb824cf2cf1c976a7d340a82b57a078f2636aa009dce5b9844b4513bd5e95f2813dccfda0100890fdaf1cf38055f480789b1bd0fb5c9e30e9bd4965ea28ec44ae91f151d8c473eae577e047e0ff63045b65b9c8e3e2c54', - merkleProof: [ - '0xc66dd01cb1289694b7cf0f79deba8e4665ea6ded9a0d12aabaa7e1ea6c05a2d4', - '0x93d9212248bc6f0b057b7b3ebac014908286155742c21b800c1b684db2aafcb8', - ], - }, - { - publicKey: - '0x85ff74a6384eb7852c3c4b855053e25bbb75e90897a474382cbc6568574c2393ec0995a059d82f22db6dd711ee6d2556', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0xc1e7816c7a29814018c2573af8f3a4bbba3e7a4261e689f86a235af65231795b', - signature: - '0x8d3ca532136ef7eccd82abc708d2d415e99a86fbc69ac489fe5065fa6d73dcf3b7f96f64acd3625cad1cc593d3485e90191db46bdcc7903bf83c75ef36e3767c1f443ebd652e93d91aef9099eb637278764f185ea2e2ac757307305e520fbdb3', - merkleProof: [ - '0x05610ea5ffbe515526c922bb2fde54e9733b44451282b04e2e35b918b701206b', - '0xc4371cf32b7ce68ad0c939f0f7dd77545ce00aba713ab5d7fcc4bafb0b423737', - '0xec80a84ffca5b0a30de986d9001bd49887f1ea6a8de410d7b702672614a1f1e8', - '0xba394c7277955115f0f5029e4b0161b9aae615c1da40da9002164448095a95fd', - ], - }, - { - publicKey: - '0xa101956aa020ce896aa606b8dff7a91e0ec2429cdf2b62db8230612ecb7058bd733a644f8a607b6f050e179e4a881ff1', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0xf041bc4977be3c420272127431f25b5b28d43793087cc06e48b2e66a005b95ee', - signature: - '0xb2fde3069c8ae6f34e3927f5fd1e6a2634a1659145021d835bdfd2c3cc211718cb60dbddd470c85f1bb956ed9fa728930175f560618ab34fc6c077857548099ba188d5aa585e6cca9fe4d2cc50cfad78c7d15e7d124c08d1f81a1e47f474799d', - merkleProof: [ - '0x8a54181dce16329ed32c7f92439e31880333231527536163940b0cbd68d799a7', - '0xf874f50abe4824031bcd7e2e30fd84b1b881aaab4dea950d5f1625d3d1d35065', - '0x6456a2c65f6e70616952241b769ad5860a06d93fb4dff0341c9dd3e3fa5cdc9c', - '0xba394c7277955115f0f5029e4b0161b9aae615c1da40da9002164448095a95fd', - ], - }, -]; - -module.exports = { - finalizeData, - finalizeMerkleRoot, -}; diff --git a/test/pool/initializeMerkleRoot.js b/test/pool/initializeMerkleRoot.js deleted file mode 100644 index 3a03c341..00000000 --- a/test/pool/initializeMerkleRoot.js +++ /dev/null @@ -1,166 +0,0 @@ -const initializeMerkleRoot = - '0xf42fe3b48cc5e9bff7e2777cfe4981a28b5b3c7cd604e6abeb3e7bc46efdad4a'; - -const initializeData = [ - { - publicKey: - '0xb96969dea0a510be05f2abb406344e4576b9597fe29053a8ecdb2ab0cbb4b991859f297f43d7e0e9ab1f909466190544', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0x54d3673931628f06f64ca1bdc20b88338097d42bbec1032a4085ecf2cc6bbe4a', - signature: - '0x8933a4b8ce2e563e8f1ee335edde2c7d706f234363874939fc536bc144471a450c4da4f0e4e13edeb16c9cb739776ae7012ec4bfd265fd37a0bfaf3e45eec8bfcce873fc0e0ee22593dee4a4fa66f67bd75b4a59b3f458419c5deae8d68ff787', - merkleProof: [ - '0x0d50f81c690ec6ce2195c0fd17e7b12bcc193d08dfaeb290902c49baf260c7e0', - '0x71edb70330fe30fd386d48bddd88b92b5e1ca23a4638e227624777cfe943da18', - '0x409236559f2addf924723f13fdf3e6867ef4e5c87bf11896a159ca0c2b9ecccc', - '0x7d6711df91f76ae4361bb1e7b90070ed43b026418cdd9e73adc651a91ec040a1', - ], - }, - { - publicKey: - '0x82a1c1e8fefa9b330d8720e2f7ae2946b6c222d5a386dc07edc6e45e950fb697d20f0d082290a0401c409d312582f19a', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0x02d3e148895dc7ccfe7607532f37a24ff517315d44e4a75b50544455e029f547', - signature: - '0x8562de4ea7ae13f4ab31a70a3b57a9fe48b948807ab054118442899f28190e7a680cfb5755e9dca19d7c46ddd2e94c8e0fd3dd083c83b8cf7d56a3293ce01d56fa97cac7d6a309e1aa55e18c2cfc2138917f34bc47493b40c92ffd6630544307', - merkleProof: [ - '0xbd484d0623ae33a4513d34f02bbe1b195d928955cc6e42bd53d9b7bcee3c11be', - '0x8488179b936bfc7270a95b441ff36cf5ebb237ed814f1b67f367d6f9e26dbc06', - '0x307b1d09a6f5d0639a787fcf3f7b3d311f15ccaf20d4d255f2a3569abed4faa3', - '0x7d6711df91f76ae4361bb1e7b90070ed43b026418cdd9e73adc651a91ec040a1', - ], - }, - { - publicKey: - '0xb9e286101e44fb424047d332a5f81120310fa67e39d5c647156eebdf0fe07b4d1f6a5aafc4f40e8b707a8ef727469bc3', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0xf53b8cda810a665de32068bd503d061c04d6f5c3cb79aaa692062b9406d96c53', - signature: - '0xace5fa8291b94149b7141adc65952ca56196e2c43ff347c093d4cd02e4f1af0b7ca71f7fd5708d317cda0c7cba4a0e19112efcb768ab35af2e5fc0035feae62e7bd0b66cb9b3895f8659cf4f79b3a9f680872d6ca2ea3dd36730369fb1ad1a8a', - merkleProof: [ - '0xdbc7634a30af542e808ba9d255aa9314e3ff8ba9e6c54bf1a896ce02c3fd518f', - '0xf9d82b6415020d5762a00be524008b3eec1d230cf1e72a03dc416acc2f4fee70', - ], - }, - { - publicKey: - '0x87b54d1fbe23dba1dbbfe5236569b13a6e9e852e2620fc846625360a7f3f8a96c6763f8f73db2ccc21e76591a87f838e', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0x159e9eca1c7e72c33d7a2361cdadd3ac4ec2a4befa64492b332c2b7fca40458f', - signature: - '0xa5707105530a461c1632ef7a7847d8262cd4f26ad603e267825a998c448ac393a48fab406a1b8bab07a0dce021c273a305d0328b17bdc853111baad5112977a3e95a2f91fb7d1b143fa0022e07e62da9e7175abea68b15a211de1c8db5d1cc75', - merkleProof: [ - '0x07a08a7e18fe8e7f284f8270b6c3ae1f780d8643d312fda3b92ed62fb8e9a3d0', - '0xbfa04224f38f3f07c150ed0eb056d7d612d081e46954a3adf591039667abbaa1', - '0x409236559f2addf924723f13fdf3e6867ef4e5c87bf11896a159ca0c2b9ecccc', - '0x7d6711df91f76ae4361bb1e7b90070ed43b026418cdd9e73adc651a91ec040a1', - ], - }, - { - publicKey: - '0x8e44d45b2656a4a84b788866bbbf8274c12f52a36d47c1fc03f9988b11fe11a8cd4e03be207106feeee135b7b6c66aad', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0xa3bb4549fee8c577f121d17dcbab52fbaaa7342a8d7861575973c05408f9561d', - signature: - '0x9056037a087cf28892996e3e33b73f5554a6bcfc6688a79eb23aba93691d12dfe76e0cd6ca867f10adaba1d9f1539c73175829f8746141e864875e27bba37950f179075421112f33334c0bff8b3c64daf05bb2ffe60f9fb53a65f934c3889328', - merkleProof: [ - '0x124a3ce13fbc9d422794b234ff30a854b32a3d175ba4910aa57916a88791df39', - '0x71edb70330fe30fd386d48bddd88b92b5e1ca23a4638e227624777cfe943da18', - '0x409236559f2addf924723f13fdf3e6867ef4e5c87bf11896a159ca0c2b9ecccc', - '0x7d6711df91f76ae4361bb1e7b90070ed43b026418cdd9e73adc651a91ec040a1', - ], - }, - { - publicKey: - '0xafbcd1d40bd1f265342f23d4db678807959e8c4b3575ba479693265b33c3083bfd62cb5ecdf88d54e59d330f3dc5fb01', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0x30dba0d02692edc331c52bf221c81ce183f2750460a98ecfd4f50e9fecdaf82d', - signature: - '0x96f286db9a99b443aa7beb409a0896e3c4b724e9500970d6ffe3a1313c585c48a1fe4971a2b0aa849cb1a697acea137c080e4f7c4e488209061e44a0605f2448561ebb3c0f5d0c4c12873105e1a73c9fe550c2473a5085e1c0e96ed11b6430e3', - merkleProof: [ - '0x0989582502b4c9f40a0ca6e8006480a95dbdeb6da9668c3b0ae122b9f886d131', - '0xbfa04224f38f3f07c150ed0eb056d7d612d081e46954a3adf591039667abbaa1', - '0x409236559f2addf924723f13fdf3e6867ef4e5c87bf11896a159ca0c2b9ecccc', - '0x7d6711df91f76ae4361bb1e7b90070ed43b026418cdd9e73adc651a91ec040a1', - ], - }, - { - publicKey: - '0xa3f82c068ca69cb9696f3b99eed131884c9f6bd9eb6b395c9a7c187d83627e7f859cecb60f8ee7c5789bcea7e557a853', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0x62596a996f3e157131067db8e894689981059db15f441da0bd3348bf9c95700c', - signature: - '0x83e34d4907ac0e83a37492a943be7bca1cacbfb5801e51c67caddfffa2dc6ffb26337fc905bab9ee40365561d4531849036d01cf4ed4733f125b3ed56fe9335ef5d5ce5b0ae58bdb209231519f464891e359f8152ce98f1dbc5f98a3524488f9', - merkleProof: [ - '0xdf9a7186d319700dcf564b4f9ca1006b815d4bd03f096b61c042f6f65740f91c', - '0xf9d82b6415020d5762a00be524008b3eec1d230cf1e72a03dc416acc2f4fee70', - ], - }, - { - publicKey: - '0x94b00c20f4c00bd754502b3436e4e9e6da0d81edaede9da04112cbed90beb554a31c94e3157875fb64dc1e0dbefb9ce2', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0x6f89a72c64b998bc89bddd29f1d50a05b43a674b1084fdc2ca3f3f9f622497ce', - signature: - '0x904eead56c2fb5e9023e62759bacafef0869ba906978e3084fb3ad7c09073bbc3ddcd249f1eaad2b83d1f2fc3ca3af450d28f6f63405eb4b93336bbf5b883bba0c14f0a7d2e5aa18c9bd856d71bc590412be51bc38f53762ad741e3273404ded', - merkleProof: [ - '0x4205d651e6b9494b709014f5bc720d544161086418cd588cc9c7f3b76e1900de', - '0xb963f6a68457b6d5c8a8faa228b9d812e8429907a50f2cd2fbf5b68875a37379', - '0x307b1d09a6f5d0639a787fcf3f7b3d311f15ccaf20d4d255f2a3569abed4faa3', - '0x7d6711df91f76ae4361bb1e7b90070ed43b026418cdd9e73adc651a91ec040a1', - ], - }, - { - publicKey: - '0x85ff74a6384eb7852c3c4b855053e25bbb75e90897a474382cbc6568574c2393ec0995a059d82f22db6dd711ee6d2556', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0xb0ec80ea15586a41427fae095729b1750fd53affcd5987b52f5b8a798946243a', - signature: - '0x9996c3aea1cd7a63fe932164b823e90a1ca43b7627e123df2a9f07cdb82bb60796b579b21be8d99ba95323a93025270b17c18257c07b66caddd0835b8af674ce161c045d98974469bcca31aebcdcdf466427d51d3da75156a74a44b80e31f12a', - merkleProof: [ - '0x44de26ad0dabfcdd46d6716780bb1a44b04b0e9af5a5fcec567e14cb917171c5', - '0xb963f6a68457b6d5c8a8faa228b9d812e8429907a50f2cd2fbf5b68875a37379', - '0x307b1d09a6f5d0639a787fcf3f7b3d311f15ccaf20d4d255f2a3569abed4faa3', - '0x7d6711df91f76ae4361bb1e7b90070ed43b026418cdd9e73adc651a91ec040a1', - ], - }, - { - publicKey: - '0xa101956aa020ce896aa606b8dff7a91e0ec2429cdf2b62db8230612ecb7058bd733a644f8a607b6f050e179e4a881ff1', - withdrawalCredentials: - '0x0100000000000000000000002296e122c1a20fca3cac3371357bdad3be0df079', - depositDataRoot: - '0x1a850e672c25d06eb7535ef910d3dd70e9f8262f512685c2f76241e1883a500f', - signature: - '0xa2b3fdf97a9a0171a5869289d6b4d62006d754148234dbccf1ecb75e2db01f38933b9e9bec315a3a08f0af476edec75a0d6b9ef7a6979e0f4244f7e0af3d97f013603f920c59b15232e22fe9867da53b4473e7c4c7616de665075d5d9becb003', - merkleProof: [ - '0xa46d6a464ae9cd95edaae1ed5b0aaa9b23f24d43a2aa4e6ea94882fb6bfb15cf', - '0x8488179b936bfc7270a95b441ff36cf5ebb237ed814f1b67f367d6f9e26dbc06', - '0x307b1d09a6f5d0639a787fcf3f7b3d311f15ccaf20d4d255f2a3569abed4faa3', - '0x7d6711df91f76ae4361bb1e7b90070ed43b026418cdd9e73adc651a91ec040a1', - ], - }, -]; - -module.exports = { - initializeData, - initializeMerkleRoot, -}; diff --git a/test/pool/settings.test.js b/test/pool/settings.test.js index 80243325..533cb8fb 100644 --- a/test/pool/settings.test.js +++ b/test/pool/settings.test.js @@ -5,6 +5,7 @@ const { expectRevert, expectEvent, } = require('@openzeppelin/test-helpers'); +const { keccak256 } = require('ethers/lib/utils'); const { stopImpersonatingAccount, impersonateAccount, @@ -15,15 +16,17 @@ const { } = require('../utils'); const { upgradeContracts } = require('../../deployments'); const { contractSettings, contracts } = require('../../deployments/settings'); +const { depositDataMerkleRoot } = require('./depositDataMerkleRoot'); const Pool = artifacts.require('Pool'); const Oracles = artifacts.require('Oracles'); const PoolValidators = artifacts.require('PoolValidators'); const RewardEthToken = artifacts.require('RewardEthToken'); +const iDepositContract = artifacts.require('IDepositContract'); contract('Pool (settings)', ([operator, anyone, ...otherAccounts]) => { const admin = contractSettings.admin; - let pool, oracles, oracleAccounts, rewardEthToken, validators; + let pool, oracles, oracleAccounts, rewardEthToken, validatorsCount; after(async () => stopImpersonatingAccount(admin)); @@ -32,9 +35,23 @@ contract('Pool (settings)', ([operator, anyone, ...otherAccounts]) => { await send.ether(anyone, admin, ether('5')); let upgradedContracts = await upgradeContracts(); - + let validators = await PoolValidators.at(upgradedContracts.poolValidators); + await validators.addOperator( + operator, + depositDataMerkleRoot, + 'ipfs://QmSTP443zR6oKnYVRE23RARyuuzwhhaidUiSXyRTsw3pDs', + { + from: admin, + } + ); + await validators.commitOperator({ + from: operator, + }); pool = await Pool.at(contracts.pool); - validators = await PoolValidators.at(upgradedContracts.poolValidators); + let depositContract = await iDepositContract.at( + await pool.validatorRegistration() + ); + validatorsCount = keccak256(await depositContract.get_deposit_count()); oracles = await Oracles.at(upgradedContracts.oracles); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); oracleAccounts = await setupOracleAccounts({ @@ -141,11 +158,10 @@ contract('Pool (settings)', ([operator, anyone, ...otherAccounts]) => { value: ether('32'), }); await registerValidator({ - admin, - validators, operator, oracles, oracleAccounts, + validatorsCount, }); let activatedValidators = await pool.activatedValidators(); diff --git a/test/pool/stake.test.js b/test/pool/stake.test.js index 02b33aea..a686b763 100644 --- a/test/pool/stake.test.js +++ b/test/pool/stake.test.js @@ -19,12 +19,17 @@ const { const { upgradeContracts } = require('../../deployments'); const { contractSettings, contracts } = require('../../deployments/settings'); const { checkStakedEthToken } = require('../utils'); -const { initializeData } = require('./initializeMerkleRoot'); +const { + depositData, + depositDataMerkleRoot, +} = require('./depositDataMerkleRoot'); +const { keccak256 } = require('ethers/lib/utils'); const Pool = artifacts.require('Pool'); const StakedEthToken = artifacts.require('StakedEthToken'); const PoolValidators = artifacts.require('PoolValidators'); const Oracles = artifacts.require('Oracles'); +const iDepositContract = artifacts.require('IDepositContract'); contract('Pool (stake)', (accounts) => { const admin = contractSettings.admin; @@ -37,7 +42,9 @@ contract('Pool (stake)', (accounts) => { totalSupply, poolBalance, activatedValidators, - pendingValidators; + pendingValidators, + depositContract, + validatorsCount; after(async () => stopImpersonatingAccount(admin)); @@ -55,6 +62,21 @@ contract('Pool (stake)', (accounts) => { oracles, accounts: otherAccounts, }); + depositContract = await iDepositContract.at( + await pool.validatorRegistration() + ); + validatorsCount = keccak256(await depositContract.get_deposit_count()); + await validators.addOperator( + operator, + depositDataMerkleRoot, + 'ipfs://QmSTP443zR6oKnYVRE23RARyuuzwhhaidUiSXyRTsw3pDs', + { + from: admin, + } + ); + await validators.commitOperator({ + from: operator, + }); totalSupply = await stakedEthToken.totalSupply(); poolBalance = await balance.current(pool.address); @@ -398,6 +420,7 @@ contract('Pool (stake)', (accounts) => { oracles, oracleAccounts, operator, + validatorsCount, }); }); @@ -510,7 +533,7 @@ contract('Pool (stake)', (accounts) => { oracles, oracleAccounts, operator, - depositDataIndex: 0, + validatorsCount, }); await registerValidator({ admin, @@ -518,7 +541,12 @@ contract('Pool (stake)', (accounts) => { oracles, oracleAccounts, operator, - depositDataIndex: 1, + merkleProof: depositData[1].merkleProof, + signature: depositData[1].signature, + publicKey: depositData[1].publicKey, + withdrawalCredentials: depositData[1].withdrawalCredentials, + depositDataRoot: depositData[1].depositDataRoot, + validatorsCount: keccak256(await depositContract.get_deposit_count()), }); }); @@ -617,31 +645,11 @@ contract('Pool (stake)', (accounts) => { }); }); - it('only PoolValidators contract can initialize new validators', async () => { - const { publicKey, signature, withdrawalCredentials, depositDataRoot } = - initializeData[0]; - await expectRevert( - pool.initializeValidator( - { - operator, - withdrawalCredentials, - depositDataRoot, - publicKey, - signature, - }, - { - from: sender1, - } - ), - 'Pool: access denied' - ); - }); - - it('only PoolValidators contract can finalize new validators', async () => { + it('only PoolValidators contract can register new validators', async () => { const { publicKey, signature, withdrawalCredentials, depositDataRoot } = - initializeData[0]; + depositData[0]; await expectRevert( - pool.finalizeValidator( + pool.registerValidator( { operator, withdrawalCredentials, diff --git a/test/utils.js b/test/utils.js index cd041add..5f7616c4 100644 --- a/test/utils.js +++ b/test/utils.js @@ -1,20 +1,10 @@ const { expect } = require('chai'); const hre = require('hardhat'); const { hexlify, keccak256, defaultAbiCoder } = require('ethers/lib/utils'); -const { - BN, - ether, - expectEvent, - constants, -} = require('@openzeppelin/test-helpers'); -const { - initializeMerkleRoot, - initializeData, -} = require('./pool/initializeMerkleRoot'); -const { - finalizeMerkleRoot, - finalizeData, -} = require('./pool/finalizeMerkleRoot'); +const { BN, ether, expectEvent } = require('@openzeppelin/test-helpers'); +const { depositData } = require('./pool/depositDataMerkleRoot'); + +const iDepositContract = artifacts.require('IDepositContract'); function getDepositAmount({ min = new BN('1'), max = ether('1000') } = {}) { return ether(Math.random().toFixed(8)) @@ -24,7 +14,6 @@ function getDepositAmount({ min = new BN('1'), max = ether('1000') } = {}) { } async function checkValidatorRegistered({ - vrc, transaction, pubKey, signature, @@ -32,17 +21,22 @@ async function checkValidatorRegistered({ validatorDepositAmount = ether('32'), }) { // Check VRC record created - await expectEvent.inTransaction(transaction, vrc, 'DepositEvent', { - pubkey: pubKey, - withdrawal_credentials: withdrawalCredentials, - amount: web3.utils.bytesToHex( - new BN(web3.utils.fromWei(validatorDepositAmount, 'gwei')).toArray( - 'le', - 8 - ) - ), - signature: signature, - }); + await expectEvent.inTransaction( + transaction, + iDepositContract, + 'DepositEvent', + { + pubkey: pubKey, + withdrawal_credentials: withdrawalCredentials, + amount: web3.utils.bytesToHex( + new BN(web3.utils.fromWei(validatorDepositAmount, 'gwei')).toArray( + 'le', + 8 + ) + ), + signature: signature, + } + ); } async function checkStakedEthToken({ @@ -202,56 +196,21 @@ async function setMerkleRoot({ }); } -async function initializeValidator({ - operator, - merkleProof, - signature, - publicKey, - withdrawalCredentials, - depositDataRoot, - oracles, - oracleAccounts, -}) { - let nonce = await oracles.currentValidatorsNonce(); - let encoded = defaultAbiCoder.encode( - ['uint256', 'bytes', 'address'], - [nonce.toString(), publicKey, operator] - ); - let candidateId = hexlify(keccak256(encoded)); - - // prepare signatures - let signatures = []; - for (let i = 0; i < oracleAccounts.length; i++) { - await impersonateAccount(oracleAccounts[i]); - let sig = await web3.eth.sign(candidateId, oracleAccounts[i]); - signatures.push(sig); - } - - // initialize validator - return oracles.initializeValidator( - { operator, withdrawalCredentials, depositDataRoot, publicKey, signature }, - merkleProof, - signatures, - { - from: oracleAccounts[0], - } - ); -} - -async function finalizeValidator({ +async function registerValidator({ operator, - merkleProof, - signature, - publicKey, - withdrawalCredentials, - depositDataRoot, + merkleProof = depositData[0].merkleProof, + signature = depositData[0].signature, + publicKey = depositData[0].publicKey, + withdrawalCredentials = depositData[0].withdrawalCredentials, + depositDataRoot = depositData[0].depositDataRoot, oracles, oracleAccounts, + validatorsCount, }) { let nonce = await oracles.currentValidatorsNonce(); let encoded = defaultAbiCoder.encode( - ['uint256', 'bytes', 'address'], - [nonce.toString(), publicKey, operator] + ['uint256', 'bytes', 'address', 'bytes32'], + [nonce.toString(), publicKey, operator, validatorsCount] ); let candidateId = hexlify(keccak256(encoded)); @@ -263,10 +222,11 @@ async function finalizeValidator({ signatures.push(sig); } - // finalize validator - return oracles.finalizeValidator( + // register validator + return oracles.registerValidator( { operator, withdrawalCredentials, depositDataRoot, publicKey, signature }, merkleProof, + validatorsCount, signatures, { from: oracleAccounts[0], @@ -274,78 +234,6 @@ async function finalizeValidator({ ); } -async function registerValidator({ - admin, - validators, - operator, - oracles, - oracleAccounts, - initializeMerkleProofs = 'ipfs://QmSYduvpsJp7bo3xenRK3qDdoLkzWcvVeU3U16v1n3Cb5d', - finalizeMerkleProofs = 'ipfs://QmSTP443zR6oKnYVRE23RARyuuzwhhaidUiSXyRTsw3pDs', - initAmount = ether('1'), - depositDataIndex = 0, -}) { - if ((await validators.getOperator(operator))[0] === constants.ZERO_BYTES32) { - await validators.addOperator( - operator, - initializeMerkleRoot, - initializeMerkleProofs, - finalizeMerkleRoot, - finalizeMerkleProofs, - { - from: admin, - } - ); - - if ((await validators.collaterals(operator)).lt(initAmount)) { - await validators.commitOperator({ - value: initAmount, - from: operator, - }); - } else { - await validators.commitOperator({ - from: operator, - }); - } - } - - let { - publicKey, - signature, - withdrawalCredentials, - merkleProof, - depositDataRoot, - } = initializeData[depositDataIndex]; - await initializeValidator({ - operator, - merkleProof, - signature, - publicKey, - depositDataRoot, - oracles, - oracleAccounts, - withdrawalCredentials, - }); - - ({ - publicKey, - signature, - withdrawalCredentials, - merkleProof, - depositDataRoot, - } = finalizeData[depositDataIndex]); - await finalizeValidator({ - operator, - merkleProof, - signature, - publicKey, - depositDataRoot, - oracles, - oracleAccounts, - withdrawalCredentials, - }); -} - async function impersonateAccount(account) { return hre.network.provider.request({ method: 'hardhat_impersonateAccount', @@ -411,7 +299,5 @@ module.exports = { setTotalRewards, setMerkleRoot, setupOracleAccounts, - initializeValidator, - finalizeValidator, registerValidator, }; From 2a7d75889732831e1ff2f03d945a8dc445f21824 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Sun, 19 Dec 2021 15:26:38 +0200 Subject: [PATCH 43/55] Upgrade goerli contracts --- .circleci/config.yml | 2 +- .openzeppelin/goerli.json | 2349 ++++--------------------------------- deployments/settings.js | 5 +- networks/goerli.md | 8 +- 4 files changed, 221 insertions(+), 2143 deletions(-) diff --git a/.circleci/config.yml b/.circleci/config.yml index ff737026..bdee3890 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -58,7 +58,7 @@ jobs: test: executor: default resource_class: large - parallelism: 8 + parallelism: 16 steps: - checkout - attach_workspace: diff --git a/.openzeppelin/goerli.json b/.openzeppelin/goerli.json index 2ef971a9..c45f1643 100755 --- a/.openzeppelin/goerli.json +++ b/.openzeppelin/goerli.json @@ -5,11 +5,6 @@ "txHash": "0x8f4bd6ede50b7fc589807a9277c3cd2624d2b5b4f9cda20b589aa2cb8b5a0cc5" }, "proxies": [ - { - "address": "0xE2F13059454b626e42e04845815E9Ed2E9774bF3", - "txHash": "0x9a5736954e33ca69b290d07d804114ea7aa4817a871b9940a19a87e3a9958974", - "kind": "transparent" - }, { "address": "0x8c1EfEcFb5c4F1099AB0460b5659342943764Df7", "txHash": "0x35323b9efb3871df2852134fc15c76dba1233a665d8f3224c48e4ef55e9f1232", @@ -30,11 +25,6 @@ "txHash": "0xa4e348e58f8144e3cf6973983001e7fb6e74f0bb423f5a37ba87c686cf178314", "kind": "transparent" }, - { - "address": "0xE54486fa4eB45716c5725d7A46FDDe810B8E8914", - "txHash": "0xf8ef8983fb157d8606e06a9ccedd4a6b057d170f0871961e285d84957a7f246c", - "kind": "transparent" - }, { "address": "0xbA91cdD484893c1f8F75DB55733ccaDcd0fE5f59", "txHash": "0xdcb1d1dfbb6a0bdfe5f2dfd9cc83a91f1a3e0fefd6c655f3afa6f3a29a012d7f", @@ -46,241 +36,44 @@ "kind": "transparent" }, { - "address": "0x0d92156861a0BC7037cC21470327Bd3Bc750EB1D", - "txHash": "0x077b6fc63754433799822e20eb6b42f6b213f296f2a2bb80ef4fb402ede6161a", + "address": "0x81aaa59d7d1000A56326Bb577DEbc287Cbd351cC", + "txHash": "0x2e40569f3f18456efca62180037dfb98be4746ad9161cf77dc0107dc11c6fda3", "kind": "transparent" }, { - "address": "0x06b0C9476315634dCc59AA3F3f7d5Df6feCbAa90", - "txHash": "0x133190b18ed0ac25af41a156eabaf3c82aa470c87ed9266c896f99a1ef858c10", + "address": "0x908C06aFfda0fFDbB4578629aA8cCff372e510b6", + "txHash": "0x49c85d3d890580fe2412c432f30b4bed5881c94c70ffdbe470fcffe9b27ead3c", "kind": "transparent" }, { - "address": "0x81aaa59d7d1000A56326Bb577DEbc287Cbd351cC", - "txHash": "0x2e40569f3f18456efca62180037dfb98be4746ad9161cf77dc0107dc11c6fda3", + "address": "0x4bBaA17eFd71683dCb9C769DD38E7674994FE38d", + "txHash": "0xcbccb5aaac5d7ec139cd211eba24e89651d8e6713d2622f70d9fb97f5584e7eb", "kind": "transparent" } ], "impls": { - "84dece82968538be3061b96eba9ebf393b48892f1cc2d730d20711cfa3f49e86": { - "address": "0x70318289179C01FdBcce8c4071c6556cbd2C613b", - "txHash": "0xbd0644fa6410d20a83a4535379a65c844cf8289ad9acba9f592575b3a6d25954", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Validators", - "label": "publicKeys", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Validators.sol:19" - }, - { - "contract": "Validators", - "label": "pool", - "type": "t_address", - "src": "contracts/Validators.sol:22" - }, - { - "contract": "Validators", - "label": "solos", - "type": "t_address", - "src": "contracts/Validators.sol:25" - } - ], - "types": { - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "3c2ba5b01bcebe2c48833d843424b7dbcdfa3752334326296bfeb99eab2e4b99": { - "address": "0x50C3723bBF5074CD9Da1754713d1F48C38B26Da1", - "txHash": "0x3cafe0b96a077d80ba53ba620ed38e845be67eec730465b992ddd6562cb84101", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Pool", - "label": "collectedAmount", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:25" - }, - { - "contract": "Pool", - "label": "withdrawalCredentials", - "type": "t_bytes32", - "src": "contracts/collectors/Pool.sol:28" - }, - { - "contract": "Pool", - "label": "validatorRegistration", - "type": "t_contract(IDepositContract)4685", - "src": "contracts/collectors/Pool.sol:31" - }, - { - "contract": "Pool", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)5227", - "src": "contracts/collectors/Pool.sol:34" - }, - { - "contract": "Pool", - "label": "validators", - "type": "t_contract(IValidators)5275", - "src": "contracts/collectors/Pool.sol:37" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_contract(IDepositContract)4685": { - "label": "contract IDepositContract" - }, - "t_contract(IStakedEthToken)5227": { - "label": "contract IStakedEthToken" - }, - "t_contract(IValidators)5275": { - "label": "contract IValidators" - }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "3a535bc8d9b69aa26341824b12caf3d267e2712fbe4e4a0e389fb306a6ff29c8": { - "address": "0x2bC925698e1Dba66541f7529F0D7d59632bEA695", - "txHash": "0x862d4631f3df71551a4631bb105d10fec96e5888f114c7d2763bebd2997eda49", + "92f2fa955a8b14d88f0d6bdccad2dac5752f89ba4a34c06d54a6512633c9c628": { + "address": "0x6DEf201461DcA70f7fEB757FBADFF9c34a240bfC", + "txHash": "0xd82302d4bbd39547684b3dc5289cc3b00b0d74228c79d0cc16adc98b9347fbe0", "layout": { "storage": [ { "contract": "Initializable", "label": "_initialized", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" }, { "contract": "Initializable", "label": "_initializing", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, { "contract": "ContextUpgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" }, { "contract": "PausableUpgradeable", @@ -297,7 +90,7 @@ { "contract": "AccessControlUpgradeable", "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" }, { @@ -334,85 +127,79 @@ "contract": "ERC20Upgradeable", "label": "__gap", "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:223" + "src": "contracts/tokens/ERC20Upgradeable.sol:225" }, { "contract": "EIP712Upgradeable", "label": "_HASHED_NAME", "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:27" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" }, { "contract": "EIP712Upgradeable", "label": "_HASHED_VERSION", "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:28" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" }, { "contract": "EIP712Upgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "contracts/tokens/EIP712Upgradeable.sol:124" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" }, { "contract": "ERC20PermitUpgradeable", "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)951_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:24" + "type": "t_mapping(t_address,t_struct(Counter)1710_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" }, { "contract": "ERC20PermitUpgradeable", "label": "_PERMIT_TYPEHASH", "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:27" + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" }, { "contract": "ERC20PermitUpgradeable", "label": "__gap", "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:86" - }, - { - "contract": "StakedEthToken", - "label": "totalDeposits", - "type": "t_uint256", - "src": "contracts/tokens/StakedEthToken.sol:20" + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" }, { - "contract": "StakedEthToken", - "label": "deposits", + "contract": "StakeWiseToken", + "label": "_balances", "type": "t_mapping(t_address,t_uint256)", - "src": "contracts/tokens/StakedEthToken.sol:23" - }, - { - "contract": "StakedEthToken", - "label": "pool", - "type": "t_address", - "src": "contracts/tokens/StakedEthToken.sol:26" + "src": "contracts/tokens/StakeWiseToken.sol:15" }, { - "contract": "StakedEthToken", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)5069", - "src": "contracts/tokens/StakedEthToken.sol:29" + "contract": "StakeWiseToken", + "label": "_totalSupply", + "type": "t_uint256", + "src": "contracts/tokens/StakeWiseToken.sol:17" } ], "types": { - "t_uint256": { - "label": "uint256" - }, "t_mapping(t_address,t_uint256)": { "label": "mapping(address => uint256)" }, "t_address": { "label": "address" }, - "t_contract(IRewardEthToken)5069": { - "label": "contract IRewardEthToken" + "t_uint256": { + "label": "uint256" }, - "t_mapping(t_address,t_struct(Counter)951_storage)": { + "t_mapping(t_address,t_struct(Counter)1710_storage)": { "label": "mapping(address => struct CountersUpgradeable.Counter)" }, + "t_struct(Counter)1710_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, "t_bytes32": { "label": "bytes32" }, @@ -434,1197 +221,21 @@ "t_array(t_uint256)44_storage": { "label": "uint256[44]" }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, - "t_bool": { - "label": "bool" - } - } - } - }, - "5370a49c5717f9aacd12db411bd25748fae480eab79cf2712c7c5c3aa1295a90": { - "address": "0x209272625648DCA2077530Ef152081d1bB8a0bF7", - "txHash": "0xa60095d5c63718ed32ee0a2fa4fdf5132e294573781171372566a72c699049d0", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:223" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", - "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:27" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:28" - }, - { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "contracts/tokens/EIP712Upgradeable.sol:124" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)951_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:24" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:27" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:86" - }, - { - "contract": "RewardEthToken", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)5227", - "src": "contracts/tokens/RewardEthToken.sol:22" - }, - { - "contract": "RewardEthToken", - "label": "oracles", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:25" - }, - { - "contract": "RewardEthToken", - "label": "checkpoints", - "type": "t_mapping(t_address,t_struct(Checkpoint)4971_storage)", - "src": "contracts/tokens/RewardEthToken.sol:28" - }, - { - "contract": "RewardEthToken", - "label": "maintainer", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:31" - }, - { - "contract": "RewardEthToken", - "label": "maintainerFee", - "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:34" - }, - { - "contract": "RewardEthToken", - "label": "totalRewards", - "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:37" - }, - { - "contract": "RewardEthToken", - "label": "rewardPerToken", - "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:40" - }, - { - "contract": "RewardEthToken", - "label": "lastUpdateTimestamp", - "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:43" - } - ], - "types": { - "t_contract(IStakedEthToken)5227": { - "label": "contract IStakedEthToken" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_struct(Checkpoint)4971_storage)": { - "label": "mapping(address => struct IRewardEthToken.Checkpoint)" - }, - "t_uint256": { - "label": "uint256" - }, - "t_uint128": { - "label": "uint128" - }, - "t_mapping(t_address,t_struct(Counter)951_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" - }, - "t_string_storage": { - "label": "string" - }, - "t_uint8": { - "label": "uint8" - }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" - }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_bool": { - "label": "bool" - } - } - } - }, - "e43b57215f4a8a0604ed9cf0c3db3ee217fca96cdd0c8807f931fc346c88ee96": { - "address": "0x45903E6De7Ee93e99Ae57DD1dCB4dDe61131F2bd", - "txHash": "0xc6fd0d563aebc0497f3be45b4129c3aa3fb188f6439870d9bb7f224e5f292177", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Oracles", - "label": "totalRewardsUpdatePeriod", - "type": "t_uint256", - "src": "contracts/Oracles.sol:26" - }, - { - "contract": "Oracles", - "label": "candidates", - "type": "t_mapping(t_bytes32,t_uint256)", - "src": "contracts/Oracles.sol:29" - }, - { - "contract": "Oracles", - "label": "rewardEthUniswapPairs", - "type": "t_array(t_address)dyn_storage", - "src": "contracts/Oracles.sol:32" - }, - { - "contract": "Oracles", - "label": "submittedVotes", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Oracles.sol:35" - }, - { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)5069", - "src": "contracts/Oracles.sol:38" - }, - { - "contract": "Oracles", - "label": "totalRewardsNonce", - "type": "t_struct(Counter)951_storage", - "src": "contracts/Oracles.sol:41" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" - }, - "t_contract(IRewardEthToken)5069": { - "label": "contract IRewardEthToken" - }, - "t_struct(Counter)951_storage": { - "label": "struct CountersUpgradeable.Counter" - }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "0b75bd82778d4c360318bd59e498ceb95499641b67ab7608cee37b6c643a88ab": { - "address": "0x5b05Eec8910f8d84e64184E87E936E895DCF144F", - "txHash": "0x8ceb025474907ef8ba97ae81405794ab3d572844e517562715deb54fbbfd2e01", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Pool", - "label": "activatedValidators", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:25" - }, - { - "contract": "Pool", - "label": "withdrawalCredentials", - "type": "t_bytes32", - "src": "contracts/collectors/Pool.sol:28" - }, - { - "contract": "Pool", - "label": "validatorRegistration", - "type": "t_contract(IDepositContract)5174", - "src": "contracts/collectors/Pool.sol:31" - }, - { - "contract": "Pool", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)5810", - "src": "contracts/collectors/Pool.sol:34" - }, - { - "contract": "Pool", - "label": "validators", - "type": "t_contract(IValidators)5858", - "src": "contracts/collectors/Pool.sol:37" - }, - { - "contract": "Pool", - "label": "oracles", - "type": "t_address", - "src": "contracts/collectors/Pool.sol:40" - }, - { - "contract": "Pool", - "label": "activations", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", - "src": "contracts/collectors/Pool.sol:43" - }, - { - "contract": "Pool", - "label": "pendingValidators", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:46" - }, - { - "contract": "Pool", - "label": "minActivatingDeposit", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:49" - }, - { - "contract": "Pool", - "label": "pendingValidatorsLimit", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:52" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_contract(IDepositContract)5174": { - "label": "contract IDepositContract" - }, - "t_contract(IStakedEthToken)5810": { - "label": "contract IStakedEthToken" - }, - "t_contract(IValidators)5858": { - "label": "contract IValidators" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "label": "mapping(address => mapping(uint256 => uint256))" - }, - "t_mapping(t_uint256,t_uint256)": { - "label": "mapping(uint256 => uint256)" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)1421_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)1421_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1156_storage" - } - ] - }, - "t_struct(Set)1156_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "88b20c6014e9428305028f15b31ccca5163a9836c693c992172ff3122e72bab3": { - "address": "0x35e467609D1982BCd7EcAff4e3f1fb22640CF4EF", - "txHash": "0x3922f5ae602033e445f8e191c522d4696a7834c83a03dbb7b548975e6734d015", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Oracles", - "label": "syncPeriod", - "type": "t_uint256", - "src": "contracts/Oracles.sol:26" - }, - { - "contract": "Oracles", - "label": "candidates", - "type": "t_mapping(t_bytes32,t_uint256)", - "src": "contracts/Oracles.sol:29" - }, - { - "contract": "Oracles", - "label": "rewardEthUniswapPairs", - "type": "t_array(t_address)dyn_storage", - "src": "contracts/Oracles.sol:32" - }, - { - "contract": "Oracles", - "label": "submittedVotes", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Oracles.sol:35" - }, - { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)5652", - "src": "contracts/Oracles.sol:38" - }, - { - "contract": "Oracles", - "label": "nonce", - "type": "t_struct(Counter)1105_storage", - "src": "contracts/Oracles.sol:41" - }, - { - "contract": "Oracles", - "label": "pool", - "type": "t_contract(IPool)5533", - "src": "contracts/Oracles.sol:44" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" - }, - "t_bool": { - "label": "bool" - }, - "t_contract(IRewardEthToken)5652": { - "label": "contract IRewardEthToken" - }, - "t_struct(Counter)1105_storage": { - "label": "struct CountersUpgradeable.Counter", - "members": [ - { - "label": "_value", - "type": "t_uint256" - } - ] - }, - "t_contract(IPool)5533": { - "label": "contract IPool" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)1421_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)1421_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1156_storage" - } - ] - }, - "t_struct(Set)1156_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "92f2fa955a8b14d88f0d6bdccad2dac5752f89ba4a34c06d54a6512633c9c628": { - "address": "0x6DEf201461DcA70f7fEB757FBADFF9c34a240bfC", - "txHash": "0xd82302d4bbd39547684b3dc5289cc3b00b0d74228c79d0cc16adc98b9347fbe0", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:225" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" - }, - { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)1710_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" - }, - { - "contract": "StakeWiseToken", - "label": "_balances", - "type": "t_mapping(t_address,t_uint256)", - "src": "contracts/tokens/StakeWiseToken.sol:15" - }, - { - "contract": "StakeWiseToken", - "label": "_totalSupply", - "type": "t_uint256", - "src": "contracts/tokens/StakeWiseToken.sol:17" - } - ], - "types": { - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)" - }, - "t_address": { - "label": "address" - }, - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_address,t_struct(Counter)1710_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, - "t_struct(Counter)1710_storage": { - "label": "struct CountersUpgradeable.Counter", - "members": [ - { - "label": "_value", - "type": "t_uint256" - } - ] - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" - }, - "t_string_storage": { - "label": "string" - }, - "t_uint8": { - "label": "uint8" - }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)2026_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)2026_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1761_storage" - } - ] - }, - "t_struct(Set)1761_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_bool": { - "label": "bool" - } - } - } - }, - "de2b2b9599ed08c7b524042f3efbe7c2d5a43aedd25613e6c7d209c01cbbbbd5": { - "address": "0xb809AA5a1025170F09B3E3b31fDD8a93ac04da5e", - "txHash": "0x2b29d740ba4ebdcc5cc5ec417d78ce90d304375014e4bb7294b215c75be7fa48", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "VestingEscrowFactory", - "label": "escrowImplementation", - "type": "t_address", - "src": "contracts/vestings/VestingEscrowFactory.sol:27" - }, - { - "contract": "VestingEscrowFactory", - "label": "escrows", - "type": "t_mapping(t_address,t_array(t_address)dyn_storage)", - "src": "contracts/vestings/VestingEscrowFactory.sol:30" - } - ], - "types": { - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_array(t_address)dyn_storage)": { - "label": "mapping(address => address[])" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)2026_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)2026_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1761_storage" - } - ] - }, - "t_struct(Set)1761_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_uint256": { - "label": "uint256" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "7e326bc95738472f562a024cfb314277973b02dece8afdcc5ca2556ffbfd9d70": { - "address": "0x1BBf89F4Dc9913FCC14EF5A336A1d8C23Ccb74E3", - "txHash": "0x4a62b639e881e498f6e7128092f866ef3b660a8d3a61afa27f3b250867a61ef8", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "VestingEscrowFactory", - "label": "escrowImplementation", - "type": "t_address", - "src": "contracts/vestings/VestingEscrowFactory.sol:27" - }, - { - "contract": "VestingEscrowFactory", - "label": "escrows", - "type": "t_mapping(t_address,t_array(t_address)dyn_storage)", - "src": "contracts/vestings/VestingEscrowFactory.sol:30" - } - ], - "types": { - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_array(t_address)dyn_storage)": { - "label": "mapping(address => address[])" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)2026_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2026_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] }, "t_struct(AddressSet)2026_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", @@ -1654,177 +265,15 @@ "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" }, - "t_uint256": { - "label": "uint256" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "97347223e792bf368d6a6c9d760d82b455a5edc1629dff43cd9ce0e019b9b25f": { - "address": "0xc20DB27e61dAe99Cd53F920A06a0E7CEA2C3e4ba", - "txHash": "0x3bfea9caef4d0efe3fe9cf5a07828847ac15a770678d88be861d01fc69fdb825", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "MerkleDistributor", - "label": "merkleRoot", - "type": "t_bytes32", - "src": "contracts/merkles/MerkleDistributor.sol:24" - }, - { - "contract": "MerkleDistributor", - "label": "rewardEthToken", - "type": "t_address", - "src": "contracts/merkles/MerkleDistributor.sol:27" - }, - { - "contract": "MerkleDistributor", - "label": "oracles", - "type": "t_contract(IOracles)7086", - "src": "contracts/merkles/MerkleDistributor.sol:30" - }, - { - "contract": "MerkleDistributor", - "label": "lastUpdateBlockNumber", - "type": "t_uint256", - "src": "contracts/merkles/MerkleDistributor.sol:33" - }, - { - "contract": "MerkleDistributor", - "label": "_claimedBitMap", - "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", - "src": "contracts/merkles/MerkleDistributor.sol:36" - } - ], - "types": { - "t_bytes32": { - "label": "bytes32" - }, - "t_address": { - "label": "address" - }, - "t_contract(IOracles)7086": { - "label": "contract IOracles" - }, - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { - "label": "mapping(bytes32 => mapping(uint256 => uint256))" - }, - "t_mapping(t_uint256,t_uint256)": { - "label": "mapping(uint256 => uint256)" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)2097_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)2097_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1832_storage" - } - ] - }, - "t_struct(Set)1832_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, "t_bool": { "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" } } } }, - "e247ded034d97f4fdf5b6153b98d324eea7cea56c6a61778ccd352dbbdad19ee": { - "address": "0x49A8F635670A38153fE59B500F84cf155E5941CD", - "txHash": "0x70cedccd428127d85073912a66a2d9aadb8119638f65772a54818a9f937d01cd", + "7e326bc95738472f562a024cfb314277973b02dece8afdcc5ca2556ffbfd9d70": { + "address": "0x1BBf89F4Dc9913FCC14EF5A336A1d8C23Ccb74E3", + "txHash": "0x4a62b639e881e498f6e7128092f866ef3b660a8d3a61afa27f3b250867a61ef8", "layout": { "storage": [ { @@ -1882,103 +331,40 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "Oracles", - "label": "syncPeriod", - "type": "t_uint256", - "src": "contracts/Oracles.sol:27" - }, - { - "contract": "Oracles", - "label": "candidates", - "type": "t_mapping(t_bytes32,t_uint256)", - "src": "contracts/Oracles.sol:30" - }, - { - "contract": "Oracles", - "label": "rewardEthUniswapPairs", - "type": "t_array(t_address)dyn_storage", - "src": "contracts/Oracles.sol:33" - }, - { - "contract": "Oracles", - "label": "submittedVotes", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Oracles.sol:36" - }, - { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)7534", - "src": "contracts/Oracles.sol:39" - }, - { - "contract": "Oracles", - "label": "nonce", - "type": "t_struct(Counter)1781_storage", - "src": "contracts/Oracles.sol:42" - }, - { - "contract": "Oracles", - "label": "pool", - "type": "t_contract(IPool)7323", - "src": "contracts/Oracles.sol:45" + "contract": "VestingEscrowFactory", + "label": "escrowImplementation", + "type": "t_address", + "src": "contracts/vestings/VestingEscrowFactory.sol:27" }, { - "contract": "Oracles", - "label": "merkleDistributor", - "type": "t_contract(IMerkleDistributor)6883", - "src": "contracts/Oracles.sol:48" + "contract": "VestingEscrowFactory", + "label": "escrows", + "type": "t_mapping(t_address,t_array(t_address)dyn_storage)", + "src": "contracts/vestings/VestingEscrowFactory.sol:30" } ], "types": { - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, "t_address": { "label": "address" }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" - }, - "t_bool": { - "label": "bool" - }, - "t_contract(IRewardEthToken)7534": { - "label": "contract IRewardEthToken" - }, - "t_struct(Counter)1781_storage": { - "label": "struct CountersUpgradeable.Counter", - "members": [ - { - "label": "_value", - "type": "t_uint256" - } - ] - }, - "t_contract(IPool)7323": { - "label": "contract IPool" + "t_mapping(t_address,t_array(t_address)dyn_storage)": { + "label": "mapping(address => address[])" }, - "t_contract(IMerkleDistributor)6883": { - "label": "contract IMerkleDistributor" + "t_array(t_address)dyn_storage": { + "label": "address[]" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, + "t_bytes32": { + "label": "bytes32" + }, "t_struct(RoleData)39_storage": { "label": "struct AccessControlUpgradeable.RoleData", "members": [ { "label": "members", - "type": "t_struct(AddressSet)2097_storage" + "type": "t_struct(AddressSet)2026_storage" }, { "label": "adminRole", @@ -1986,16 +372,16 @@ } ] }, - "t_struct(AddressSet)2097_storage": { + "t_struct(AddressSet)2026_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1832_storage" + "type": "t_struct(Set)1761_storage" } ] }, - "t_struct(Set)1832_storage": { + "t_struct(Set)1761_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -2011,9 +397,18 @@ "t_array(t_bytes32)dyn_storage": { "label": "bytes32[]" }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_uint256": { + "label": "uint256" + }, "t_array(t_uint256)49_storage": { "label": "uint256[49]" }, + "t_bool": { + "label": "bool" + }, "t_array(t_uint256)50_storage": { "label": "uint256[50]" } @@ -2260,9 +655,9 @@ } } }, - "ffaa1d87d4edbb0fd66d5a7c5ca9b84aae9982f5b92e4ba1f27d1237331caddf": { - "address": "0x9BA7d72a9fb92e15863E3604F7B14B51CC56fCbD", - "txHash": "0x9b4f98101035190cc56dcbcbdadd9a5e051dffe5625fda5da7615ee2ae9d894f", + "c16e4b952994fa08e80e4e9254ad6dc7b05d9eb6dc641438f4281b10e5e5ad70": { + "address": "0xc20d2dD754496fA82Bfdd580863ca231a65C4A8A", + "txHash": "0xf2cc0ab1140c8aadba3fa79eaddca7b41b897c4c76cebd7712ec8106f3b623c5", "layout": { "storage": [ { @@ -2306,208 +701,15 @@ "label": "__gap", "type": "t_array(t_uint256)49_storage", "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:225" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" - }, - { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" - }, - { - "contract": "RewardEthToken", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)7696", - "src": "contracts/tokens/RewardEthToken.sol:24" - }, - { - "contract": "RewardEthToken", - "label": "oracles", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:27" - }, - { - "contract": "RewardEthToken", - "label": "checkpoints", - "type": "t_mapping(t_address,t_struct(Checkpoint)7408_storage)", - "src": "contracts/tokens/RewardEthToken.sol:30" - }, - { - "contract": "RewardEthToken", - "label": "maintainer", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:33" - }, - { - "contract": "RewardEthToken", - "label": "maintainerFee", - "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:36" - }, - { - "contract": "RewardEthToken", - "label": "totalRewards", - "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:39" - }, - { - "contract": "RewardEthToken", - "label": "rewardPerToken", - "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:42" - }, - { - "contract": "RewardEthToken", - "label": "lastUpdateBlockNumber", - "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:45" - }, - { - "contract": "RewardEthToken", - "label": "merkleDistributor", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:48" - }, - { - "contract": "RewardEthToken", - "label": "rewardsDisabled", - "type": "t_mapping(t_address,t_bool)", - "src": "contracts/tokens/RewardEthToken.sol:51" } ], "types": { - "t_contract(IStakedEthToken)7696": { - "label": "contract IStakedEthToken" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_struct(Checkpoint)7408_storage)": { - "label": "mapping(address => struct IRewardEthToken.Checkpoint)" - }, - "t_struct(Checkpoint)7408_storage": { - "label": "struct IRewardEthToken.Checkpoint", - "members": [ - { - "label": "reward", - "type": "t_uint128" - }, - { - "label": "rewardPerToken", - "type": "t_uint128" - } - ] - }, - "t_uint128": { - "label": "uint128" - }, - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)" - }, - "t_bool": { - "label": "bool" - }, - "t_mapping(t_address,t_struct(Counter)1781_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, - "t_struct(Counter)1781_storage": { - "label": "struct CountersUpgradeable.Counter", - "members": [ - { - "label": "_value", - "type": "t_uint256" - } - ] + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, "t_bytes32": { "label": "bytes32" }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)" - }, - "t_string_storage": { - "label": "string" - }, - "t_uint8": { - "label": "uint8" - }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, "t_struct(RoleData)39_storage": { "label": "struct AccessControlUpgradeable.RoleData", "members": [ @@ -2548,13 +750,25 @@ }, "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" + }, + "t_uint256": { + "label": "uint256" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" } } } }, - "d377dd09cee01cc34566867233cd0093a8d4210bca54a545b32d225e878fbefb": { - "address": "0x08a242f9734eC8180b547fC166F529f62649f5F5", - "txHash": "0x3691e04a55d3e4628de2974796ea405d36799a6862c1a0829938727492959771", + "514ff2914356e122ba52ceaf5c69fbda4b8a2d29845693660d73d5b3db8a5734": { + "address": "0x66D2603C6c11F366944B80Ded53B73051B34ac3F", + "txHash": "0xf65666a55c8c22570ef22415743298cb2e0e4adb7bbd1f265565856cb15ce4e5", "layout": { "storage": [ { @@ -2613,90 +827,64 @@ }, { "contract": "PoolValidators", - "label": "validatorStatuses", - "type": "t_mapping(t_bytes32,t_enum(ValidatorStatus)6737)", - "src": "contracts/pool/PoolValidators.sol:24" - }, - { - "contract": "PoolValidators", - "label": "collaterals", - "type": "t_mapping(t_address,t_uint256)", - "src": "contracts/pool/PoolValidators.sol:27" + "label": "isValidatorRegistered", + "type": "t_mapping(t_bytes32,t_bool)", + "src": "contracts/pool/PoolValidators.sol:24" }, { "contract": "PoolValidators", "label": "operators", - "type": "t_mapping(t_address,t_struct(Operator)6721_storage)", - "src": "contracts/pool/PoolValidators.sol:30" + "type": "t_mapping(t_address,t_struct(Operator)6550_storage)", + "src": "contracts/pool/PoolValidators.sol:27" }, { "contract": "PoolValidators", "label": "pool", - "type": "t_contract(IPool)6651", - "src": "contracts/pool/PoolValidators.sol:33" + "type": "t_contract(IPool)6484", + "src": "contracts/pool/PoolValidators.sol:30" }, { "contract": "PoolValidators", "label": "oracles", "type": "t_address", - "src": "contracts/pool/PoolValidators.sol:36" + "src": "contracts/pool/PoolValidators.sol:33" } ], "types": { - "t_mapping(t_bytes32,t_enum(ValidatorStatus)6737)": { - "label": "mapping(bytes32 => enum IPoolValidators.ValidatorStatus)" + "t_mapping(t_bytes32,t_bool)": { + "label": "mapping(bytes32 => bool)" }, "t_bytes32": { "label": "bytes32" }, - "t_enum(ValidatorStatus)6737": { - "label": "enum IPoolValidators.ValidatorStatus", - "members": [ - "Uninitialized", - "Initialized", - "Finalized", - "Failed" - ] + "t_bool": { + "label": "bool" }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)" + "t_mapping(t_address,t_struct(Operator)6550_storage)": { + "label": "mapping(address => struct IPoolValidators.Operator)" }, "t_address": { "label": "address" }, - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_address,t_struct(Operator)6721_storage)": { - "label": "mapping(address => struct IPoolValidators.Operator)" - }, - "t_struct(Operator)6721_storage": { + "t_struct(Operator)6550_storage": { "label": "struct IPoolValidators.Operator", "members": [ { - "label": "initializeMerkleRoot", - "type": "t_bytes32" - }, - { - "label": "finalizeMerkleRoot", + "label": "depositDataMerkleRoot", "type": "t_bytes32" }, - { - "label": "locked", - "type": "t_bool" - }, { "label": "committed", "type": "t_bool" } ] }, - "t_bool": { - "label": "bool" - }, - "t_contract(IPool)6651": { + "t_contract(IPool)6484": { "label": "contract IPool" }, + "t_uint256": { + "label": "uint256" + }, "t_array(t_uint256)49_storage": { "label": "uint256[49]" }, @@ -2750,9 +938,9 @@ } } }, - "80825b74c6a6f5cc9b67b8563f272012ebc5da55f88f626617229b6f56169c85": { - "address": "0x91b288E29feb04C9fD319f94e0ee75CE3f4DE17a", - "txHash": "0x3da45345456535f568dd7ee045d887557102a1666b404a866e48aef644de6d83", + "b5c03495559808b213fc9c271de9881064dd6e453878703b330213171051f42d": { + "address": "0x29500D6C343dFcF12054038d8e6200a88ad1df83", + "txHash": "0x171a6ababf770449c06835159be64b00b7c94cda7ca5b61ad2b00b94e4081d56", "layout": { "storage": [ { @@ -2812,25 +1000,25 @@ { "contract": "Oracles", "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)7034", + "type": "t_contract(IRewardEthToken)6796", "src": "contracts/Oracles.sol:37" }, { "contract": "Oracles", "label": "pool", - "type": "t_contract(IPool)6651", + "type": "t_contract(IPool)6484", "src": "contracts/Oracles.sol:40" }, { "contract": "Oracles", "label": "poolValidators", - "type": "t_contract(IPoolValidators)6878", + "type": "t_contract(IPoolValidators)6640", "src": "contracts/Oracles.sol:43" }, { "contract": "Oracles", "label": "merkleDistributor", - "type": "t_contract(IMerkleDistributor)6095", + "type": "t_contract(IMerkleDistributor)5970", "src": "contracts/Oracles.sol:46" } ], @@ -2847,16 +1035,16 @@ "t_uint256": { "label": "uint256" }, - "t_contract(IRewardEthToken)7034": { + "t_contract(IRewardEthToken)6796": { "label": "contract IRewardEthToken" }, - "t_contract(IPool)6651": { + "t_contract(IPool)6484": { "label": "contract IPool" }, - "t_contract(IPoolValidators)6878": { + "t_contract(IPoolValidators)6640": { "label": "contract IPoolValidators" }, - "t_contract(IMerkleDistributor)6095": { + "t_contract(IMerkleDistributor)5970": { "label": "contract IMerkleDistributor" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { @@ -2918,9 +1106,9 @@ } } }, - "c16e4b952994fa08e80e4e9254ad6dc7b05d9eb6dc641438f4281b10e5e5ad70": { - "address": "0xc20d2dD754496fA82Bfdd580863ca231a65C4A8A", - "txHash": "0xf2cc0ab1140c8aadba3fa79eaddca7b41b897c4c76cebd7712ec8106f3b623c5", + "e36279ca0f184abd853e03db6f426b2859c0f6e5576f5698d2c21d66811ef557": { + "address": "0xc7A507283312edF87fFe68825F4791Dba341d6F1", + "txHash": "0x27a468c3b65d554385903eedffa6ff5d2690fb5ffea1b1b8a72659153ee060ec", "layout": { "storage": [ { @@ -2964,15 +1152,60 @@ "label": "__gap", "type": "t_array(t_uint256)49_storage", "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "MerkleDistributor", + "label": "merkleRoot", + "type": "t_bytes32", + "src": "contracts/merkles/MerkleDistributor.sol:24" + }, + { + "contract": "MerkleDistributor", + "label": "rewardEthToken", + "type": "t_address", + "src": "contracts/merkles/MerkleDistributor.sol:27" + }, + { + "contract": "MerkleDistributor", + "label": "oracles", + "type": "t_contract(IOracles)6194", + "src": "contracts/merkles/MerkleDistributor.sol:30" + }, + { + "contract": "MerkleDistributor", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/merkles/MerkleDistributor.sol:33" + }, + { + "contract": "MerkleDistributor", + "label": "_claimedBitMap", + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", + "src": "contracts/merkles/MerkleDistributor.sol:36" } ], "types": { - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, "t_bytes32": { "label": "bytes32" }, + "t_address": { + "label": "address" + }, + "t_contract(IOracles)6194": { + "label": "contract IOracles" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(bytes32 => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, "t_struct(RoleData)39_storage": { "label": "struct AccessControlUpgradeable.RoleData", "members": [ @@ -3014,9 +1247,6 @@ "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" }, - "t_uint256": { - "label": "uint256" - }, "t_array(t_uint256)49_storage": { "label": "uint256[49]" }, @@ -3029,9 +1259,9 @@ } } }, - "b5c308a3cf3175cfb99528f11852118fe7e7f6e1c7efbd4397ccc52062a9c71d": { - "address": "0x6931a7A2B196386005a3E1F9752542227d4f4d64", - "txHash": "0xcefa1a304b4482f2f1b4f3b9ba3f3c033c240b3b334380c0d22677584668bff6", + "9870290ab46c2565a3ae904dd59f3b7244e02a2a8152e0425e84e2b588e3c3ac": { + "address": "0x1AEC5b05A14a92Ffc057fD2fE0C567B8708A99e9", + "txHash": "0xbdcb3100e44ae05aba12c385a40d6b61cd29d6c1ae82bd4fe5edf5160bd59fee", "layout": { "storage": [ { @@ -3080,61 +1310,61 @@ "contract": "Pool", "label": "activatedValidators", "type": "t_uint256", - "src": "contracts/pool/Pool.sol:29" + "src": "contracts/pool/Pool.sol:26" }, { "contract": "Pool", "label": "withdrawalCredentials", "type": "t_bytes32", - "src": "contracts/pool/Pool.sol:32" + "src": "contracts/pool/Pool.sol:29" }, { "contract": "Pool", "label": "validatorRegistration", - "type": "t_contract(IDepositContract)5938", - "src": "contracts/pool/Pool.sol:35" + "type": "t_contract(IDepositContract)5813", + "src": "contracts/pool/Pool.sol:32" }, { "contract": "Pool", "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)7131", - "src": "contracts/pool/Pool.sol:38" + "type": "t_contract(IStakedEthToken)6893", + "src": "contracts/pool/Pool.sol:35" }, { "contract": "Pool", "label": "validators", - "type": "t_contract(IPoolValidators)6878", - "src": "contracts/pool/Pool.sol:41" + "type": "t_contract(IPoolValidators)6640", + "src": "contracts/pool/Pool.sol:38" }, { "contract": "Pool", "label": "oracles", "type": "t_address", - "src": "contracts/pool/Pool.sol:44" + "src": "contracts/pool/Pool.sol:41" }, { "contract": "Pool", "label": "activations", "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", - "src": "contracts/pool/Pool.sol:47" + "src": "contracts/pool/Pool.sol:44" }, { "contract": "Pool", "label": "pendingValidators", "type": "t_uint256", - "src": "contracts/pool/Pool.sol:50" + "src": "contracts/pool/Pool.sol:47" }, { "contract": "Pool", "label": "minActivatingDeposit", "type": "t_uint256", - "src": "contracts/pool/Pool.sol:53" + "src": "contracts/pool/Pool.sol:50" }, { "contract": "Pool", "label": "pendingValidatorsLimit", "type": "t_uint256", - "src": "contracts/pool/Pool.sol:56" + "src": "contracts/pool/Pool.sol:53" } ], "types": { @@ -3144,13 +1374,13 @@ "t_bytes32": { "label": "bytes32" }, - "t_contract(IDepositContract)5938": { + "t_contract(IDepositContract)5813": { "label": "contract IDepositContract" }, - "t_contract(IStakedEthToken)7131": { + "t_contract(IStakedEthToken)6893": { "label": "contract IStakedEthToken" }, - "t_contract(IPoolValidators)6878": { + "t_contract(IPoolValidators)6640": { "label": "contract IPoolValidators" }, "t_address": { @@ -3218,9 +1448,9 @@ } } }, - "0bce813f7dc44985b2a3a1f814d804b0cc693b9afcf00f66178f485f5737beb2": { - "address": "0x45E444930236De8548CAe187C2CD0BbDE73f5e13", - "txHash": "0x77e1e79fff713a1491d8df971f0026f7f23623fba73a461001253f514beedee5", + "6ef73774f40e74c636437a36044d8f0a545e6d4d7337bfaab26ace97d962ff2a": { + "address": "0x06b130F1fe13fcC707Cd00FB942846E9ba41F75c", + "txHash": "0xfe79490be22f188d2ba25738dcbf3e6393eee6c5396337668d68c47f63cb05fa", "layout": { "storage": [ { @@ -3334,7 +1564,7 @@ { "contract": "RewardEthToken", "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)7131", + "type": "t_contract(IStakedEthToken)6893", "src": "contracts/tokens/RewardEthToken.sol:25" }, { @@ -3346,7 +1576,7 @@ { "contract": "RewardEthToken", "label": "checkpoints", - "type": "t_mapping(t_address,t_struct(Checkpoint)6889_storage)", + "type": "t_mapping(t_address,t_struct(Checkpoint)6651_storage)", "src": "contracts/tokens/RewardEthToken.sol:31" }, { @@ -3393,16 +1623,16 @@ } ], "types": { - "t_contract(IStakedEthToken)7131": { + "t_contract(IStakedEthToken)6893": { "label": "contract IStakedEthToken" }, "t_address": { "label": "address" }, - "t_mapping(t_address,t_struct(Checkpoint)6889_storage)": { + "t_mapping(t_address,t_struct(Checkpoint)6651_storage)": { "label": "mapping(address => struct IRewardEthToken.Checkpoint)" }, - "t_struct(Checkpoint)6889_storage": { + "t_struct(Checkpoint)6651_storage": { "label": "struct IRewardEthToken.Checkpoint", "members": [ { @@ -3509,159 +1739,6 @@ } } } - }, - "80a7c84a2bf97514f0f85d979c61c3c5fa5541bfcafe61af059554399d7659b4": { - "address": "0x3022648376AfBf1f716111a256221043b7a03c1f", - "txHash": "0x7d83609614128ee8c7e68bffff0fefc0d4ad3d681c98d75548f64cf5839aeac0", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "MerkleDistributor", - "label": "merkleRoot", - "type": "t_bytes32", - "src": "contracts/merkles/MerkleDistributor.sol:24" - }, - { - "contract": "MerkleDistributor", - "label": "rewardEthToken", - "type": "t_address", - "src": "contracts/merkles/MerkleDistributor.sol:27" - }, - { - "contract": "MerkleDistributor", - "label": "oracles", - "type": "t_contract(IOracles)6342", - "src": "contracts/merkles/MerkleDistributor.sol:30" - }, - { - "contract": "MerkleDistributor", - "label": "lastUpdateBlockNumber", - "type": "t_uint256", - "src": "contracts/merkles/MerkleDistributor.sol:33" - }, - { - "contract": "MerkleDistributor", - "label": "_claimedBitMap", - "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", - "src": "contracts/merkles/MerkleDistributor.sol:36" - } - ], - "types": { - "t_bytes32": { - "label": "bytes32" - }, - "t_address": { - "label": "address" - }, - "t_contract(IOracles)6342": { - "label": "contract IOracles" - }, - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { - "label": "mapping(bytes32 => mapping(uint256 => uint256))" - }, - "t_mapping(t_uint256,t_uint256)": { - "label": "mapping(uint256 => uint256)" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)2097_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)2097_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1832_storage" - } - ] - }, - "t_struct(Set)1832_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } } } } diff --git a/deployments/settings.js b/deployments/settings.js index 6836374a..f79b627e 100644 --- a/deployments/settings.js +++ b/deployments/settings.js @@ -3,9 +3,10 @@ const hre = require('hardhat'); let contracts, contractSettings; if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { contracts = { - oracles: '0x06b0C9476315634dCc59AA3F3f7d5Df6feCbAa90', + prevOracles: '0xE54486fa4eB45716c5725d7A46FDDe810B8E8914', + oracles: '0x4bBaA17eFd71683dCb9C769DD38E7674994FE38d', pool: '0x8c1EfEcFb5c4F1099AB0460b5659342943764Df7', - poolValidators: '0x0d92156861a0BC7037cC21470327Bd3Bc750EB1D', + poolValidators: '0x908C06aFfda0fFDbB4578629aA8cCff372e510b6', poolEscrow: '0x040F15C6b5Bfc5F324eCaB5864C38D4e1EEF4218', stakedEthToken: '0x221D9812823DBAb0F1fB40b0D294D9875980Ac19', rewardEthToken: '0x826f88d423440c305D9096cC1581Ae751eFCAfB0', diff --git a/networks/goerli.md b/networks/goerli.md index 27be8907..2e990cce 100755 --- a/networks/goerli.md +++ b/networks/goerli.md @@ -22,8 +22,8 @@ ## Pool Validators -- Contract: [0x0d92156861a0BC7037cC21470327Bd3Bc750EB1D](https://goerli.etherscan.io/address/0x0d92156861a0BC7037cC21470327Bd3Bc750EB1D) -- Transaction: [0x077b6fc63754433799822e20eb6b42f6b213f296f2a2bb80ef4fb402ede6161a](https://goerli.etherscan.io/tx/0x077b6fc63754433799822e20eb6b42f6b213f296f2a2bb80ef4fb402ede6161a) +- Contract: [0x908C06aFfda0fFDbB4578629aA8cCff372e510b6](https://goerli.etherscan.io/address/0x908C06aFfda0fFDbB4578629aA8cCff372e510b6) +- Transaction: [0x49c85d3d890580fe2412c432f30b4bed5881c94c70ffdbe470fcffe9b27ead3c](https://goerli.etherscan.io/tx/0x49c85d3d890580fe2412c432f30b4bed5881c94c70ffdbe470fcffe9b27ead3c) ## StakedEthToken @@ -47,8 +47,8 @@ ## Oracles -- Contract: [0x06b0C9476315634dCc59AA3F3f7d5Df6feCbAa90](https://goerli.etherscan.io/address/0x06b0C9476315634dCc59AA3F3f7d5Df6feCbAa90) -- Transaction: [0x133190b18ed0ac25af41a156eabaf3c82aa470c87ed9266c896f99a1ef858c10](https://goerli.etherscan.io/tx/0x133190b18ed0ac25af41a156eabaf3c82aa470c87ed9266c896f99a1ef858c10) +- Contract: [0x4bBaA17eFd71683dCb9C769DD38E7674994FE38d](https://goerli.etherscan.io/address/0x4bBaA17eFd71683dCb9C769DD38E7674994FE38d) +- Transaction: [0xcbccb5aaac5d7ec139cd211eba24e89651d8e6713d2622f70d9fb97f5584e7eb](https://goerli.etherscan.io/tx/0xcbccb5aaac5d7ec139cd211eba24e89651d8e6713d2622f70d9fb97f5584e7eb) ## Vesting Escrow From d22a01c326604e2a6a849b82166ee6b484e51fcb Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Mon, 20 Dec 2021 22:32:35 +0200 Subject: [PATCH 44/55] Move from deposit count to deposit root check --- abi/Oracles.json | 2 +- contracts/Oracles.sol | 8 ++++---- contracts/interfaces/IOracles.sol | 4 ++-- test/oracles/Oracles.test.js | 20 ++++++++++++-------- test/pool/PoolValidators.test.js | 22 +++++++++++----------- test/pool/settings.test.js | 7 +++---- test/pool/stake.test.js | 11 +++++------ test/utils.js | 6 +++--- 8 files changed, 41 insertions(+), 39 deletions(-) diff --git a/abi/Oracles.json b/abi/Oracles.json index 75df261f..e8f10197 100644 --- a/abi/Oracles.json +++ b/abi/Oracles.json @@ -627,7 +627,7 @@ }, { "internalType": "bytes32", - "name": "validatorsDepositCount", + "name": "validatorsDepositRoot", "type": "bytes32" }, { diff --git a/contracts/Oracles.sol b/contracts/Oracles.sol index 1eff385a..dd5542b1 100644 --- a/contracts/Oracles.sol +++ b/contracts/Oracles.sol @@ -233,21 +233,21 @@ contract Oracles is IOracles, OwnablePausableUpgradeable { function registerValidator( IPoolValidators.DepositData calldata depositData, bytes32[] calldata merkleProof, - bytes32 validatorsDepositCount, + bytes32 validatorsDepositRoot, bytes[] calldata signatures ) external override onlyOracle whenNotPaused { require( - keccak256(pool.validatorRegistration().get_deposit_count()) == validatorsDepositCount, - "Oracles: invalid validators deposit count" + pool.validatorRegistration().get_deposit_root() == validatorsDepositRoot, + "Oracles: invalid validators deposit root" ); require(isEnoughSignatures(signatures.length), "Oracles: invalid number of signatures"); // calculate candidate ID hash uint256 nonce = validatorsNonce.current(); bytes32 candidateId = ECDSAUpgradeable.toEthSignedMessageHash( - keccak256(abi.encode(nonce, depositData.publicKey, depositData.operator, validatorsDepositCount)) + keccak256(abi.encode(nonce, depositData.publicKey, depositData.operator, validatorsDepositRoot)) ); // check signatures and calculate number of submitted oracle votes diff --git a/contracts/interfaces/IOracles.sol b/contracts/interfaces/IOracles.sol index 91806617..39fdc181 100644 --- a/contracts/interfaces/IOracles.sol +++ b/contracts/interfaces/IOracles.sol @@ -159,13 +159,13 @@ interface IOracles { * The quorum of signatures over the same data is required to register. * @param depositData - the deposit data for the registration. * @param merkleProof - an array of hashes to verify whether the deposit data is part of the deposit data merkle root. - * @param validatorsDepositCount - validators deposit count to protect from malicious operators. + * @param validatorsDepositRoot - validators deposit root to protect from malicious operators. * @param signatures - oracles' signatures. */ function registerValidator( IPoolValidators.DepositData calldata depositData, bytes32[] calldata merkleProof, - bytes32 validatorsDepositCount, + bytes32 validatorsDepositRoot, bytes[] calldata signatures ) external; } diff --git a/test/oracles/Oracles.test.js b/test/oracles/Oracles.test.js index 9758dc85..d7ce0452 100644 --- a/test/oracles/Oracles.test.js +++ b/test/oracles/Oracles.test.js @@ -482,7 +482,11 @@ contract('Oracles', ([_, anyone, operator, ...accounts]) => { withdrawalCredentials, merkleProof, } = depositData[0]; - let currentNonce, oracleAccounts, candidateId, signatures, validatorsCount; + let currentNonce, + oracleAccounts, + candidateId, + signatures, + validatorsDepositRoot; let validatorData = { operator, withdrawalCredentials, @@ -509,11 +513,11 @@ contract('Oracles', ([_, anyone, operator, ...accounts]) => { let depositContract = await iDepositContract.at( await pool.validatorRegistration() ); - validatorsCount = keccak256(await depositContract.get_deposit_count()); + validatorsDepositRoot = await depositContract.get_deposit_root(); let encoded = defaultAbiCoder.encode( ['uint256', 'bytes', 'address', 'bytes32'], - [currentNonce.toString(), publicKey, operator, validatorsCount] + [currentNonce.toString(), publicKey, operator, validatorsDepositRoot] ); candidateId = keccak256(encoded); @@ -531,7 +535,7 @@ contract('Oracles', ([_, anyone, operator, ...accounts]) => { oracles.registerValidator( validatorData, merkleProof, - validatorsCount, + validatorsDepositRoot, signatures, { from: oracleAccounts[0], @@ -546,7 +550,7 @@ contract('Oracles', ([_, anyone, operator, ...accounts]) => { oracles.registerValidator( validatorData, merkleProof, - validatorsCount, + validatorsDepositRoot, signatures.slice(signatures.length - 1), { from: oracleAccounts[0], @@ -562,7 +566,7 @@ contract('Oracles', ([_, anyone, operator, ...accounts]) => { oracles.registerValidator( validatorData, merkleProof, - validatorsCount, + validatorsDepositRoot, signatures, { from: oracleAccounts[0], @@ -578,7 +582,7 @@ contract('Oracles', ([_, anyone, operator, ...accounts]) => { oracles.registerValidator( validatorData, merkleProof, - validatorsCount, + validatorsDepositRoot, signatures, { from: oracleAccounts[0], @@ -593,7 +597,7 @@ contract('Oracles', ([_, anyone, operator, ...accounts]) => { oracles.registerValidator( validatorData, merkleProof, - validatorsCount, + validatorsDepositRoot, signatures, { from: anyone, diff --git a/test/pool/PoolValidators.test.js b/test/pool/PoolValidators.test.js index b13af787..e6e34322 100644 --- a/test/pool/PoolValidators.test.js +++ b/test/pool/PoolValidators.test.js @@ -38,7 +38,7 @@ contract('Pool Validators', (accounts) => { oracleAccounts, oracles, depositContract, - validatorsCount; + validatorsDepositRoot; let [operator, anyone, ...otherAccounts] = accounts; after(async () => stopImpersonatingAccount(admin)); @@ -53,7 +53,7 @@ contract('Pool Validators', (accounts) => { await pool.validatorRegistration() ); validatorDepositAmount = await pool.VALIDATOR_TOTAL_DEPOSIT(); - validatorsCount = keccak256(await depositContract.get_deposit_count()); + validatorsDepositRoot = await depositContract.get_deposit_root(); validators = await PoolValidators.at(upgradedContracts.poolValidators); @@ -322,7 +322,7 @@ contract('Pool Validators', (accounts) => { oracles, oracleAccounts, withdrawalCredentials, - validatorsCount, + validatorsDepositRoot, }), 'PoolValidators: invalid operator' ); @@ -341,7 +341,7 @@ contract('Pool Validators', (accounts) => { depositDataRoot, oracles, oracleAccounts, - validatorsCount, + validatorsDepositRoot, }); await expectRevert( @@ -354,7 +354,7 @@ contract('Pool Validators', (accounts) => { depositDataRoot, oracles, oracleAccounts, - validatorsCount: keccak256(await depositContract.get_deposit_count()), + validatorsDepositRoot: await depositContract.get_deposit_root(), }), 'PoolValidators: validator already registered' ); @@ -374,7 +374,7 @@ contract('Pool Validators', (accounts) => { depositDataRoot, oracles, oracleAccounts, - validatorsCount, + validatorsDepositRoot, }), 'PoolValidators: invalid operator' ); @@ -394,13 +394,13 @@ contract('Pool Validators', (accounts) => { oracles, oracleAccounts, withdrawalCredentials, - validatorsCount, + validatorsDepositRoot, }), 'PoolValidators: invalid merkle proof' ); }); - it('fails to register with invalid validators count', async () => { + it('fails to register with invalid validators deposit root', async () => { await validators.commitOperator({ from: operator, }); @@ -414,9 +414,9 @@ contract('Pool Validators', (accounts) => { oracles, oracleAccounts, withdrawalCredentials, - validatorsCount: keccak256('0x6be4000000000000'), + validatorsDepositRoot: keccak256('1'), }), - 'Oracles: invalid validators deposit count' + 'Oracles: invalid validators deposit root' ); }); @@ -435,7 +435,7 @@ contract('Pool Validators', (accounts) => { oracles, oracleAccounts, withdrawalCredentials, - validatorsCount, + validatorsDepositRoot, }); await expectEvent.inTransaction(receipt.tx, Pool, 'ValidatorRegistered', { diff --git a/test/pool/settings.test.js b/test/pool/settings.test.js index 533cb8fb..ab461d1b 100644 --- a/test/pool/settings.test.js +++ b/test/pool/settings.test.js @@ -5,7 +5,6 @@ const { expectRevert, expectEvent, } = require('@openzeppelin/test-helpers'); -const { keccak256 } = require('ethers/lib/utils'); const { stopImpersonatingAccount, impersonateAccount, @@ -26,7 +25,7 @@ const iDepositContract = artifacts.require('IDepositContract'); contract('Pool (settings)', ([operator, anyone, ...otherAccounts]) => { const admin = contractSettings.admin; - let pool, oracles, oracleAccounts, rewardEthToken, validatorsCount; + let pool, oracles, oracleAccounts, rewardEthToken, validatorsDepositRoot; after(async () => stopImpersonatingAccount(admin)); @@ -51,7 +50,7 @@ contract('Pool (settings)', ([operator, anyone, ...otherAccounts]) => { let depositContract = await iDepositContract.at( await pool.validatorRegistration() ); - validatorsCount = keccak256(await depositContract.get_deposit_count()); + validatorsDepositRoot = depositContract.get_deposit_root(); oracles = await Oracles.at(upgradedContracts.oracles); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); oracleAccounts = await setupOracleAccounts({ @@ -161,7 +160,7 @@ contract('Pool (settings)', ([operator, anyone, ...otherAccounts]) => { operator, oracles, oracleAccounts, - validatorsCount, + validatorsDepositRoot, }); let activatedValidators = await pool.activatedValidators(); diff --git a/test/pool/stake.test.js b/test/pool/stake.test.js index a686b763..dbbdf491 100644 --- a/test/pool/stake.test.js +++ b/test/pool/stake.test.js @@ -23,7 +23,6 @@ const { depositData, depositDataMerkleRoot, } = require('./depositDataMerkleRoot'); -const { keccak256 } = require('ethers/lib/utils'); const Pool = artifacts.require('Pool'); const StakedEthToken = artifacts.require('StakedEthToken'); @@ -44,7 +43,7 @@ contract('Pool (stake)', (accounts) => { activatedValidators, pendingValidators, depositContract, - validatorsCount; + validatorsDepositRoot; after(async () => stopImpersonatingAccount(admin)); @@ -65,7 +64,7 @@ contract('Pool (stake)', (accounts) => { depositContract = await iDepositContract.at( await pool.validatorRegistration() ); - validatorsCount = keccak256(await depositContract.get_deposit_count()); + validatorsDepositRoot = await depositContract.get_deposit_root(); await validators.addOperator( operator, depositDataMerkleRoot, @@ -420,7 +419,7 @@ contract('Pool (stake)', (accounts) => { oracles, oracleAccounts, operator, - validatorsCount, + validatorsDepositRoot, }); }); @@ -533,7 +532,7 @@ contract('Pool (stake)', (accounts) => { oracles, oracleAccounts, operator, - validatorsCount, + validatorsDepositRoot, }); await registerValidator({ admin, @@ -546,7 +545,7 @@ contract('Pool (stake)', (accounts) => { publicKey: depositData[1].publicKey, withdrawalCredentials: depositData[1].withdrawalCredentials, depositDataRoot: depositData[1].depositDataRoot, - validatorsCount: keccak256(await depositContract.get_deposit_count()), + validatorsDepositRoot: await depositContract.get_deposit_root(), }); }); diff --git a/test/utils.js b/test/utils.js index 5f7616c4..2d1784bc 100644 --- a/test/utils.js +++ b/test/utils.js @@ -205,12 +205,12 @@ async function registerValidator({ depositDataRoot = depositData[0].depositDataRoot, oracles, oracleAccounts, - validatorsCount, + validatorsDepositRoot, }) { let nonce = await oracles.currentValidatorsNonce(); let encoded = defaultAbiCoder.encode( ['uint256', 'bytes', 'address', 'bytes32'], - [nonce.toString(), publicKey, operator, validatorsCount] + [nonce.toString(), publicKey, operator, validatorsDepositRoot] ); let candidateId = hexlify(keccak256(encoded)); @@ -226,7 +226,7 @@ async function registerValidator({ return oracles.registerValidator( { operator, withdrawalCredentials, depositDataRoot, publicKey, signature }, merkleProof, - validatorsCount, + validatorsDepositRoot, signatures, { from: oracleAccounts[0], From 9a76a0ca3e6c9210d2ba4104b0c98a608a88bd04 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Mon, 20 Dec 2021 22:40:28 +0200 Subject: [PATCH 45/55] fix tests --- test/pool/PoolValidators.test.js | 2 +- test/pool/settings.test.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/test/pool/PoolValidators.test.js b/test/pool/PoolValidators.test.js index e6e34322..66b04123 100644 --- a/test/pool/PoolValidators.test.js +++ b/test/pool/PoolValidators.test.js @@ -414,7 +414,7 @@ contract('Pool Validators', (accounts) => { oracles, oracleAccounts, withdrawalCredentials, - validatorsDepositRoot: keccak256('1'), + validatorsDepositRoot: keccak256('0x6be4000000000000'), }), 'Oracles: invalid validators deposit root' ); diff --git a/test/pool/settings.test.js b/test/pool/settings.test.js index ab461d1b..179e40ef 100644 --- a/test/pool/settings.test.js +++ b/test/pool/settings.test.js @@ -50,7 +50,7 @@ contract('Pool (settings)', ([operator, anyone, ...otherAccounts]) => { let depositContract = await iDepositContract.at( await pool.validatorRegistration() ); - validatorsDepositRoot = depositContract.get_deposit_root(); + validatorsDepositRoot = await depositContract.get_deposit_root(); oracles = await Oracles.at(upgradedContracts.oracles); rewardEthToken = await RewardEthToken.at(contracts.rewardEthToken); oracleAccounts = await setupOracleAccounts({ From 4f97a92d6c9d71534e4a66492a5bf652d0a92a72 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 21 Dec 2021 14:43:15 +0200 Subject: [PATCH 46/55] Deploy mainnet contracts --- .openzeppelin/mainnet.json | 2995 ++++++------------------------ .openzeppelin/unknown-31337.json | 2995 ++++++------------------------ deployments/settings.js | 2 + deployments/vrc.js | 64 - hardhat.config.js | 2 +- networks/mainnet.md | 8 +- test/Proxies.test.js | 4 + 7 files changed, 1083 insertions(+), 4987 deletions(-) delete mode 100644 deployments/vrc.js diff --git a/.openzeppelin/mainnet.json b/.openzeppelin/mainnet.json index 072464ba..ac08a7ac 100644 --- a/.openzeppelin/mainnet.json +++ b/.openzeppelin/mainnet.json @@ -5,11 +5,6 @@ "txHash": "0x3490ab3e78ab96f5059d9ea25c009d476eec9d8c4d4d7009bb33f130e5046ab7" }, "proxies": [ - { - "address": "0xaAc73D4A26Ae6906aa115118b7840b1F19fcd3A5", - "txHash": "0xdf4df05f116f81e505766f972142acc16479ade3961b7920ce5b434f4023f289", - "kind": "transparent" - }, { "address": "0xC874b064f465bdD6411D45734b56fac750Cda29A", "txHash": "0xefa2f24402c9380a7721c725734809820ad8ac4f042f4e7f9aee77a1a54e662e", @@ -30,11 +25,6 @@ "txHash": "0x2ea1150808638522d935c7d66b6d67782389b5123682ca466c9b97ac0eb0c050", "kind": "transparent" }, - { - "address": "0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514", - "txHash": "0x28ad7e3db8e157ef24f2aa6da7ad00cc1d55e0b2c0d161488a71e298a9cee21d", - "kind": "transparent" - }, { "address": "0x7B910cc3D4B42FEFF056218bD56d7700E4ea7dD5", "txHash": "0x0dfc545843dc9b5853a5b727e9a8e955f8d193bb2f6415591bdd3e2c245449f5", @@ -46,241 +36,44 @@ "kind": "transparent" }, { - "address": "0x0e75786cB831bEE6d4484031Af12490Ab528c770", - "txHash": "0xe7135d26f8c388d29d2a29c19ecd69c8e69de6ce2aa5014e6ba1cbcc389e9def", + "address": "0xC486c10e3611565F5b38b50ad68277b11C889623", + "txHash": "0x3add6dc8ba0e0bf8ffb7301fb049cf9953461951f63d304681d70cdc8c45cec2", "kind": "transparent" }, { - "address": "0xE949060ACE386D5e277De217703B17A2547f24C0", - "txHash": "0x2e2dafc452302b358f11bc4c2dd7631438b1a1284082d4fccadbdd9041ee43f5", + "address": "0x002932e11E95DC84C17ed5f94a0439645D8a97BC", + "txHash": "0xc2620ea4a161fe391020b42f03e2ff4c0a29cda6538c8a56212dbf9a9107522e", "kind": "transparent" }, { - "address": "0xC486c10e3611565F5b38b50ad68277b11C889623", - "txHash": "0x3add6dc8ba0e0bf8ffb7301fb049cf9953461951f63d304681d70cdc8c45cec2", + "address": "0x8a887282E67ff41d36C0b7537eAB035291461AcD", + "txHash": "0x2eb5e24c36d9cb509472f992afa14521f8ad58a21fae500f633f85e07535f506", "kind": "transparent" } ], "impls": { - "84dece82968538be3061b96eba9ebf393b48892f1cc2d730d20711cfa3f49e86": { - "address": "0xa34E1010E2b76abdf7399E6C88147D0FAfE28e90", - "txHash": "0x1a4332730b0fb57cf85d9cd1e69c2d90e708c6074786f56cbc05fbeee47e29db", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Validators", - "label": "publicKeys", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Validators.sol:19" - }, - { - "contract": "Validators", - "label": "pool", - "type": "t_address", - "src": "contracts/Validators.sol:22" - }, - { - "contract": "Validators", - "label": "solos", - "type": "t_address", - "src": "contracts/Validators.sol:25" - } - ], - "types": { - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "3c2ba5b01bcebe2c48833d843424b7dbcdfa3752334326296bfeb99eab2e4b99": { - "address": "0xf6a519699dd2f66a8Aa1F49B81C73690F104647f", - "txHash": "0xd1a832b29db69905f48a075effac4d274565ff837d4a083712fb3dfa49a704f6", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Pool", - "label": "collectedAmount", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:25" - }, - { - "contract": "Pool", - "label": "withdrawalCredentials", - "type": "t_bytes32", - "src": "contracts/collectors/Pool.sol:28" - }, - { - "contract": "Pool", - "label": "validatorRegistration", - "type": "t_contract(IDepositContract)4685", - "src": "contracts/collectors/Pool.sol:31" - }, - { - "contract": "Pool", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)5227", - "src": "contracts/collectors/Pool.sol:34" - }, - { - "contract": "Pool", - "label": "validators", - "type": "t_contract(IValidators)5275", - "src": "contracts/collectors/Pool.sol:37" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_contract(IDepositContract)4685": { - "label": "contract IDepositContract" - }, - "t_contract(IStakedEthToken)5227": { - "label": "contract IStakedEthToken" - }, - "t_contract(IValidators)5275": { - "label": "contract IValidators" - }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "3a535bc8d9b69aa26341824b12caf3d267e2712fbe4e4a0e389fb306a6ff29c8": { - "address": "0x6A8a1716a44f700af56ea52D44B916A50333A369", - "txHash": "0x5e214beece1c31c69f3b927f96c0547ce744c5c3cc4c1dca171bb26fcd5a839b", + "92f2fa955a8b14d88f0d6bdccad2dac5752f89ba4a34c06d54a6512633c9c628": { + "address": "0xA28C2d79f0c5B78CeC699DAB0303008179815396", + "txHash": "0x89bdc085721509174aba659d8b9c80d32f86d5ab37c144073636dbe76d6c1e32", "layout": { "storage": [ { "contract": "Initializable", "label": "_initialized", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" }, { "contract": "Initializable", "label": "_initializing", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, { "contract": "ContextUpgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" }, { "contract": "PausableUpgradeable", @@ -297,7 +90,7 @@ { "contract": "AccessControlUpgradeable", "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" }, { @@ -334,1947 +127,71 @@ "contract": "ERC20Upgradeable", "label": "__gap", "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:223" + "src": "contracts/tokens/ERC20Upgradeable.sol:225" }, { "contract": "EIP712Upgradeable", "label": "_HASHED_NAME", "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:27" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" }, { "contract": "EIP712Upgradeable", "label": "_HASHED_VERSION", "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:28" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" }, { "contract": "EIP712Upgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "contracts/tokens/EIP712Upgradeable.sol:124" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" }, { "contract": "ERC20PermitUpgradeable", "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)951_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:24" + "type": "t_mapping(t_address,t_struct(Counter)1710_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" }, { "contract": "ERC20PermitUpgradeable", "label": "_PERMIT_TYPEHASH", "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:27" + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" }, { "contract": "ERC20PermitUpgradeable", "label": "__gap", "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:86" - }, - { - "contract": "StakedEthToken", - "label": "totalDeposits", - "type": "t_uint256", - "src": "contracts/tokens/StakedEthToken.sol:20" + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" }, { - "contract": "StakedEthToken", - "label": "deposits", + "contract": "StakeWiseToken", + "label": "_balances", "type": "t_mapping(t_address,t_uint256)", - "src": "contracts/tokens/StakedEthToken.sol:23" - }, - { - "contract": "StakedEthToken", - "label": "pool", - "type": "t_address", - "src": "contracts/tokens/StakedEthToken.sol:26" - }, - { - "contract": "StakedEthToken", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)5069", - "src": "contracts/tokens/StakedEthToken.sol:29" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)" - }, - "t_address": { - "label": "address" - }, - "t_contract(IRewardEthToken)5069": { - "label": "contract IRewardEthToken" - }, - "t_mapping(t_address,t_struct(Counter)951_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" - }, - "t_string_storage": { - "label": "string" - }, - "t_uint8": { - "label": "uint8" - }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" - }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + "src": "contracts/tokens/StakeWiseToken.sol:15" }, - "t_bool": { - "label": "bool" - } - } - } - }, - "5370a49c5717f9aacd12db411bd25748fae480eab79cf2712c7c5c3aa1295a90": { - "address": "0x46B7232bc7392b157371eBFcD4618Ca9CEedb1bd", - "txHash": "0xdc0f09fd8ffd9aeba4dcccf0994a2d26c61a7d418bf7d01fdaaa7bdc70a7a2c9", - "layout": { - "storage": [ { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:223" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", - "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:27" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:28" - }, - { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "contracts/tokens/EIP712Upgradeable.sol:124" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)951_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:24" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:27" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:86" - }, - { - "contract": "RewardEthToken", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)5227", - "src": "contracts/tokens/RewardEthToken.sol:22" - }, - { - "contract": "RewardEthToken", - "label": "oracles", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:25" - }, - { - "contract": "RewardEthToken", - "label": "checkpoints", - "type": "t_mapping(t_address,t_struct(Checkpoint)4971_storage)", - "src": "contracts/tokens/RewardEthToken.sol:28" - }, - { - "contract": "RewardEthToken", - "label": "maintainer", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:31" - }, - { - "contract": "RewardEthToken", - "label": "maintainerFee", - "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:34" - }, - { - "contract": "RewardEthToken", - "label": "totalRewards", - "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:37" - }, - { - "contract": "RewardEthToken", - "label": "rewardPerToken", - "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:40" - }, - { - "contract": "RewardEthToken", - "label": "lastUpdateTimestamp", - "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:43" - } - ], - "types": { - "t_contract(IStakedEthToken)5227": { - "label": "contract IStakedEthToken" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_struct(Checkpoint)4971_storage)": { - "label": "mapping(address => struct IRewardEthToken.Checkpoint)" - }, - "t_uint256": { - "label": "uint256" - }, - "t_uint128": { - "label": "uint128" - }, - "t_mapping(t_address,t_struct(Counter)951_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" - }, - "t_string_storage": { - "label": "string" - }, - "t_uint8": { - "label": "uint8" - }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" - }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_bool": { - "label": "bool" - } - } - } - }, - "e43b57215f4a8a0604ed9cf0c3db3ee217fca96cdd0c8807f931fc346c88ee96": { - "address": "0xfdec24BB3055BE9578300f1541d5e0Ee4eDa6261", - "txHash": "0x4b2bce9a29734672917727e27a47d4a44b20953b04be7f4215fae4d77058fdec", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Oracles", - "label": "totalRewardsUpdatePeriod", - "type": "t_uint256", - "src": "contracts/Oracles.sol:26" - }, - { - "contract": "Oracles", - "label": "candidates", - "type": "t_mapping(t_bytes32,t_uint256)", - "src": "contracts/Oracles.sol:29" - }, - { - "contract": "Oracles", - "label": "rewardEthUniswapPairs", - "type": "t_array(t_address)dyn_storage", - "src": "contracts/Oracles.sol:32" - }, - { - "contract": "Oracles", - "label": "submittedVotes", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Oracles.sol:35" - }, - { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)5069", - "src": "contracts/Oracles.sol:38" - }, - { - "contract": "Oracles", - "label": "totalRewardsNonce", - "type": "t_struct(Counter)951_storage", - "src": "contracts/Oracles.sol:41" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" - }, - "t_contract(IRewardEthToken)5069": { - "label": "contract IRewardEthToken" - }, - "t_struct(Counter)951_storage": { - "label": "struct CountersUpgradeable.Counter" - }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "1180315bf4492fa65c4efbff97aef9be398013d10c1aff681a175a03508864ae": { - "address": "0xc8970E7C07c251625F9F93cE510b1D9c1a08d299", - "txHash": "0x32c727ebb5dbbc1bd89a3a21cf15d9e74dbc688b404b60a286a9ae858c4967e2", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Pool", - "label": "activatedValidators", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:25" - }, - { - "contract": "Pool", - "label": "withdrawalCredentials", - "type": "t_bytes32", - "src": "contracts/collectors/Pool.sol:28" - }, - { - "contract": "Pool", - "label": "validatorRegistration", - "type": "t_contract(IDepositContract)5197", - "src": "contracts/collectors/Pool.sol:31" - }, - { - "contract": "Pool", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)5841", - "src": "contracts/collectors/Pool.sol:34" - }, - { - "contract": "Pool", - "label": "validators", - "type": "t_contract(IValidators)5889", - "src": "contracts/collectors/Pool.sol:37" - }, - { - "contract": "Pool", - "label": "oracles", - "type": "t_address", - "src": "contracts/collectors/Pool.sol:40" - }, - { - "contract": "Pool", - "label": "activations", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", - "src": "contracts/collectors/Pool.sol:43" - }, - { - "contract": "Pool", - "label": "pendingValidators", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:46" - }, - { - "contract": "Pool", - "label": "minActivatingDeposit", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:49" - }, - { - "contract": "Pool", - "label": "pendingValidatorsLimit", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:52" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_contract(IDepositContract)5197": { - "label": "contract IDepositContract" - }, - "t_contract(IStakedEthToken)5841": { - "label": "contract IStakedEthToken" - }, - "t_contract(IValidators)5889": { - "label": "contract IValidators" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "label": "mapping(address => mapping(uint256 => uint256))" - }, - "t_mapping(t_uint256,t_uint256)": { - "label": "mapping(uint256 => uint256)" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)1421_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)1421_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1156_storage" - } - ] - }, - "t_struct(Set)1156_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "88b20c6014e9428305028f15b31ccca5163a9836c693c992172ff3122e72bab3": { - "address": "0x749dCCE12E8337dfb44635082519E656d44A2672", - "txHash": "0xf7667e029d07c1ee47a46235bb1e90082142d982a10fa94d95fa919594f07c2f", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Oracles", - "label": "syncPeriod", - "type": "t_uint256", - "src": "contracts/Oracles.sol:26" - }, - { - "contract": "Oracles", - "label": "candidates", - "type": "t_mapping(t_bytes32,t_uint256)", - "src": "contracts/Oracles.sol:29" - }, - { - "contract": "Oracles", - "label": "rewardEthUniswapPairs", - "type": "t_array(t_address)dyn_storage", - "src": "contracts/Oracles.sol:32" - }, - { - "contract": "Oracles", - "label": "submittedVotes", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Oracles.sol:35" - }, - { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)5683", - "src": "contracts/Oracles.sol:38" - }, - { - "contract": "Oracles", - "label": "nonce", - "type": "t_struct(Counter)1105_storage", - "src": "contracts/Oracles.sol:41" - }, - { - "contract": "Oracles", - "label": "pool", - "type": "t_contract(IPool)5564", - "src": "contracts/Oracles.sol:44" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" - }, - "t_bool": { - "label": "bool" - }, - "t_contract(IRewardEthToken)5683": { - "label": "contract IRewardEthToken" - }, - "t_struct(Counter)1105_storage": { - "label": "struct CountersUpgradeable.Counter", - "members": [ - { - "label": "_value", - "type": "t_uint256" - } - ] - }, - "t_contract(IPool)5564": { - "label": "contract IPool" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)1421_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)1421_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1156_storage" - } - ] - }, - "t_struct(Set)1156_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "92f2fa955a8b14d88f0d6bdccad2dac5752f89ba4a34c06d54a6512633c9c628": { - "address": "0xA28C2d79f0c5B78CeC699DAB0303008179815396", - "txHash": "0x89bdc085721509174aba659d8b9c80d32f86d5ab37c144073636dbe76d6c1e32", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:225" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" - }, - { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)1710_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" - }, - { - "contract": "StakeWiseToken", - "label": "_balances", - "type": "t_mapping(t_address,t_uint256)", - "src": "contracts/tokens/StakeWiseToken.sol:15" - }, - { - "contract": "StakeWiseToken", - "label": "_totalSupply", - "type": "t_uint256", - "src": "contracts/tokens/StakeWiseToken.sol:17" - } - ], - "types": { - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)" - }, - "t_address": { - "label": "address" - }, - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_address,t_struct(Counter)1710_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, - "t_struct(Counter)1710_storage": { - "label": "struct CountersUpgradeable.Counter", - "members": [ - { - "label": "_value", - "type": "t_uint256" - } - ] - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" - }, - "t_string_storage": { - "label": "string" - }, - "t_uint8": { - "label": "uint8" - }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)2026_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)2026_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1761_storage" - } - ] - }, - "t_struct(Set)1761_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_bool": { - "label": "bool" - } - } - } - }, - "de2b2b9599ed08c7b524042f3efbe7c2d5a43aedd25613e6c7d209c01cbbbbd5": { - "address": "0x27356a244cD2a8bBd0A1f4E96E8FCd70bF926Bc3", - "txHash": "0x13ee96fe09831c3409799fa008729cb73efd98f65e43c5115841d42f9cbcaa16", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "VestingEscrowFactory", - "label": "escrowImplementation", - "type": "t_address", - "src": "contracts/vestings/VestingEscrowFactory.sol:27" - }, - { - "contract": "VestingEscrowFactory", - "label": "escrows", - "type": "t_mapping(t_address,t_array(t_address)dyn_storage)", - "src": "contracts/vestings/VestingEscrowFactory.sol:30" - } - ], - "types": { - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_array(t_address)dyn_storage)": { - "label": "mapping(address => address[])" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)2026_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)2026_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1761_storage" - } - ] - }, - "t_struct(Set)1761_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_uint256": { - "label": "uint256" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "7e326bc95738472f562a024cfb314277973b02dece8afdcc5ca2556ffbfd9d70": { - "address": "0xbeE3Eb97Cfd94ace6B66E606B8088C57c5f78fBf", - "txHash": "0xa626de677233c869fb99d3ca1c643f2f108655aaae710401e73125ec79385e45", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "VestingEscrowFactory", - "label": "escrowImplementation", - "type": "t_address", - "src": "contracts/vestings/VestingEscrowFactory.sol:27" - }, - { - "contract": "VestingEscrowFactory", - "label": "escrows", - "type": "t_mapping(t_address,t_array(t_address)dyn_storage)", - "src": "contracts/vestings/VestingEscrowFactory.sol:30" - } - ], - "types": { - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_array(t_address)dyn_storage)": { - "label": "mapping(address => address[])" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)2026_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)2026_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1761_storage" - } - ] - }, - "t_struct(Set)1761_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_uint256": { - "label": "uint256" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "97347223e792bf368d6a6c9d760d82b455a5edc1629dff43cd9ce0e019b9b25f": { - "address": "0x459beef3c5Bd5D1E66de93AC908E278ee2488F14", - "txHash": "0xeae913a12dfab0ce7c009f08e47135120e7c2f83c65ae50b0f55bada9544c5d3", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "MerkleDistributor", - "label": "merkleRoot", - "type": "t_bytes32", - "src": "contracts/merkles/MerkleDistributor.sol:24" - }, - { - "contract": "MerkleDistributor", - "label": "rewardEthToken", - "type": "t_address", - "src": "contracts/merkles/MerkleDistributor.sol:27" - }, - { - "contract": "MerkleDistributor", - "label": "oracles", - "type": "t_contract(IOracles)7086", - "src": "contracts/merkles/MerkleDistributor.sol:30" - }, - { - "contract": "MerkleDistributor", - "label": "lastUpdateBlockNumber", - "type": "t_uint256", - "src": "contracts/merkles/MerkleDistributor.sol:33" - }, - { - "contract": "MerkleDistributor", - "label": "_claimedBitMap", - "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", - "src": "contracts/merkles/MerkleDistributor.sol:36" - } - ], - "types": { - "t_bytes32": { - "label": "bytes32" - }, - "t_address": { - "label": "address" - }, - "t_contract(IOracles)7086": { - "label": "contract IOracles" - }, - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { - "label": "mapping(bytes32 => mapping(uint256 => uint256))" - }, - "t_mapping(t_uint256,t_uint256)": { - "label": "mapping(uint256 => uint256)" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)2097_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)2097_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1832_storage" - } - ] - }, - "t_struct(Set)1832_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "171192e607fd9fe832fbcecd0f0c39413136c766407e0bff0bfe5e2a6115435f": { - "address": "0x610B58583642610967727fe4fadd125a92D6F678", - "txHash": "0xf14e032482dc6879703eab12dbb50eba23cd4f6f4df9274717c570a686aec9f5", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:225" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" - }, - { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" - }, - { - "contract": "RewardEthToken", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)7696", - "src": "contracts/tokens/RewardEthToken.sol:24" - }, - { - "contract": "RewardEthToken", - "label": "oracles", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:27" - }, - { - "contract": "RewardEthToken", - "label": "checkpoints", - "type": "t_mapping(t_address,t_struct(Checkpoint)7408_storage)", - "src": "contracts/tokens/RewardEthToken.sol:30" - }, - { - "contract": "RewardEthToken", - "label": "maintainer", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:33" - }, - { - "contract": "RewardEthToken", - "label": "maintainerFee", - "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:36" - }, - { - "contract": "RewardEthToken", - "label": "totalRewards", - "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:39" - }, - { - "contract": "RewardEthToken", - "label": "rewardPerToken", - "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:42" - }, - { - "contract": "RewardEthToken", - "label": "lastUpdateBlockNumber", - "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:45" - }, - { - "contract": "RewardEthToken", - "label": "merkleDistributor", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:48" - }, - { - "contract": "RewardEthToken", - "label": "rewardsDisabled", - "type": "t_mapping(t_address,t_bool)", - "src": "contracts/tokens/RewardEthToken.sol:51" - } - ], - "types": { - "t_contract(IStakedEthToken)7696": { - "label": "contract IStakedEthToken" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_struct(Checkpoint)7408_storage)": { - "label": "mapping(address => struct IRewardEthToken.Checkpoint)" - }, - "t_struct(Checkpoint)7408_storage": { - "label": "struct IRewardEthToken.Checkpoint", - "members": [ - { - "label": "reward", - "type": "t_uint128" - }, - { - "label": "rewardPerToken", - "type": "t_uint128" - } - ] - }, - "t_uint128": { - "label": "uint128" - }, - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)" - }, - "t_bool": { - "label": "bool" - }, - "t_mapping(t_address,t_struct(Counter)1781_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, - "t_struct(Counter)1781_storage": { - "label": "struct CountersUpgradeable.Counter", - "members": [ - { - "label": "_value", - "type": "t_uint256" - } - ] - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)" - }, - "t_string_storage": { - "label": "string" - }, - "t_uint8": { - "label": "uint8" - }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)2097_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)2097_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1832_storage" - } - ] - }, - "t_struct(Set)1832_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - } - } - } - }, - "9bd2cf1a4fbb7f9f68dc08bc713114aadadf503ca4fa16a1918347971312c92b": { - "address": "0x41bcac23e4db058d8D7aAbE2Fccdae5F01FE647A", - "txHash": "0x77236f203b41af9bf08d63580200e4f56b4b498bda316ce0efa8c1631534479a", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:225" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" - }, - { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" - }, - { - "contract": "StakedEthToken", - "label": "totalDeposits", - "type": "t_uint256", - "src": "contracts/tokens/StakedEthToken.sol:20" - }, - { - "contract": "StakedEthToken", - "label": "deposits", - "type": "t_mapping(t_address,t_uint256)", - "src": "contracts/tokens/StakedEthToken.sol:23" - }, - { - "contract": "StakedEthToken", - "label": "pool", - "type": "t_address", - "src": "contracts/tokens/StakedEthToken.sol:26" - }, - { - "contract": "StakedEthToken", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)7534", - "src": "contracts/tokens/StakedEthToken.sol:29" - }, - { - "contract": "StakedEthToken", - "label": "distributorPrincipal", + "contract": "StakeWiseToken", + "label": "_totalSupply", "type": "t_uint256", - "src": "contracts/tokens/StakedEthToken.sol:32" + "src": "contracts/tokens/StakeWiseToken.sol:17" } ], "types": { - "t_uint256": { - "label": "uint256" - }, "t_mapping(t_address,t_uint256)": { "label": "mapping(address => uint256)" }, "t_address": { "label": "address" }, - "t_contract(IRewardEthToken)7534": { - "label": "contract IRewardEthToken" + "t_uint256": { + "label": "uint256" }, - "t_mapping(t_address,t_struct(Counter)1781_storage)": { + "t_mapping(t_address,t_struct(Counter)1710_storage)": { "label": "mapping(address => struct CountersUpgradeable.Counter)" }, - "t_struct(Counter)1781_storage": { + "t_struct(Counter)1710_storage": { "label": "struct CountersUpgradeable.Counter", "members": [ { @@ -2312,7 +229,7 @@ "members": [ { "label": "members", - "type": "t_struct(AddressSet)2097_storage" + "type": "t_struct(AddressSet)2026_storage" }, { "label": "adminRole", @@ -2320,16 +237,16 @@ } ] }, - "t_struct(AddressSet)2097_storage": { + "t_struct(AddressSet)2026_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1832_storage" + "type": "t_struct(Set)1761_storage" } ] }, - "t_struct(Set)1832_storage": { + "t_struct(Set)1761_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -2354,9 +271,9 @@ } } }, - "e247ded034d97f4fdf5b6153b98d324eea7cea56c6a61778ccd352dbbdad19ee": { - "address": "0xd3ea5BF3bB42542B5b64358C12F06233704e9b99", - "txHash": "0xb19a687a2a602619e0424904de456cde8ea3f58286164ffd37db5e5cc7193e33", + "7e326bc95738472f562a024cfb314277973b02dece8afdcc5ca2556ffbfd9d70": { + "address": "0xbeE3Eb97Cfd94ace6B66E606B8088C57c5f78fBf", + "txHash": "0xa626de677233c869fb99d3ca1c643f2f108655aaae710401e73125ec79385e45", "layout": { "storage": [ { @@ -2414,103 +331,40 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "Oracles", - "label": "syncPeriod", - "type": "t_uint256", - "src": "contracts/Oracles.sol:27" - }, - { - "contract": "Oracles", - "label": "candidates", - "type": "t_mapping(t_bytes32,t_uint256)", - "src": "contracts/Oracles.sol:30" - }, - { - "contract": "Oracles", - "label": "rewardEthUniswapPairs", - "type": "t_array(t_address)dyn_storage", - "src": "contracts/Oracles.sol:33" - }, - { - "contract": "Oracles", - "label": "submittedVotes", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Oracles.sol:36" - }, - { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)7534", - "src": "contracts/Oracles.sol:39" - }, - { - "contract": "Oracles", - "label": "nonce", - "type": "t_struct(Counter)1781_storage", - "src": "contracts/Oracles.sol:42" - }, - { - "contract": "Oracles", - "label": "pool", - "type": "t_contract(IPool)7323", - "src": "contracts/Oracles.sol:45" + "contract": "VestingEscrowFactory", + "label": "escrowImplementation", + "type": "t_address", + "src": "contracts/vestings/VestingEscrowFactory.sol:27" }, { - "contract": "Oracles", - "label": "merkleDistributor", - "type": "t_contract(IMerkleDistributor)6883", - "src": "contracts/Oracles.sol:48" + "contract": "VestingEscrowFactory", + "label": "escrows", + "type": "t_mapping(t_address,t_array(t_address)dyn_storage)", + "src": "contracts/vestings/VestingEscrowFactory.sol:30" } ], "types": { - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, "t_address": { "label": "address" }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" - }, - "t_bool": { - "label": "bool" - }, - "t_contract(IRewardEthToken)7534": { - "label": "contract IRewardEthToken" - }, - "t_struct(Counter)1781_storage": { - "label": "struct CountersUpgradeable.Counter", - "members": [ - { - "label": "_value", - "type": "t_uint256" - } - ] - }, - "t_contract(IPool)7323": { - "label": "contract IPool" + "t_mapping(t_address,t_array(t_address)dyn_storage)": { + "label": "mapping(address => address[])" }, - "t_contract(IMerkleDistributor)6883": { - "label": "contract IMerkleDistributor" + "t_array(t_address)dyn_storage": { + "label": "address[]" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, + "t_bytes32": { + "label": "bytes32" + }, "t_struct(RoleData)39_storage": { "label": "struct AccessControlUpgradeable.RoleData", "members": [ { "label": "members", - "type": "t_struct(AddressSet)2097_storage" + "type": "t_struct(AddressSet)2026_storage" }, { "label": "adminRole", @@ -2518,16 +372,16 @@ } ] }, - "t_struct(AddressSet)2097_storage": { + "t_struct(AddressSet)2026_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1832_storage" + "type": "t_struct(Set)1761_storage" } ] }, - "t_struct(Set)1832_storage": { + "t_struct(Set)1761_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -2543,18 +397,27 @@ "t_array(t_bytes32)dyn_storage": { "label": "bytes32[]" }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_uint256": { + "label": "uint256" + }, "t_array(t_uint256)49_storage": { "label": "uint256[49]" }, + "t_bool": { + "label": "bool" + }, "t_array(t_uint256)50_storage": { "label": "uint256[50]" } } } }, - "42be0cabc0cdd10d2534d11a3cfd6561b4cc598188c7f7169e21a7a3855927d8": { - "address": "0x934113976884734E3c6d6B7052D0EFE03FC308B6", - "txHash": "0xf07d3e0cdf79f7215e608fb1fdd6bcf7fc7ac4e1aba586cb1374faf684046edb", + "9bd2cf1a4fbb7f9f68dc08bc713114aadadf503ca4fa16a1918347971312c92b": { + "address": "0x41bcac23e4db058d8D7aAbE2Fccdae5F01FE647A", + "txHash": "0x77236f203b41af9bf08d63580200e4f56b4b498bda316ce0efa8c1631534479a", "layout": { "storage": [ { @@ -2600,90 +463,147 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "Pool", - "label": "activatedValidators", - "type": "t_uint256", - "src": "contracts/pool/Pool.sol:29" + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "contracts/tokens/ERC20Upgradeable.sol:38" }, { - "contract": "Pool", - "label": "withdrawalCredentials", + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:40" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:41" + }, + { + "contract": "ERC20Upgradeable", + "label": "_decimals", + "type": "t_uint8", + "src": "contracts/tokens/ERC20Upgradeable.sol:42" + }, + { + "contract": "ERC20Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)44_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:225" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_NAME", "type": "t_bytes32", - "src": "contracts/pool/Pool.sol:32" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" }, { - "contract": "Pool", - "label": "validatorRegistration", - "type": "t_contract(IDepositContract)5938", - "src": "contracts/pool/Pool.sol:35" + "contract": "EIP712Upgradeable", + "label": "_HASHED_VERSION", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" }, { - "contract": "Pool", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)7131", - "src": "contracts/pool/Pool.sol:38" + "contract": "EIP712Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" }, { - "contract": "Pool", - "label": "validators", - "type": "t_contract(IPoolValidators)6878", - "src": "contracts/pool/Pool.sol:41" + "contract": "ERC20PermitUpgradeable", + "label": "_nonces", + "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" }, { - "contract": "Pool", - "label": "oracles", - "type": "t_address", - "src": "contracts/pool/Pool.sol:44" + "contract": "ERC20PermitUpgradeable", + "label": "_PERMIT_TYPEHASH", + "type": "t_bytes32", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" }, { - "contract": "Pool", - "label": "activations", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", - "src": "contracts/pool/Pool.sol:47" + "contract": "ERC20PermitUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" }, { - "contract": "Pool", - "label": "pendingValidators", + "contract": "StakedEthToken", + "label": "totalDeposits", "type": "t_uint256", - "src": "contracts/pool/Pool.sol:50" + "src": "contracts/tokens/StakedEthToken.sol:20" }, { - "contract": "Pool", - "label": "minActivatingDeposit", - "type": "t_uint256", - "src": "contracts/pool/Pool.sol:53" + "contract": "StakedEthToken", + "label": "deposits", + "type": "t_mapping(t_address,t_uint256)", + "src": "contracts/tokens/StakedEthToken.sol:23" }, { - "contract": "Pool", - "label": "pendingValidatorsLimit", + "contract": "StakedEthToken", + "label": "pool", + "type": "t_address", + "src": "contracts/tokens/StakedEthToken.sol:26" + }, + { + "contract": "StakedEthToken", + "label": "rewardEthToken", + "type": "t_contract(IRewardEthToken)7534", + "src": "contracts/tokens/StakedEthToken.sol:29" + }, + { + "contract": "StakedEthToken", + "label": "distributorPrincipal", "type": "t_uint256", - "src": "contracts/pool/Pool.sol:56" + "src": "contracts/tokens/StakedEthToken.sol:32" } ], "types": { "t_uint256": { "label": "uint256" }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)" + }, + "t_address": { + "label": "address" + }, + "t_contract(IRewardEthToken)7534": { + "label": "contract IRewardEthToken" + }, + "t_mapping(t_address,t_struct(Counter)1781_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)" + }, + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, "t_bytes32": { "label": "bytes32" }, - "t_contract(IDepositContract)5938": { - "label": "contract IDepositContract" + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" }, - "t_contract(IStakedEthToken)7131": { - "label": "contract IStakedEthToken" + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" }, - "t_contract(IPoolValidators)6878": { - "label": "contract IPoolValidators" + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))" }, - "t_address": { - "label": "address" + "t_string_storage": { + "label": "string" }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "label": "mapping(address => mapping(uint256 => uint256))" + "t_uint8": { + "label": "uint8" }, - "t_mapping(t_uint256,t_uint256)": { - "label": "mapping(uint256 => uint256)" + "t_array(t_uint256)44_storage": { + "label": "uint256[44]" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" @@ -2729,14 +649,8 @@ "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, "t_bool": { "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" } } } @@ -3033,9 +947,273 @@ } } }, - "dae99257393acac23ff82aeed3b1f12bee2720c63f0d50a10159b159f0f5240d": { - "address": "0x1d873651c38D912c8A7E1eBfB013Aa96bE5AACBC", - "txHash": "0x2009a306c0ac4207aa9ba61e16bfce5c87d68ca2cf8f55b61776b87091279e6b", + "dae99257393acac23ff82aeed3b1f12bee2720c63f0d50a10159b159f0f5240d": { + "address": "0x1d873651c38D912c8A7E1eBfB013Aa96bE5AACBC", + "txHash": "0x2009a306c0ac4207aa9ba61e16bfce5c87d68ca2cf8f55b61776b87091279e6b", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "MerkleDistributor", + "label": "merkleRoot", + "type": "t_bytes32", + "src": "contracts/merkles/MerkleDistributor.sol:24" + }, + { + "contract": "MerkleDistributor", + "label": "rewardEthToken", + "type": "t_address", + "src": "contracts/merkles/MerkleDistributor.sol:27" + }, + { + "contract": "MerkleDistributor", + "label": "oracles", + "type": "t_contract(IOracles)6342", + "src": "contracts/merkles/MerkleDistributor.sol:30" + }, + { + "contract": "MerkleDistributor", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/merkles/MerkleDistributor.sol:33" + }, + { + "contract": "MerkleDistributor", + "label": "_claimedBitMap", + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", + "src": "contracts/merkles/MerkleDistributor.sol:36" + } + ], + "types": { + "t_bytes32": { + "label": "bytes32" + }, + "t_address": { + "label": "address" + }, + "t_contract(IOracles)6342": { + "label": "contract IOracles" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(bytes32 => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "c16e4b952994fa08e80e4e9254ad6dc7b05d9eb6dc641438f4281b10e5e5ad70": { + "address": "0x584E5D4bD0AE1EEF838796aEe8fb805BbB82439C", + "txHash": "0xcdf6692a8e52b2c4a31fe53b9447ca7b84e95ae32eb1497a73595a2d620f0de5", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + } + ], + "types": { + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_uint256": { + "label": "uint256" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "064504ebb100ee7d08a436e72c0bda2e728c75475bc94a7e2abd77a2848a7380": { + "address": "0xe68E649862F7036094f1E4eD5d69a738aCDE666f", + "txHash": "0x453dbec9becf6c8d132ba589c2653d33d48950a04353bd9f48070ebc5cd19b4f", "layout": { "storage": [ { @@ -3081,51 +1259,87 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "MerkleDistributor", - "label": "merkleRoot", + "contract": "Pool", + "label": "activatedValidators", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:26" + }, + { + "contract": "Pool", + "label": "withdrawalCredentials", "type": "t_bytes32", - "src": "contracts/merkles/MerkleDistributor.sol:24" + "src": "contracts/pool/Pool.sol:29" }, { - "contract": "MerkleDistributor", - "label": "rewardEthToken", - "type": "t_address", - "src": "contracts/merkles/MerkleDistributor.sol:27" + "contract": "Pool", + "label": "validatorRegistration", + "type": "t_contract(IDepositContract)5811", + "src": "contracts/pool/Pool.sol:32" }, { - "contract": "MerkleDistributor", + "contract": "Pool", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)6891", + "src": "contracts/pool/Pool.sol:35" + }, + { + "contract": "Pool", + "label": "validators", + "type": "t_contract(IPoolValidators)6638", + "src": "contracts/pool/Pool.sol:38" + }, + { + "contract": "Pool", "label": "oracles", - "type": "t_contract(IOracles)6342", - "src": "contracts/merkles/MerkleDistributor.sol:30" + "type": "t_address", + "src": "contracts/pool/Pool.sol:41" }, { - "contract": "MerkleDistributor", - "label": "lastUpdateBlockNumber", + "contract": "Pool", + "label": "activations", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "contracts/pool/Pool.sol:44" + }, + { + "contract": "Pool", + "label": "pendingValidators", "type": "t_uint256", - "src": "contracts/merkles/MerkleDistributor.sol:33" + "src": "contracts/pool/Pool.sol:47" }, { - "contract": "MerkleDistributor", - "label": "_claimedBitMap", - "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", - "src": "contracts/merkles/MerkleDistributor.sol:36" + "contract": "Pool", + "label": "minActivatingDeposit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:50" + }, + { + "contract": "Pool", + "label": "pendingValidatorsLimit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:53" } ], "types": { + "t_uint256": { + "label": "uint256" + }, "t_bytes32": { "label": "bytes32" }, - "t_address": { - "label": "address" + "t_contract(IDepositContract)5811": { + "label": "contract IDepositContract" }, - "t_contract(IOracles)6342": { - "label": "contract IOracles" + "t_contract(IStakedEthToken)6891": { + "label": "contract IStakedEthToken" }, - "t_uint256": { - "label": "uint256" + "t_contract(IPoolValidators)6638": { + "label": "contract IPoolValidators" }, - "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { - "label": "mapping(bytes32 => mapping(uint256 => uint256))" + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))" }, "t_mapping(t_uint256,t_uint256)": { "label": "mapping(uint256 => uint256)" @@ -3186,9 +1400,9 @@ } } }, - "d377dd09cee01cc34566867233cd0093a8d4210bca54a545b32d225e878fbefb": { - "address": "0xD420f9BE4cd6c96993fd940EF13110746AE48abC", - "txHash": "0x097eed8ce05991682968966db5597f72dea0964a16a76e0abcd16b3269cca43a", + "514ff2914356e122ba52ceaf5c69fbda4b8a2d29845693660d73d5b3db8a5734": { + "address": "0xfa00515082fe90430C80DA9B299f353929653d7B", + "txHash": "0x65770cb60072af3601d69bac17b6c1143e98524a6fae4989c203f0b5cb409b51", "layout": { "storage": [ { @@ -3247,90 +1461,64 @@ }, { "contract": "PoolValidators", - "label": "validatorStatuses", - "type": "t_mapping(t_bytes32,t_enum(ValidatorStatus)6737)", + "label": "isValidatorRegistered", + "type": "t_mapping(t_bytes32,t_bool)", "src": "contracts/pool/PoolValidators.sol:24" }, - { - "contract": "PoolValidators", - "label": "collaterals", - "type": "t_mapping(t_address,t_uint256)", - "src": "contracts/pool/PoolValidators.sol:27" - }, { "contract": "PoolValidators", "label": "operators", - "type": "t_mapping(t_address,t_struct(Operator)6721_storage)", - "src": "contracts/pool/PoolValidators.sol:30" + "type": "t_mapping(t_address,t_struct(Operator)6548_storage)", + "src": "contracts/pool/PoolValidators.sol:27" }, { "contract": "PoolValidators", "label": "pool", - "type": "t_contract(IPool)6651", - "src": "contracts/pool/PoolValidators.sol:33" + "type": "t_contract(IPool)6482", + "src": "contracts/pool/PoolValidators.sol:30" }, { "contract": "PoolValidators", "label": "oracles", "type": "t_address", - "src": "contracts/pool/PoolValidators.sol:36" + "src": "contracts/pool/PoolValidators.sol:33" } ], "types": { - "t_mapping(t_bytes32,t_enum(ValidatorStatus)6737)": { - "label": "mapping(bytes32 => enum IPoolValidators.ValidatorStatus)" + "t_mapping(t_bytes32,t_bool)": { + "label": "mapping(bytes32 => bool)" }, "t_bytes32": { "label": "bytes32" }, - "t_enum(ValidatorStatus)6737": { - "label": "enum IPoolValidators.ValidatorStatus", - "members": [ - "Uninitialized", - "Initialized", - "Finalized", - "Failed" - ] + "t_bool": { + "label": "bool" }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)" + "t_mapping(t_address,t_struct(Operator)6548_storage)": { + "label": "mapping(address => struct IPoolValidators.Operator)" }, "t_address": { "label": "address" }, - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_address,t_struct(Operator)6721_storage)": { - "label": "mapping(address => struct IPoolValidators.Operator)" - }, - "t_struct(Operator)6721_storage": { + "t_struct(Operator)6548_storage": { "label": "struct IPoolValidators.Operator", "members": [ { - "label": "initializeMerkleRoot", - "type": "t_bytes32" - }, - { - "label": "finalizeMerkleRoot", + "label": "depositDataMerkleRoot", "type": "t_bytes32" }, - { - "label": "locked", - "type": "t_bool" - }, { "label": "committed", "type": "t_bool" } ] }, - "t_bool": { - "label": "bool" - }, - "t_contract(IPool)6651": { + "t_contract(IPool)6482": { "label": "contract IPool" }, + "t_uint256": { + "label": "uint256" + }, "t_array(t_uint256)49_storage": { "label": "uint256[49]" }, @@ -3384,9 +1572,9 @@ } } }, - "80825b74c6a6f5cc9b67b8563f272012ebc5da55f88f626617229b6f56169c85": { - "address": "0x1cFcF1893326844270ec077fe996C785EFDed4B1", - "txHash": "0x5532306886ff6e930f35b77315c8f20e5aace6608b3b1bb5ae5a2761074ecb9a", + "18c76f9f9c8cbc616449cdc622ac25ad9bd25971f8875f66a6c1201056b8b325": { + "address": "0xDb123d84CdB055fdbFa9058f64A460BB0fBF8eAE", + "txHash": "0x647d2cf174087c56fb6e6ffd75054f3a5ea1ed8572e280f27bdf13b7da691202", "layout": { "storage": [ { @@ -3446,25 +1634,25 @@ { "contract": "Oracles", "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)7034", + "type": "t_contract(IRewardEthToken)6794", "src": "contracts/Oracles.sol:37" }, { "contract": "Oracles", "label": "pool", - "type": "t_contract(IPool)6651", + "type": "t_contract(IPool)6482", "src": "contracts/Oracles.sol:40" }, { "contract": "Oracles", "label": "poolValidators", - "type": "t_contract(IPoolValidators)6878", + "type": "t_contract(IPoolValidators)6638", "src": "contracts/Oracles.sol:43" }, { "contract": "Oracles", "label": "merkleDistributor", - "type": "t_contract(IMerkleDistributor)6095", + "type": "t_contract(IMerkleDistributor)5968", "src": "contracts/Oracles.sol:46" } ], @@ -3481,16 +1669,16 @@ "t_uint256": { "label": "uint256" }, - "t_contract(IRewardEthToken)7034": { + "t_contract(IRewardEthToken)6794": { "label": "contract IRewardEthToken" }, - "t_contract(IPool)6651": { + "t_contract(IPool)6482": { "label": "contract IPool" }, - "t_contract(IPoolValidators)6878": { + "t_contract(IPoolValidators)6638": { "label": "contract IPoolValidators" }, - "t_contract(IMerkleDistributor)6095": { + "t_contract(IMerkleDistributor)5968": { "label": "contract IMerkleDistributor" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { @@ -3551,117 +1739,6 @@ } } } - }, - "c16e4b952994fa08e80e4e9254ad6dc7b05d9eb6dc641438f4281b10e5e5ad70": { - "address": "0x584E5D4bD0AE1EEF838796aEe8fb805BbB82439C", - "txHash": "0xcdf6692a8e52b2c4a31fe53b9447ca7b84e95ae32eb1497a73595a2d620f0de5", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - } - ], - "types": { - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)2097_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)2097_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1832_storage" - } - ] - }, - "t_struct(Set)1832_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_uint256": { - "label": "uint256" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } } } } diff --git a/.openzeppelin/unknown-31337.json b/.openzeppelin/unknown-31337.json index 072464ba..ac08a7ac 100644 --- a/.openzeppelin/unknown-31337.json +++ b/.openzeppelin/unknown-31337.json @@ -5,11 +5,6 @@ "txHash": "0x3490ab3e78ab96f5059d9ea25c009d476eec9d8c4d4d7009bb33f130e5046ab7" }, "proxies": [ - { - "address": "0xaAc73D4A26Ae6906aa115118b7840b1F19fcd3A5", - "txHash": "0xdf4df05f116f81e505766f972142acc16479ade3961b7920ce5b434f4023f289", - "kind": "transparent" - }, { "address": "0xC874b064f465bdD6411D45734b56fac750Cda29A", "txHash": "0xefa2f24402c9380a7721c725734809820ad8ac4f042f4e7f9aee77a1a54e662e", @@ -30,11 +25,6 @@ "txHash": "0x2ea1150808638522d935c7d66b6d67782389b5123682ca466c9b97ac0eb0c050", "kind": "transparent" }, - { - "address": "0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514", - "txHash": "0x28ad7e3db8e157ef24f2aa6da7ad00cc1d55e0b2c0d161488a71e298a9cee21d", - "kind": "transparent" - }, { "address": "0x7B910cc3D4B42FEFF056218bD56d7700E4ea7dD5", "txHash": "0x0dfc545843dc9b5853a5b727e9a8e955f8d193bb2f6415591bdd3e2c245449f5", @@ -46,241 +36,44 @@ "kind": "transparent" }, { - "address": "0x0e75786cB831bEE6d4484031Af12490Ab528c770", - "txHash": "0xe7135d26f8c388d29d2a29c19ecd69c8e69de6ce2aa5014e6ba1cbcc389e9def", + "address": "0xC486c10e3611565F5b38b50ad68277b11C889623", + "txHash": "0x3add6dc8ba0e0bf8ffb7301fb049cf9953461951f63d304681d70cdc8c45cec2", "kind": "transparent" }, { - "address": "0xE949060ACE386D5e277De217703B17A2547f24C0", - "txHash": "0x2e2dafc452302b358f11bc4c2dd7631438b1a1284082d4fccadbdd9041ee43f5", + "address": "0x002932e11E95DC84C17ed5f94a0439645D8a97BC", + "txHash": "0xc2620ea4a161fe391020b42f03e2ff4c0a29cda6538c8a56212dbf9a9107522e", "kind": "transparent" }, { - "address": "0xC486c10e3611565F5b38b50ad68277b11C889623", - "txHash": "0x3add6dc8ba0e0bf8ffb7301fb049cf9953461951f63d304681d70cdc8c45cec2", + "address": "0x8a887282E67ff41d36C0b7537eAB035291461AcD", + "txHash": "0x2eb5e24c36d9cb509472f992afa14521f8ad58a21fae500f633f85e07535f506", "kind": "transparent" } ], "impls": { - "84dece82968538be3061b96eba9ebf393b48892f1cc2d730d20711cfa3f49e86": { - "address": "0xa34E1010E2b76abdf7399E6C88147D0FAfE28e90", - "txHash": "0x1a4332730b0fb57cf85d9cd1e69c2d90e708c6074786f56cbc05fbeee47e29db", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Validators", - "label": "publicKeys", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Validators.sol:19" - }, - { - "contract": "Validators", - "label": "pool", - "type": "t_address", - "src": "contracts/Validators.sol:22" - }, - { - "contract": "Validators", - "label": "solos", - "type": "t_address", - "src": "contracts/Validators.sol:25" - } - ], - "types": { - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "3c2ba5b01bcebe2c48833d843424b7dbcdfa3752334326296bfeb99eab2e4b99": { - "address": "0xf6a519699dd2f66a8Aa1F49B81C73690F104647f", - "txHash": "0xd1a832b29db69905f48a075effac4d274565ff837d4a083712fb3dfa49a704f6", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Pool", - "label": "collectedAmount", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:25" - }, - { - "contract": "Pool", - "label": "withdrawalCredentials", - "type": "t_bytes32", - "src": "contracts/collectors/Pool.sol:28" - }, - { - "contract": "Pool", - "label": "validatorRegistration", - "type": "t_contract(IDepositContract)4685", - "src": "contracts/collectors/Pool.sol:31" - }, - { - "contract": "Pool", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)5227", - "src": "contracts/collectors/Pool.sol:34" - }, - { - "contract": "Pool", - "label": "validators", - "type": "t_contract(IValidators)5275", - "src": "contracts/collectors/Pool.sol:37" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_contract(IDepositContract)4685": { - "label": "contract IDepositContract" - }, - "t_contract(IStakedEthToken)5227": { - "label": "contract IStakedEthToken" - }, - "t_contract(IValidators)5275": { - "label": "contract IValidators" - }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "3a535bc8d9b69aa26341824b12caf3d267e2712fbe4e4a0e389fb306a6ff29c8": { - "address": "0x6A8a1716a44f700af56ea52D44B916A50333A369", - "txHash": "0x5e214beece1c31c69f3b927f96c0547ce744c5c3cc4c1dca171bb26fcd5a839b", + "92f2fa955a8b14d88f0d6bdccad2dac5752f89ba4a34c06d54a6512633c9c628": { + "address": "0xA28C2d79f0c5B78CeC699DAB0303008179815396", + "txHash": "0x89bdc085721509174aba659d8b9c80d32f86d5ab37c144073636dbe76d6c1e32", "layout": { "storage": [ { "contract": "Initializable", "label": "_initialized", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" }, { "contract": "Initializable", "label": "_initializing", "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" }, { "contract": "ContextUpgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" }, { "contract": "PausableUpgradeable", @@ -297,7 +90,7 @@ { "contract": "AccessControlUpgradeable", "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" }, { @@ -334,1947 +127,71 @@ "contract": "ERC20Upgradeable", "label": "__gap", "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:223" + "src": "contracts/tokens/ERC20Upgradeable.sol:225" }, { "contract": "EIP712Upgradeable", "label": "_HASHED_NAME", "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:27" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" }, { "contract": "EIP712Upgradeable", "label": "_HASHED_VERSION", "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:28" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" }, { "contract": "EIP712Upgradeable", "label": "__gap", "type": "t_array(t_uint256)50_storage", - "src": "contracts/tokens/EIP712Upgradeable.sol:124" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" }, { "contract": "ERC20PermitUpgradeable", "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)951_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:24" + "type": "t_mapping(t_address,t_struct(Counter)1710_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" }, { "contract": "ERC20PermitUpgradeable", "label": "_PERMIT_TYPEHASH", "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:27" + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" }, { "contract": "ERC20PermitUpgradeable", "label": "__gap", "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:86" - }, - { - "contract": "StakedEthToken", - "label": "totalDeposits", - "type": "t_uint256", - "src": "contracts/tokens/StakedEthToken.sol:20" + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" }, { - "contract": "StakedEthToken", - "label": "deposits", + "contract": "StakeWiseToken", + "label": "_balances", "type": "t_mapping(t_address,t_uint256)", - "src": "contracts/tokens/StakedEthToken.sol:23" - }, - { - "contract": "StakedEthToken", - "label": "pool", - "type": "t_address", - "src": "contracts/tokens/StakedEthToken.sol:26" - }, - { - "contract": "StakedEthToken", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)5069", - "src": "contracts/tokens/StakedEthToken.sol:29" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)" - }, - "t_address": { - "label": "address" - }, - "t_contract(IRewardEthToken)5069": { - "label": "contract IRewardEthToken" - }, - "t_mapping(t_address,t_struct(Counter)951_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" - }, - "t_string_storage": { - "label": "string" - }, - "t_uint8": { - "label": "uint8" - }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" - }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + "src": "contracts/tokens/StakeWiseToken.sol:15" }, - "t_bool": { - "label": "bool" - } - } - } - }, - "5370a49c5717f9aacd12db411bd25748fae480eab79cf2712c7c5c3aa1295a90": { - "address": "0x46B7232bc7392b157371eBFcD4618Ca9CEedb1bd", - "txHash": "0xdc0f09fd8ffd9aeba4dcccf0994a2d26c61a7d418bf7d01fdaaa7bdc70a7a2c9", - "layout": { - "storage": [ { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:223" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", - "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:27" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "contracts/tokens/EIP712Upgradeable.sol:28" - }, - { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "contracts/tokens/EIP712Upgradeable.sol:124" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)951_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:24" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:27" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:86" - }, - { - "contract": "RewardEthToken", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)5227", - "src": "contracts/tokens/RewardEthToken.sol:22" - }, - { - "contract": "RewardEthToken", - "label": "oracles", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:25" - }, - { - "contract": "RewardEthToken", - "label": "checkpoints", - "type": "t_mapping(t_address,t_struct(Checkpoint)4971_storage)", - "src": "contracts/tokens/RewardEthToken.sol:28" - }, - { - "contract": "RewardEthToken", - "label": "maintainer", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:31" - }, - { - "contract": "RewardEthToken", - "label": "maintainerFee", - "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:34" - }, - { - "contract": "RewardEthToken", - "label": "totalRewards", - "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:37" - }, - { - "contract": "RewardEthToken", - "label": "rewardPerToken", - "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:40" - }, - { - "contract": "RewardEthToken", - "label": "lastUpdateTimestamp", - "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:43" - } - ], - "types": { - "t_contract(IStakedEthToken)5227": { - "label": "contract IStakedEthToken" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_struct(Checkpoint)4971_storage)": { - "label": "mapping(address => struct IRewardEthToken.Checkpoint)" - }, - "t_uint256": { - "label": "uint256" - }, - "t_uint128": { - "label": "uint128" - }, - "t_mapping(t_address,t_struct(Counter)951_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" - }, - "t_string_storage": { - "label": "string" - }, - "t_uint8": { - "label": "uint8" - }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" - }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_bool": { - "label": "bool" - } - } - } - }, - "e43b57215f4a8a0604ed9cf0c3db3ee217fca96cdd0c8807f931fc346c88ee96": { - "address": "0xfdec24BB3055BE9578300f1541d5e0Ee4eDa6261", - "txHash": "0x4b2bce9a29734672917727e27a47d4a44b20953b04be7f4215fae4d77058fdec", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:24" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:29" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/GSN/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)84_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Oracles", - "label": "totalRewardsUpdatePeriod", - "type": "t_uint256", - "src": "contracts/Oracles.sol:26" - }, - { - "contract": "Oracles", - "label": "candidates", - "type": "t_mapping(t_bytes32,t_uint256)", - "src": "contracts/Oracles.sol:29" - }, - { - "contract": "Oracles", - "label": "rewardEthUniswapPairs", - "type": "t_array(t_address)dyn_storage", - "src": "contracts/Oracles.sol:32" - }, - { - "contract": "Oracles", - "label": "submittedVotes", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Oracles.sol:35" - }, - { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)5069", - "src": "contracts/Oracles.sol:38" - }, - { - "contract": "Oracles", - "label": "totalRewardsNonce", - "type": "t_struct(Counter)951_storage", - "src": "contracts/Oracles.sol:41" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" - }, - "t_contract(IRewardEthToken)5069": { - "label": "contract IRewardEthToken" - }, - "t_struct(Counter)951_storage": { - "label": "struct CountersUpgradeable.Counter" - }, - "t_mapping(t_bytes32,t_struct(RoleData)84_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "1180315bf4492fa65c4efbff97aef9be398013d10c1aff681a175a03508864ae": { - "address": "0xc8970E7C07c251625F9F93cE510b1D9c1a08d299", - "txHash": "0x32c727ebb5dbbc1bd89a3a21cf15d9e74dbc688b404b60a286a9ae858c4967e2", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Pool", - "label": "activatedValidators", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:25" - }, - { - "contract": "Pool", - "label": "withdrawalCredentials", - "type": "t_bytes32", - "src": "contracts/collectors/Pool.sol:28" - }, - { - "contract": "Pool", - "label": "validatorRegistration", - "type": "t_contract(IDepositContract)5197", - "src": "contracts/collectors/Pool.sol:31" - }, - { - "contract": "Pool", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)5841", - "src": "contracts/collectors/Pool.sol:34" - }, - { - "contract": "Pool", - "label": "validators", - "type": "t_contract(IValidators)5889", - "src": "contracts/collectors/Pool.sol:37" - }, - { - "contract": "Pool", - "label": "oracles", - "type": "t_address", - "src": "contracts/collectors/Pool.sol:40" - }, - { - "contract": "Pool", - "label": "activations", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", - "src": "contracts/collectors/Pool.sol:43" - }, - { - "contract": "Pool", - "label": "pendingValidators", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:46" - }, - { - "contract": "Pool", - "label": "minActivatingDeposit", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:49" - }, - { - "contract": "Pool", - "label": "pendingValidatorsLimit", - "type": "t_uint256", - "src": "contracts/collectors/Pool.sol:52" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_contract(IDepositContract)5197": { - "label": "contract IDepositContract" - }, - "t_contract(IStakedEthToken)5841": { - "label": "contract IStakedEthToken" - }, - "t_contract(IValidators)5889": { - "label": "contract IValidators" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "label": "mapping(address => mapping(uint256 => uint256))" - }, - "t_mapping(t_uint256,t_uint256)": { - "label": "mapping(uint256 => uint256)" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)1421_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)1421_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1156_storage" - } - ] - }, - "t_struct(Set)1156_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "88b20c6014e9428305028f15b31ccca5163a9836c693c992172ff3122e72bab3": { - "address": "0x749dCCE12E8337dfb44635082519E656d44A2672", - "txHash": "0xf7667e029d07c1ee47a46235bb1e90082142d982a10fa94d95fa919594f07c2f", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "Oracles", - "label": "syncPeriod", - "type": "t_uint256", - "src": "contracts/Oracles.sol:26" - }, - { - "contract": "Oracles", - "label": "candidates", - "type": "t_mapping(t_bytes32,t_uint256)", - "src": "contracts/Oracles.sol:29" - }, - { - "contract": "Oracles", - "label": "rewardEthUniswapPairs", - "type": "t_array(t_address)dyn_storage", - "src": "contracts/Oracles.sol:32" - }, - { - "contract": "Oracles", - "label": "submittedVotes", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Oracles.sol:35" - }, - { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)5683", - "src": "contracts/Oracles.sol:38" - }, - { - "contract": "Oracles", - "label": "nonce", - "type": "t_struct(Counter)1105_storage", - "src": "contracts/Oracles.sol:41" - }, - { - "contract": "Oracles", - "label": "pool", - "type": "t_contract(IPool)5564", - "src": "contracts/Oracles.sol:44" - } - ], - "types": { - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" - }, - "t_bool": { - "label": "bool" - }, - "t_contract(IRewardEthToken)5683": { - "label": "contract IRewardEthToken" - }, - "t_struct(Counter)1105_storage": { - "label": "struct CountersUpgradeable.Counter", - "members": [ - { - "label": "_value", - "type": "t_uint256" - } - ] - }, - "t_contract(IPool)5564": { - "label": "contract IPool" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)1421_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)1421_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1156_storage" - } - ] - }, - "t_struct(Set)1156_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "92f2fa955a8b14d88f0d6bdccad2dac5752f89ba4a34c06d54a6512633c9c628": { - "address": "0xA28C2d79f0c5B78CeC699DAB0303008179815396", - "txHash": "0x89bdc085721509174aba659d8b9c80d32f86d5ab37c144073636dbe76d6c1e32", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:225" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" - }, - { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)1710_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" - }, - { - "contract": "StakeWiseToken", - "label": "_balances", - "type": "t_mapping(t_address,t_uint256)", - "src": "contracts/tokens/StakeWiseToken.sol:15" - }, - { - "contract": "StakeWiseToken", - "label": "_totalSupply", - "type": "t_uint256", - "src": "contracts/tokens/StakeWiseToken.sol:17" - } - ], - "types": { - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)" - }, - "t_address": { - "label": "address" - }, - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_address,t_struct(Counter)1710_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, - "t_struct(Counter)1710_storage": { - "label": "struct CountersUpgradeable.Counter", - "members": [ - { - "label": "_value", - "type": "t_uint256" - } - ] - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" - }, - "t_string_storage": { - "label": "string" - }, - "t_uint8": { - "label": "uint8" - }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)2026_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)2026_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1761_storage" - } - ] - }, - "t_struct(Set)1761_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_bool": { - "label": "bool" - } - } - } - }, - "de2b2b9599ed08c7b524042f3efbe7c2d5a43aedd25613e6c7d209c01cbbbbd5": { - "address": "0x27356a244cD2a8bBd0A1f4E96E8FCd70bF926Bc3", - "txHash": "0x13ee96fe09831c3409799fa008729cb73efd98f65e43c5115841d42f9cbcaa16", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "VestingEscrowFactory", - "label": "escrowImplementation", - "type": "t_address", - "src": "contracts/vestings/VestingEscrowFactory.sol:27" - }, - { - "contract": "VestingEscrowFactory", - "label": "escrows", - "type": "t_mapping(t_address,t_array(t_address)dyn_storage)", - "src": "contracts/vestings/VestingEscrowFactory.sol:30" - } - ], - "types": { - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_array(t_address)dyn_storage)": { - "label": "mapping(address => address[])" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)2026_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)2026_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1761_storage" - } - ] - }, - "t_struct(Set)1761_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_uint256": { - "label": "uint256" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "7e326bc95738472f562a024cfb314277973b02dece8afdcc5ca2556ffbfd9d70": { - "address": "0xbeE3Eb97Cfd94ace6B66E606B8088C57c5f78fBf", - "txHash": "0xa626de677233c869fb99d3ca1c643f2f108655aaae710401e73125ec79385e45", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "_status", - "type": "t_uint256", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:37" - }, - { - "contract": "ReentrancyGuardUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ReentrancyGuardUpgradeable.sol:67" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "VestingEscrowFactory", - "label": "escrowImplementation", - "type": "t_address", - "src": "contracts/vestings/VestingEscrowFactory.sol:27" - }, - { - "contract": "VestingEscrowFactory", - "label": "escrows", - "type": "t_mapping(t_address,t_array(t_address)dyn_storage)", - "src": "contracts/vestings/VestingEscrowFactory.sol:30" - } - ], - "types": { - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_array(t_address)dyn_storage)": { - "label": "mapping(address => address[])" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)2026_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)2026_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1761_storage" - } - ] - }, - "t_struct(Set)1761_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_uint256": { - "label": "uint256" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "97347223e792bf368d6a6c9d760d82b455a5edc1629dff43cd9ce0e019b9b25f": { - "address": "0x459beef3c5Bd5D1E66de93AC908E278ee2488F14", - "txHash": "0xeae913a12dfab0ce7c009f08e47135120e7c2f83c65ae50b0f55bada9544c5d3", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "MerkleDistributor", - "label": "merkleRoot", - "type": "t_bytes32", - "src": "contracts/merkles/MerkleDistributor.sol:24" - }, - { - "contract": "MerkleDistributor", - "label": "rewardEthToken", - "type": "t_address", - "src": "contracts/merkles/MerkleDistributor.sol:27" - }, - { - "contract": "MerkleDistributor", - "label": "oracles", - "type": "t_contract(IOracles)7086", - "src": "contracts/merkles/MerkleDistributor.sol:30" - }, - { - "contract": "MerkleDistributor", - "label": "lastUpdateBlockNumber", - "type": "t_uint256", - "src": "contracts/merkles/MerkleDistributor.sol:33" - }, - { - "contract": "MerkleDistributor", - "label": "_claimedBitMap", - "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", - "src": "contracts/merkles/MerkleDistributor.sol:36" - } - ], - "types": { - "t_bytes32": { - "label": "bytes32" - }, - "t_address": { - "label": "address" - }, - "t_contract(IOracles)7086": { - "label": "contract IOracles" - }, - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { - "label": "mapping(bytes32 => mapping(uint256 => uint256))" - }, - "t_mapping(t_uint256,t_uint256)": { - "label": "mapping(uint256 => uint256)" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)2097_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)2097_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1832_storage" - } - ] - }, - "t_struct(Set)1832_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } - }, - "171192e607fd9fe832fbcecd0f0c39413136c766407e0bff0bfe5e2a6115435f": { - "address": "0x610B58583642610967727fe4fadd125a92D6F678", - "txHash": "0xf14e032482dc6879703eab12dbb50eba23cd4f6f4df9274717c570a686aec9f5", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:225" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" - }, - { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" - }, - { - "contract": "RewardEthToken", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)7696", - "src": "contracts/tokens/RewardEthToken.sol:24" - }, - { - "contract": "RewardEthToken", - "label": "oracles", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:27" - }, - { - "contract": "RewardEthToken", - "label": "checkpoints", - "type": "t_mapping(t_address,t_struct(Checkpoint)7408_storage)", - "src": "contracts/tokens/RewardEthToken.sol:30" - }, - { - "contract": "RewardEthToken", - "label": "maintainer", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:33" - }, - { - "contract": "RewardEthToken", - "label": "maintainerFee", - "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:36" - }, - { - "contract": "RewardEthToken", - "label": "totalRewards", - "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:39" - }, - { - "contract": "RewardEthToken", - "label": "rewardPerToken", - "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:42" - }, - { - "contract": "RewardEthToken", - "label": "lastUpdateBlockNumber", - "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:45" - }, - { - "contract": "RewardEthToken", - "label": "merkleDistributor", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:48" - }, - { - "contract": "RewardEthToken", - "label": "rewardsDisabled", - "type": "t_mapping(t_address,t_bool)", - "src": "contracts/tokens/RewardEthToken.sol:51" - } - ], - "types": { - "t_contract(IStakedEthToken)7696": { - "label": "contract IStakedEthToken" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_struct(Checkpoint)7408_storage)": { - "label": "mapping(address => struct IRewardEthToken.Checkpoint)" - }, - "t_struct(Checkpoint)7408_storage": { - "label": "struct IRewardEthToken.Checkpoint", - "members": [ - { - "label": "reward", - "type": "t_uint128" - }, - { - "label": "rewardPerToken", - "type": "t_uint128" - } - ] - }, - "t_uint128": { - "label": "uint128" - }, - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)" - }, - "t_bool": { - "label": "bool" - }, - "t_mapping(t_address,t_struct(Counter)1781_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, - "t_struct(Counter)1781_storage": { - "label": "struct CountersUpgradeable.Counter", - "members": [ - { - "label": "_value", - "type": "t_uint256" - } - ] - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" - }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)" - }, - "t_string_storage": { - "label": "string" - }, - "t_uint8": { - "label": "uint8" - }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" - }, - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)2097_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)2097_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1832_storage" - } - ] - }, - "t_struct(Set)1832_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - } - } - } - }, - "9bd2cf1a4fbb7f9f68dc08bc713114aadadf503ca4fa16a1918347971312c92b": { - "address": "0x41bcac23e4db058d8D7aAbE2Fccdae5F01FE647A", - "txHash": "0x77236f203b41af9bf08d63580200e4f56b4b498bda316ce0efa8c1631534479a", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - }, - { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:225" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" - }, - { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" - }, - { - "contract": "StakedEthToken", - "label": "totalDeposits", - "type": "t_uint256", - "src": "contracts/tokens/StakedEthToken.sol:20" - }, - { - "contract": "StakedEthToken", - "label": "deposits", - "type": "t_mapping(t_address,t_uint256)", - "src": "contracts/tokens/StakedEthToken.sol:23" - }, - { - "contract": "StakedEthToken", - "label": "pool", - "type": "t_address", - "src": "contracts/tokens/StakedEthToken.sol:26" - }, - { - "contract": "StakedEthToken", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)7534", - "src": "contracts/tokens/StakedEthToken.sol:29" - }, - { - "contract": "StakedEthToken", - "label": "distributorPrincipal", + "contract": "StakeWiseToken", + "label": "_totalSupply", "type": "t_uint256", - "src": "contracts/tokens/StakedEthToken.sol:32" + "src": "contracts/tokens/StakeWiseToken.sol:17" } ], "types": { - "t_uint256": { - "label": "uint256" - }, "t_mapping(t_address,t_uint256)": { "label": "mapping(address => uint256)" }, "t_address": { "label": "address" }, - "t_contract(IRewardEthToken)7534": { - "label": "contract IRewardEthToken" + "t_uint256": { + "label": "uint256" }, - "t_mapping(t_address,t_struct(Counter)1781_storage)": { + "t_mapping(t_address,t_struct(Counter)1710_storage)": { "label": "mapping(address => struct CountersUpgradeable.Counter)" }, - "t_struct(Counter)1781_storage": { + "t_struct(Counter)1710_storage": { "label": "struct CountersUpgradeable.Counter", "members": [ { @@ -2312,7 +229,7 @@ "members": [ { "label": "members", - "type": "t_struct(AddressSet)2097_storage" + "type": "t_struct(AddressSet)2026_storage" }, { "label": "adminRole", @@ -2320,16 +237,16 @@ } ] }, - "t_struct(AddressSet)2097_storage": { + "t_struct(AddressSet)2026_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1832_storage" + "type": "t_struct(Set)1761_storage" } ] }, - "t_struct(Set)1832_storage": { + "t_struct(Set)1761_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -2354,9 +271,9 @@ } } }, - "e247ded034d97f4fdf5b6153b98d324eea7cea56c6a61778ccd352dbbdad19ee": { - "address": "0xd3ea5BF3bB42542B5b64358C12F06233704e9b99", - "txHash": "0xb19a687a2a602619e0424904de456cde8ea3f58286164ffd37db5e5cc7193e33", + "7e326bc95738472f562a024cfb314277973b02dece8afdcc5ca2556ffbfd9d70": { + "address": "0xbeE3Eb97Cfd94ace6B66E606B8088C57c5f78fBf", + "txHash": "0xa626de677233c869fb99d3ca1c643f2f108655aaae710401e73125ec79385e45", "layout": { "storage": [ { @@ -2414,103 +331,40 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "Oracles", - "label": "syncPeriod", - "type": "t_uint256", - "src": "contracts/Oracles.sol:27" - }, - { - "contract": "Oracles", - "label": "candidates", - "type": "t_mapping(t_bytes32,t_uint256)", - "src": "contracts/Oracles.sol:30" - }, - { - "contract": "Oracles", - "label": "rewardEthUniswapPairs", - "type": "t_array(t_address)dyn_storage", - "src": "contracts/Oracles.sol:33" - }, - { - "contract": "Oracles", - "label": "submittedVotes", - "type": "t_mapping(t_bytes32,t_bool)", - "src": "contracts/Oracles.sol:36" - }, - { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)7534", - "src": "contracts/Oracles.sol:39" - }, - { - "contract": "Oracles", - "label": "nonce", - "type": "t_struct(Counter)1781_storage", - "src": "contracts/Oracles.sol:42" - }, - { - "contract": "Oracles", - "label": "pool", - "type": "t_contract(IPool)7323", - "src": "contracts/Oracles.sol:45" + "contract": "VestingEscrowFactory", + "label": "escrowImplementation", + "type": "t_address", + "src": "contracts/vestings/VestingEscrowFactory.sol:27" }, { - "contract": "Oracles", - "label": "merkleDistributor", - "type": "t_contract(IMerkleDistributor)6883", - "src": "contracts/Oracles.sol:48" + "contract": "VestingEscrowFactory", + "label": "escrows", + "type": "t_mapping(t_address,t_array(t_address)dyn_storage)", + "src": "contracts/vestings/VestingEscrowFactory.sol:30" } ], "types": { - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_address)dyn_storage": { - "label": "address[]" - }, "t_address": { "label": "address" }, - "t_mapping(t_bytes32,t_bool)": { - "label": "mapping(bytes32 => bool)" - }, - "t_bool": { - "label": "bool" - }, - "t_contract(IRewardEthToken)7534": { - "label": "contract IRewardEthToken" - }, - "t_struct(Counter)1781_storage": { - "label": "struct CountersUpgradeable.Counter", - "members": [ - { - "label": "_value", - "type": "t_uint256" - } - ] - }, - "t_contract(IPool)7323": { - "label": "contract IPool" + "t_mapping(t_address,t_array(t_address)dyn_storage)": { + "label": "mapping(address => address[])" }, - "t_contract(IMerkleDistributor)6883": { - "label": "contract IMerkleDistributor" + "t_array(t_address)dyn_storage": { + "label": "address[]" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, + "t_bytes32": { + "label": "bytes32" + }, "t_struct(RoleData)39_storage": { "label": "struct AccessControlUpgradeable.RoleData", "members": [ { "label": "members", - "type": "t_struct(AddressSet)2097_storage" + "type": "t_struct(AddressSet)2026_storage" }, { "label": "adminRole", @@ -2518,16 +372,16 @@ } ] }, - "t_struct(AddressSet)2097_storage": { + "t_struct(AddressSet)2026_storage": { "label": "struct EnumerableSetUpgradeable.AddressSet", "members": [ { "label": "_inner", - "type": "t_struct(Set)1832_storage" + "type": "t_struct(Set)1761_storage" } ] }, - "t_struct(Set)1832_storage": { + "t_struct(Set)1761_storage": { "label": "struct EnumerableSetUpgradeable.Set", "members": [ { @@ -2543,18 +397,27 @@ "t_array(t_bytes32)dyn_storage": { "label": "bytes32[]" }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_uint256": { + "label": "uint256" + }, "t_array(t_uint256)49_storage": { "label": "uint256[49]" }, + "t_bool": { + "label": "bool" + }, "t_array(t_uint256)50_storage": { "label": "uint256[50]" } } } }, - "42be0cabc0cdd10d2534d11a3cfd6561b4cc598188c7f7169e21a7a3855927d8": { - "address": "0x934113976884734E3c6d6B7052D0EFE03FC308B6", - "txHash": "0xf07d3e0cdf79f7215e608fb1fdd6bcf7fc7ac4e1aba586cb1374faf684046edb", + "9bd2cf1a4fbb7f9f68dc08bc713114aadadf503ca4fa16a1918347971312c92b": { + "address": "0x41bcac23e4db058d8D7aAbE2Fccdae5F01FE647A", + "txHash": "0x77236f203b41af9bf08d63580200e4f56b4b498bda316ce0efa8c1631534479a", "layout": { "storage": [ { @@ -2600,90 +463,147 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "Pool", - "label": "activatedValidators", - "type": "t_uint256", - "src": "contracts/pool/Pool.sol:29" + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "contracts/tokens/ERC20Upgradeable.sol:38" }, { - "contract": "Pool", - "label": "withdrawalCredentials", + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:40" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:41" + }, + { + "contract": "ERC20Upgradeable", + "label": "_decimals", + "type": "t_uint8", + "src": "contracts/tokens/ERC20Upgradeable.sol:42" + }, + { + "contract": "ERC20Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)44_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:225" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_NAME", "type": "t_bytes32", - "src": "contracts/pool/Pool.sol:32" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" }, { - "contract": "Pool", - "label": "validatorRegistration", - "type": "t_contract(IDepositContract)5938", - "src": "contracts/pool/Pool.sol:35" + "contract": "EIP712Upgradeable", + "label": "_HASHED_VERSION", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" }, { - "contract": "Pool", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)7131", - "src": "contracts/pool/Pool.sol:38" + "contract": "EIP712Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" }, { - "contract": "Pool", - "label": "validators", - "type": "t_contract(IPoolValidators)6878", - "src": "contracts/pool/Pool.sol:41" + "contract": "ERC20PermitUpgradeable", + "label": "_nonces", + "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" }, { - "contract": "Pool", - "label": "oracles", - "type": "t_address", - "src": "contracts/pool/Pool.sol:44" + "contract": "ERC20PermitUpgradeable", + "label": "_PERMIT_TYPEHASH", + "type": "t_bytes32", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" }, { - "contract": "Pool", - "label": "activations", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", - "src": "contracts/pool/Pool.sol:47" + "contract": "ERC20PermitUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" }, { - "contract": "Pool", - "label": "pendingValidators", + "contract": "StakedEthToken", + "label": "totalDeposits", "type": "t_uint256", - "src": "contracts/pool/Pool.sol:50" + "src": "contracts/tokens/StakedEthToken.sol:20" }, { - "contract": "Pool", - "label": "minActivatingDeposit", - "type": "t_uint256", - "src": "contracts/pool/Pool.sol:53" + "contract": "StakedEthToken", + "label": "deposits", + "type": "t_mapping(t_address,t_uint256)", + "src": "contracts/tokens/StakedEthToken.sol:23" }, { - "contract": "Pool", - "label": "pendingValidatorsLimit", + "contract": "StakedEthToken", + "label": "pool", + "type": "t_address", + "src": "contracts/tokens/StakedEthToken.sol:26" + }, + { + "contract": "StakedEthToken", + "label": "rewardEthToken", + "type": "t_contract(IRewardEthToken)7534", + "src": "contracts/tokens/StakedEthToken.sol:29" + }, + { + "contract": "StakedEthToken", + "label": "distributorPrincipal", "type": "t_uint256", - "src": "contracts/pool/Pool.sol:56" + "src": "contracts/tokens/StakedEthToken.sol:32" } ], "types": { "t_uint256": { "label": "uint256" }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)" + }, + "t_address": { + "label": "address" + }, + "t_contract(IRewardEthToken)7534": { + "label": "contract IRewardEthToken" + }, + "t_mapping(t_address,t_struct(Counter)1781_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)" + }, + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, "t_bytes32": { "label": "bytes32" }, - "t_contract(IDepositContract)5938": { - "label": "contract IDepositContract" + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" }, - "t_contract(IStakedEthToken)7131": { - "label": "contract IStakedEthToken" + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" }, - "t_contract(IPoolValidators)6878": { - "label": "contract IPoolValidators" + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))" }, - "t_address": { - "label": "address" + "t_string_storage": { + "label": "string" }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "label": "mapping(address => mapping(uint256 => uint256))" + "t_uint8": { + "label": "uint8" }, - "t_mapping(t_uint256,t_uint256)": { - "label": "mapping(uint256 => uint256)" + "t_array(t_uint256)44_storage": { + "label": "uint256[44]" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" @@ -2729,14 +649,8 @@ "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, "t_bool": { "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" } } } @@ -3033,9 +947,273 @@ } } }, - "dae99257393acac23ff82aeed3b1f12bee2720c63f0d50a10159b159f0f5240d": { - "address": "0x1d873651c38D912c8A7E1eBfB013Aa96bE5AACBC", - "txHash": "0x2009a306c0ac4207aa9ba61e16bfce5c87d68ca2cf8f55b61776b87091279e6b", + "dae99257393acac23ff82aeed3b1f12bee2720c63f0d50a10159b159f0f5240d": { + "address": "0x1d873651c38D912c8A7E1eBfB013Aa96bE5AACBC", + "txHash": "0x2009a306c0ac4207aa9ba61e16bfce5c87d68ca2cf8f55b61776b87091279e6b", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "MerkleDistributor", + "label": "merkleRoot", + "type": "t_bytes32", + "src": "contracts/merkles/MerkleDistributor.sol:24" + }, + { + "contract": "MerkleDistributor", + "label": "rewardEthToken", + "type": "t_address", + "src": "contracts/merkles/MerkleDistributor.sol:27" + }, + { + "contract": "MerkleDistributor", + "label": "oracles", + "type": "t_contract(IOracles)6342", + "src": "contracts/merkles/MerkleDistributor.sol:30" + }, + { + "contract": "MerkleDistributor", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/merkles/MerkleDistributor.sol:33" + }, + { + "contract": "MerkleDistributor", + "label": "_claimedBitMap", + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", + "src": "contracts/merkles/MerkleDistributor.sol:36" + } + ], + "types": { + "t_bytes32": { + "label": "bytes32" + }, + "t_address": { + "label": "address" + }, + "t_contract(IOracles)6342": { + "label": "contract IOracles" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(bytes32 => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "c16e4b952994fa08e80e4e9254ad6dc7b05d9eb6dc641438f4281b10e5e5ad70": { + "address": "0x584E5D4bD0AE1EEF838796aEe8fb805BbB82439C", + "txHash": "0xcdf6692a8e52b2c4a31fe53b9447ca7b84e95ae32eb1497a73595a2d620f0de5", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + } + ], + "types": { + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_uint256": { + "label": "uint256" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "064504ebb100ee7d08a436e72c0bda2e728c75475bc94a7e2abd77a2848a7380": { + "address": "0xe68E649862F7036094f1E4eD5d69a738aCDE666f", + "txHash": "0x453dbec9becf6c8d132ba589c2653d33d48950a04353bd9f48070ebc5cd19b4f", "layout": { "storage": [ { @@ -3081,51 +1259,87 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "MerkleDistributor", - "label": "merkleRoot", + "contract": "Pool", + "label": "activatedValidators", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:26" + }, + { + "contract": "Pool", + "label": "withdrawalCredentials", "type": "t_bytes32", - "src": "contracts/merkles/MerkleDistributor.sol:24" + "src": "contracts/pool/Pool.sol:29" }, { - "contract": "MerkleDistributor", - "label": "rewardEthToken", - "type": "t_address", - "src": "contracts/merkles/MerkleDistributor.sol:27" + "contract": "Pool", + "label": "validatorRegistration", + "type": "t_contract(IDepositContract)5811", + "src": "contracts/pool/Pool.sol:32" }, { - "contract": "MerkleDistributor", + "contract": "Pool", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)6891", + "src": "contracts/pool/Pool.sol:35" + }, + { + "contract": "Pool", + "label": "validators", + "type": "t_contract(IPoolValidators)6638", + "src": "contracts/pool/Pool.sol:38" + }, + { + "contract": "Pool", "label": "oracles", - "type": "t_contract(IOracles)6342", - "src": "contracts/merkles/MerkleDistributor.sol:30" + "type": "t_address", + "src": "contracts/pool/Pool.sol:41" }, { - "contract": "MerkleDistributor", - "label": "lastUpdateBlockNumber", + "contract": "Pool", + "label": "activations", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "contracts/pool/Pool.sol:44" + }, + { + "contract": "Pool", + "label": "pendingValidators", "type": "t_uint256", - "src": "contracts/merkles/MerkleDistributor.sol:33" + "src": "contracts/pool/Pool.sol:47" }, { - "contract": "MerkleDistributor", - "label": "_claimedBitMap", - "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", - "src": "contracts/merkles/MerkleDistributor.sol:36" + "contract": "Pool", + "label": "minActivatingDeposit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:50" + }, + { + "contract": "Pool", + "label": "pendingValidatorsLimit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:53" } ], "types": { + "t_uint256": { + "label": "uint256" + }, "t_bytes32": { "label": "bytes32" }, - "t_address": { - "label": "address" + "t_contract(IDepositContract)5811": { + "label": "contract IDepositContract" }, - "t_contract(IOracles)6342": { - "label": "contract IOracles" + "t_contract(IStakedEthToken)6891": { + "label": "contract IStakedEthToken" }, - "t_uint256": { - "label": "uint256" + "t_contract(IPoolValidators)6638": { + "label": "contract IPoolValidators" }, - "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { - "label": "mapping(bytes32 => mapping(uint256 => uint256))" + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))" }, "t_mapping(t_uint256,t_uint256)": { "label": "mapping(uint256 => uint256)" @@ -3186,9 +1400,9 @@ } } }, - "d377dd09cee01cc34566867233cd0093a8d4210bca54a545b32d225e878fbefb": { - "address": "0xD420f9BE4cd6c96993fd940EF13110746AE48abC", - "txHash": "0x097eed8ce05991682968966db5597f72dea0964a16a76e0abcd16b3269cca43a", + "514ff2914356e122ba52ceaf5c69fbda4b8a2d29845693660d73d5b3db8a5734": { + "address": "0xfa00515082fe90430C80DA9B299f353929653d7B", + "txHash": "0x65770cb60072af3601d69bac17b6c1143e98524a6fae4989c203f0b5cb409b51", "layout": { "storage": [ { @@ -3247,90 +1461,64 @@ }, { "contract": "PoolValidators", - "label": "validatorStatuses", - "type": "t_mapping(t_bytes32,t_enum(ValidatorStatus)6737)", + "label": "isValidatorRegistered", + "type": "t_mapping(t_bytes32,t_bool)", "src": "contracts/pool/PoolValidators.sol:24" }, - { - "contract": "PoolValidators", - "label": "collaterals", - "type": "t_mapping(t_address,t_uint256)", - "src": "contracts/pool/PoolValidators.sol:27" - }, { "contract": "PoolValidators", "label": "operators", - "type": "t_mapping(t_address,t_struct(Operator)6721_storage)", - "src": "contracts/pool/PoolValidators.sol:30" + "type": "t_mapping(t_address,t_struct(Operator)6548_storage)", + "src": "contracts/pool/PoolValidators.sol:27" }, { "contract": "PoolValidators", "label": "pool", - "type": "t_contract(IPool)6651", - "src": "contracts/pool/PoolValidators.sol:33" + "type": "t_contract(IPool)6482", + "src": "contracts/pool/PoolValidators.sol:30" }, { "contract": "PoolValidators", "label": "oracles", "type": "t_address", - "src": "contracts/pool/PoolValidators.sol:36" + "src": "contracts/pool/PoolValidators.sol:33" } ], "types": { - "t_mapping(t_bytes32,t_enum(ValidatorStatus)6737)": { - "label": "mapping(bytes32 => enum IPoolValidators.ValidatorStatus)" + "t_mapping(t_bytes32,t_bool)": { + "label": "mapping(bytes32 => bool)" }, "t_bytes32": { "label": "bytes32" }, - "t_enum(ValidatorStatus)6737": { - "label": "enum IPoolValidators.ValidatorStatus", - "members": [ - "Uninitialized", - "Initialized", - "Finalized", - "Failed" - ] + "t_bool": { + "label": "bool" }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)" + "t_mapping(t_address,t_struct(Operator)6548_storage)": { + "label": "mapping(address => struct IPoolValidators.Operator)" }, "t_address": { "label": "address" }, - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_address,t_struct(Operator)6721_storage)": { - "label": "mapping(address => struct IPoolValidators.Operator)" - }, - "t_struct(Operator)6721_storage": { + "t_struct(Operator)6548_storage": { "label": "struct IPoolValidators.Operator", "members": [ { - "label": "initializeMerkleRoot", - "type": "t_bytes32" - }, - { - "label": "finalizeMerkleRoot", + "label": "depositDataMerkleRoot", "type": "t_bytes32" }, - { - "label": "locked", - "type": "t_bool" - }, { "label": "committed", "type": "t_bool" } ] }, - "t_bool": { - "label": "bool" - }, - "t_contract(IPool)6651": { + "t_contract(IPool)6482": { "label": "contract IPool" }, + "t_uint256": { + "label": "uint256" + }, "t_array(t_uint256)49_storage": { "label": "uint256[49]" }, @@ -3384,9 +1572,9 @@ } } }, - "80825b74c6a6f5cc9b67b8563f272012ebc5da55f88f626617229b6f56169c85": { - "address": "0x1cFcF1893326844270ec077fe996C785EFDed4B1", - "txHash": "0x5532306886ff6e930f35b77315c8f20e5aace6608b3b1bb5ae5a2761074ecb9a", + "18c76f9f9c8cbc616449cdc622ac25ad9bd25971f8875f66a6c1201056b8b325": { + "address": "0xDb123d84CdB055fdbFa9058f64A460BB0fBF8eAE", + "txHash": "0x647d2cf174087c56fb6e6ffd75054f3a5ea1ed8572e280f27bdf13b7da691202", "layout": { "storage": [ { @@ -3446,25 +1634,25 @@ { "contract": "Oracles", "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)7034", + "type": "t_contract(IRewardEthToken)6794", "src": "contracts/Oracles.sol:37" }, { "contract": "Oracles", "label": "pool", - "type": "t_contract(IPool)6651", + "type": "t_contract(IPool)6482", "src": "contracts/Oracles.sol:40" }, { "contract": "Oracles", "label": "poolValidators", - "type": "t_contract(IPoolValidators)6878", + "type": "t_contract(IPoolValidators)6638", "src": "contracts/Oracles.sol:43" }, { "contract": "Oracles", "label": "merkleDistributor", - "type": "t_contract(IMerkleDistributor)6095", + "type": "t_contract(IMerkleDistributor)5968", "src": "contracts/Oracles.sol:46" } ], @@ -3481,16 +1669,16 @@ "t_uint256": { "label": "uint256" }, - "t_contract(IRewardEthToken)7034": { + "t_contract(IRewardEthToken)6794": { "label": "contract IRewardEthToken" }, - "t_contract(IPool)6651": { + "t_contract(IPool)6482": { "label": "contract IPool" }, - "t_contract(IPoolValidators)6878": { + "t_contract(IPoolValidators)6638": { "label": "contract IPoolValidators" }, - "t_contract(IMerkleDistributor)6095": { + "t_contract(IMerkleDistributor)5968": { "label": "contract IMerkleDistributor" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { @@ -3551,117 +1739,6 @@ } } } - }, - "c16e4b952994fa08e80e4e9254ad6dc7b05d9eb6dc641438f4281b10e5e5ad70": { - "address": "0x584E5D4bD0AE1EEF838796aEe8fb805BbB82439C", - "txHash": "0xcdf6692a8e52b2c4a31fe53b9447ca7b84e95ae32eb1497a73595a2d620f0de5", - "layout": { - "storage": [ - { - "contract": "Initializable", - "label": "_initialized", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" - }, - { - "contract": "Initializable", - "label": "_initializing", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" - }, - { - "contract": "ContextUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" - }, - { - "contract": "PausableUpgradeable", - "label": "_paused", - "type": "t_bool", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" - }, - { - "contract": "PausableUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" - }, - { - "contract": "AccessControlUpgradeable", - "label": "_roles", - "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" - }, - { - "contract": "AccessControlUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" - } - ], - "types": { - "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { - "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" - }, - "t_bytes32": { - "label": "bytes32" - }, - "t_struct(RoleData)39_storage": { - "label": "struct AccessControlUpgradeable.RoleData", - "members": [ - { - "label": "members", - "type": "t_struct(AddressSet)2097_storage" - }, - { - "label": "adminRole", - "type": "t_bytes32" - } - ] - }, - "t_struct(AddressSet)2097_storage": { - "label": "struct EnumerableSetUpgradeable.AddressSet", - "members": [ - { - "label": "_inner", - "type": "t_struct(Set)1832_storage" - } - ] - }, - "t_struct(Set)1832_storage": { - "label": "struct EnumerableSetUpgradeable.Set", - "members": [ - { - "label": "_values", - "type": "t_array(t_bytes32)dyn_storage" - }, - { - "label": "_indexes", - "type": "t_mapping(t_bytes32,t_uint256)" - } - ] - }, - "t_array(t_bytes32)dyn_storage": { - "label": "bytes32[]" - }, - "t_mapping(t_bytes32,t_uint256)": { - "label": "mapping(bytes32 => uint256)" - }, - "t_uint256": { - "label": "uint256" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - } - } - } } } } diff --git a/deployments/settings.js b/deployments/settings.js index f79b627e..e3b28b62 100644 --- a/deployments/settings.js +++ b/deployments/settings.js @@ -26,7 +26,9 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { } else { contracts = { prevOracles: '0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514', + oracles: '0x8a887282E67ff41d36C0b7537eAB035291461AcD', pool: '0xC874b064f465bdD6411D45734b56fac750Cda29A', + poolValidators: '0x002932e11E95DC84C17ed5f94a0439645D8a97BC', poolEscrow: '0x2296e122c1a20Fca3CAc3371357BdAd3be0dF079', stakedEthToken: '0xFe2e637202056d30016725477c5da089Ab0A043A', rewardEthToken: '0x20BC832ca081b91433ff6c17f85701B6e92486c5', diff --git a/deployments/vrc.js b/deployments/vrc.js deleted file mode 100644 index 3713c28e..00000000 --- a/deployments/vrc.js +++ /dev/null @@ -1,64 +0,0 @@ -// https://github.com/ethereum/eth2.0-specs/blob/dev/solidity_deposit_contract/deposit_contract.json -// Commit: e4a9c5f -let vrcAbi = [ - { inputs: [], stateMutability: 'nonpayable', type: 'constructor' }, - { - anonymous: false, - inputs: [ - { indexed: false, internalType: 'bytes', name: 'pubkey', type: 'bytes' }, - { - indexed: false, - internalType: 'bytes', - name: 'withdrawal_credentials', - type: 'bytes', - }, - { indexed: false, internalType: 'bytes', name: 'amount', type: 'bytes' }, - { - indexed: false, - internalType: 'bytes', - name: 'signature', - type: 'bytes', - }, - { indexed: false, internalType: 'bytes', name: 'index', type: 'bytes' }, - ], - name: 'DepositEvent', - type: 'event', - }, - { - inputs: [ - { internalType: 'bytes', name: 'pubkey', type: 'bytes' }, - { internalType: 'bytes', name: 'withdrawal_credentials', type: 'bytes' }, - { internalType: 'bytes', name: 'signature', type: 'bytes' }, - { internalType: 'bytes32', name: 'deposit_data_root', type: 'bytes32' }, - ], - name: 'deposit', - outputs: [], - stateMutability: 'payable', - type: 'function', - }, - { - inputs: [], - name: 'get_deposit_count', - outputs: [{ internalType: 'bytes', name: '', type: 'bytes' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [], - name: 'get_deposit_root', - outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], - stateMutability: 'view', - type: 'function', - }, - { - inputs: [{ internalType: 'bytes4', name: 'interfaceId', type: 'bytes4' }], - name: 'supportsInterface', - outputs: [{ internalType: 'bool', name: '', type: 'bool' }], - stateMutability: 'pure', - type: 'function', - }, -]; - -module.exports = { - vrcAbi, -}; diff --git a/hardhat.config.js b/hardhat.config.js index 1c2efe70..6a1c5637 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -10,7 +10,7 @@ require('hardhat-contract-sizer'); require('hardhat-abi-exporter'); require('@nomiclabs/hardhat-etherscan'); -const BLOCK_NUMBER = 13780000; +const BLOCK_NUMBER = 13848390; const OPTIMIZER_RUNS = 5000000; const log = (...text) => console.log(gray(...['└─> [DEBUG]'].concat(text))); diff --git a/networks/mainnet.md b/networks/mainnet.md index 5e10f40a..f6161123 100644 --- a/networks/mainnet.md +++ b/networks/mainnet.md @@ -17,8 +17,8 @@ ## Pool Validators -- Contract: [0x0e75786cB831bEE6d4484031Af12490Ab528c770](https://etherscan.io/address/0x0e75786cB831bEE6d4484031Af12490Ab528c770) -- Transaction: [0xe7135d26f8c388d29d2a29c19ecd69c8e69de6ce2aa5014e6ba1cbcc389e9def](https://etherscan.io/tx/0xe7135d26f8c388d29d2a29c19ecd69c8e69de6ce2aa5014e6ba1cbcc389e9def) +- Contract: [0x002932e11E95DC84C17ed5f94a0439645D8a97BC](https://etherscan.io/address/0x002932e11E95DC84C17ed5f94a0439645D8a97BC) +- Transaction: [0xc2620ea4a161fe391020b42f03e2ff4c0a29cda6538c8a56212dbf9a9107522e](https://etherscan.io/tx/0xc2620ea4a161fe391020b42f03e2ff4c0a29cda6538c8a56212dbf9a9107522e) ## StakedEthToken @@ -47,8 +47,8 @@ ## Oracles -- Contract: [0xE949060ACE386D5e277De217703B17A2547f24C0](https://etherscan.io/address/0xE949060ACE386D5e277De217703B17A2547f24C0) -- Transaction: [0x2e2dafc452302b358f11bc4c2dd7631438b1a1284082d4fccadbdd9041ee43f5](https://etherscan.io/tx/0x2e2dafc452302b358f11bc4c2dd7631438b1a1284082d4fccadbdd9041ee43f5) +- Contract: [0x8a887282E67ff41d36C0b7537eAB035291461AcD](https://etherscan.io/address/0x8a887282E67ff41d36C0b7537eAB035291461AcD) +- Transaction: [0x2eb5e24c36d9cb509472f992afa14521f8ad58a21fae500f633f85e07535f506](https://etherscan.io/tx/0x2eb5e24c36d9cb509472f992afa14521f8ad58a21fae500f633f85e07535f506) ## Vesting Escrow diff --git a/test/Proxies.test.js b/test/Proxies.test.js index 0f92b5cc..cdfdb773 100644 --- a/test/Proxies.test.js +++ b/test/Proxies.test.js @@ -3,6 +3,8 @@ const { contractSettings, contracts } = require('../deployments/settings'); let proxies = [ contracts.pool, + contracts.poolValidators, + contracts.oracles, contracts.stakedEthToken, contracts.rewardEthToken, contracts.stakeWiseToken, @@ -12,6 +14,8 @@ let proxies = [ let implementations = [ '0xc8970E7C07c251625F9F93cE510b1D9c1a08d299', + '0xfa00515082fe90430C80DA9B299f353929653d7B', + '0xDb123d84CdB055fdbFa9058f64A460BB0fBF8eAE', '0x41bcac23e4db058d8D7aAbE2Fccdae5F01FE647A', '0x610B58583642610967727fe4fadd125a92D6F678', '0xA28C2d79f0c5B78CeC699DAB0303008179815396', From 7e1261afa0870c27ae6cf8d149cc13a46d5ce953 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 21 Dec 2021 15:40:26 +0200 Subject: [PATCH 47/55] Deploy goerli contracts --- .openzeppelin/goerli.json | 648 +++++++++++++++++++------------------- deployments/index.js | 122 +------ deployments/settings.js | 4 +- networks/goerli.md | 8 +- 4 files changed, 334 insertions(+), 448 deletions(-) diff --git a/.openzeppelin/goerli.json b/.openzeppelin/goerli.json index c45f1643..815d862f 100755 --- a/.openzeppelin/goerli.json +++ b/.openzeppelin/goerli.json @@ -41,13 +41,13 @@ "kind": "transparent" }, { - "address": "0x908C06aFfda0fFDbB4578629aA8cCff372e510b6", - "txHash": "0x49c85d3d890580fe2412c432f30b4bed5881c94c70ffdbe470fcffe9b27ead3c", + "address": "0x3A2A4c01BC8595E168A90bA6F04BB8A9FEac2acb", + "txHash": "0xb36d86bfc3b04faadd6c348a87913eb3381c3c301b2ffc6e97fce2b1fd56ab1f", "kind": "transparent" }, { - "address": "0x4bBaA17eFd71683dCb9C769DD38E7674994FE38d", - "txHash": "0xcbccb5aaac5d7ec139cd211eba24e89651d8e6713d2622f70d9fb97f5584e7eb", + "address": "0x531b9D9cb268E88D53A87890699bbe31326A6f08", + "txHash": "0x37dd82caa30c517030bd3611b27f41207ff71d526cbeb452ed771edd01e5208d", "kind": "transparent" } ], @@ -938,9 +938,9 @@ } } }, - "b5c03495559808b213fc9c271de9881064dd6e453878703b330213171051f42d": { - "address": "0x29500D6C343dFcF12054038d8e6200a88ad1df83", - "txHash": "0x171a6ababf770449c06835159be64b00b7c94cda7ca5b61ad2b00b94e4081d56", + "b7742cf0e7125c81208f1a73472947e64737df4431110353145dd5659b68e347": { + "address": "0xD175545f395d0439b200dfecc73FD85152b92Dba", + "txHash": "0x3826ed57c645114cccf7bbee46b9d179348548528ac2ff643474a8f512bf138e", "layout": { "storage": [ { @@ -986,73 +986,94 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "Oracles", - "label": "rewardsNonce", - "type": "t_struct(Counter)1781_storage", - "src": "contracts/Oracles.sol:31" + "contract": "Pool", + "label": "activatedValidators", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:26" }, { - "contract": "Oracles", - "label": "validatorsNonce", - "type": "t_struct(Counter)1781_storage", - "src": "contracts/Oracles.sol:34" + "contract": "Pool", + "label": "withdrawalCredentials", + "type": "t_bytes32", + "src": "contracts/pool/Pool.sol:29" }, { - "contract": "Oracles", - "label": "rewardEthToken", - "type": "t_contract(IRewardEthToken)6796", - "src": "contracts/Oracles.sol:37" + "contract": "Pool", + "label": "validatorRegistration", + "type": "t_contract(IDepositContract)5811", + "src": "contracts/pool/Pool.sol:32" }, { - "contract": "Oracles", - "label": "pool", - "type": "t_contract(IPool)6484", - "src": "contracts/Oracles.sol:40" + "contract": "Pool", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)6891", + "src": "contracts/pool/Pool.sol:35" }, { - "contract": "Oracles", - "label": "poolValidators", - "type": "t_contract(IPoolValidators)6640", - "src": "contracts/Oracles.sol:43" + "contract": "Pool", + "label": "validators", + "type": "t_contract(IPoolValidators)6638", + "src": "contracts/pool/Pool.sol:38" }, { - "contract": "Oracles", - "label": "merkleDistributor", - "type": "t_contract(IMerkleDistributor)5970", - "src": "contracts/Oracles.sol:46" + "contract": "Pool", + "label": "oracles", + "type": "t_address", + "src": "contracts/pool/Pool.sol:41" + }, + { + "contract": "Pool", + "label": "activations", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "contracts/pool/Pool.sol:44" + }, + { + "contract": "Pool", + "label": "pendingValidators", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:47" + }, + { + "contract": "Pool", + "label": "minActivatingDeposit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:50" + }, + { + "contract": "Pool", + "label": "pendingValidatorsLimit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:53" } ], "types": { - "t_struct(Counter)1781_storage": { - "label": "struct CountersUpgradeable.Counter", - "members": [ - { - "label": "_value", - "type": "t_uint256" - } - ] - }, "t_uint256": { "label": "uint256" }, - "t_contract(IRewardEthToken)6796": { - "label": "contract IRewardEthToken" + "t_bytes32": { + "label": "bytes32" }, - "t_contract(IPool)6484": { - "label": "contract IPool" + "t_contract(IDepositContract)5811": { + "label": "contract IDepositContract" + }, + "t_contract(IStakedEthToken)6891": { + "label": "contract IStakedEthToken" }, - "t_contract(IPoolValidators)6640": { + "t_contract(IPoolValidators)6638": { "label": "contract IPoolValidators" }, - "t_contract(IMerkleDistributor)5970": { - "label": "contract IMerkleDistributor" + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, - "t_bytes32": { - "label": "bytes32" - }, "t_struct(RoleData)39_storage": { "label": "struct AccessControlUpgradeable.RoleData", "members": [ @@ -1106,9 +1127,9 @@ } } }, - "e36279ca0f184abd853e03db6f426b2859c0f6e5576f5698d2c21d66811ef557": { - "address": "0xc7A507283312edF87fFe68825F4791Dba341d6F1", - "txHash": "0x27a468c3b65d554385903eedffa6ff5d2690fb5ffea1b1b8a72659153ee060ec", + "25bdc9887ecebf4990c02c9599b14fa2663352a025894b6dfe904a8cfb2f8a5b": { + "address": "0x8201844E42Ea995df63CF5939Ee07989502C428c", + "txHash": "0xbb614051aedddcbf1f286fdf9675ef84b5cdc3c3cd20d0a31d614a64c4da2a4b", "layout": { "storage": [ { @@ -1154,54 +1175,202 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "MerkleDistributor", - "label": "merkleRoot", + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "contracts/tokens/ERC20Upgradeable.sol:38" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:40" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:41" + }, + { + "contract": "ERC20Upgradeable", + "label": "_decimals", + "type": "t_uint8", + "src": "contracts/tokens/ERC20Upgradeable.sol:42" + }, + { + "contract": "ERC20Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)44_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:225" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_NAME", "type": "t_bytes32", - "src": "contracts/merkles/MerkleDistributor.sol:24" + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" }, { - "contract": "MerkleDistributor", - "label": "rewardEthToken", - "type": "t_address", - "src": "contracts/merkles/MerkleDistributor.sol:27" + "contract": "EIP712Upgradeable", + "label": "_HASHED_VERSION", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" }, { - "contract": "MerkleDistributor", + "contract": "EIP712Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_nonces", + "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_PERMIT_TYPEHASH", + "type": "t_bytes32", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" + }, + { + "contract": "RewardEthToken", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)6891", + "src": "contracts/tokens/RewardEthToken.sol:25" + }, + { + "contract": "RewardEthToken", "label": "oracles", - "type": "t_contract(IOracles)6194", - "src": "contracts/merkles/MerkleDistributor.sol:30" + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:28" }, { - "contract": "MerkleDistributor", + "contract": "RewardEthToken", + "label": "checkpoints", + "type": "t_mapping(t_address,t_struct(Checkpoint)6649_storage)", + "src": "contracts/tokens/RewardEthToken.sol:31" + }, + { + "contract": "RewardEthToken", + "label": "protocolFeeRecipient", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:34" + }, + { + "contract": "RewardEthToken", + "label": "protocolFee", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:37" + }, + { + "contract": "RewardEthToken", + "label": "totalRewards", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:40" + }, + { + "contract": "RewardEthToken", + "label": "rewardPerToken", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:43" + }, + { + "contract": "RewardEthToken", "label": "lastUpdateBlockNumber", "type": "t_uint256", - "src": "contracts/merkles/MerkleDistributor.sol:33" + "src": "contracts/tokens/RewardEthToken.sol:46" }, { - "contract": "MerkleDistributor", - "label": "_claimedBitMap", - "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", - "src": "contracts/merkles/MerkleDistributor.sol:36" + "contract": "RewardEthToken", + "label": "merkleDistributor", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:49" + }, + { + "contract": "RewardEthToken", + "label": "rewardsDisabled", + "type": "t_mapping(t_address,t_bool)", + "src": "contracts/tokens/RewardEthToken.sol:52" } ], "types": { - "t_bytes32": { - "label": "bytes32" + "t_contract(IStakedEthToken)6891": { + "label": "contract IStakedEthToken" }, "t_address": { "label": "address" }, - "t_contract(IOracles)6194": { - "label": "contract IOracles" + "t_mapping(t_address,t_struct(Checkpoint)6649_storage)": { + "label": "mapping(address => struct IRewardEthToken.Checkpoint)" + }, + "t_struct(Checkpoint)6649_storage": { + "label": "struct IRewardEthToken.Checkpoint", + "members": [ + { + "label": "reward", + "type": "t_uint128" + }, + { + "label": "rewardPerToken", + "type": "t_uint128" + } + ] + }, + "t_uint128": { + "label": "uint128" }, "t_uint256": { "label": "uint256" }, - "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { - "label": "mapping(bytes32 => mapping(uint256 => uint256))" + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)" }, - "t_mapping(t_uint256,t_uint256)": { - "label": "mapping(uint256 => uint256)" + "t_bool": { + "label": "bool" + }, + "t_mapping(t_address,t_struct(Counter)1781_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)" + }, + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)" + }, + "t_string_storage": { + "label": "string" + }, + "t_uint8": { + "label": "uint8" + }, + "t_array(t_uint256)44_storage": { + "label": "uint256[44]" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" @@ -1246,22 +1415,13 @@ }, "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_bool": { - "label": "bool" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" } } } }, - "9870290ab46c2565a3ae904dd59f3b7244e02a2a8152e0425e84e2b588e3c3ac": { - "address": "0x1AEC5b05A14a92Ffc057fD2fE0C567B8708A99e9", - "txHash": "0xbdcb3100e44ae05aba12c385a40d6b61cd29d6c1ae82bd4fe5edf5160bd59fee", + "1d32117f5354e1f5554fee45d322372ed074377a6e790c3ede2b29d622cd26e3": { + "address": "0xC8d0c21fbb95050974f0fFfCB76e61e5AeD5C750", + "txHash": "0xf127920a192c4e6be534ed7094f2356fc4cb10161b99b89e06348878080a4be1", "layout": { "storage": [ { @@ -1307,87 +1467,51 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "Pool", - "label": "activatedValidators", - "type": "t_uint256", - "src": "contracts/pool/Pool.sol:26" - }, - { - "contract": "Pool", - "label": "withdrawalCredentials", - "type": "t_bytes32", - "src": "contracts/pool/Pool.sol:29" - }, - { - "contract": "Pool", - "label": "validatorRegistration", - "type": "t_contract(IDepositContract)5813", - "src": "contracts/pool/Pool.sol:32" - }, - { - "contract": "Pool", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)6893", - "src": "contracts/pool/Pool.sol:35" - }, - { - "contract": "Pool", - "label": "validators", - "type": "t_contract(IPoolValidators)6640", - "src": "contracts/pool/Pool.sol:38" - }, - { - "contract": "Pool", - "label": "oracles", - "type": "t_address", - "src": "contracts/pool/Pool.sol:41" + "contract": "MerkleDistributor", + "label": "merkleRoot", + "type": "t_bytes32", + "src": "contracts/merkles/MerkleDistributor.sol:24" }, { - "contract": "Pool", - "label": "activations", - "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", - "src": "contracts/pool/Pool.sol:44" + "contract": "MerkleDistributor", + "label": "rewardEthToken", + "type": "t_address", + "src": "contracts/merkles/MerkleDistributor.sol:27" }, { - "contract": "Pool", - "label": "pendingValidators", - "type": "t_uint256", - "src": "contracts/pool/Pool.sol:47" + "contract": "MerkleDistributor", + "label": "oracles", + "type": "t_contract(IOracles)6192", + "src": "contracts/merkles/MerkleDistributor.sol:30" }, { - "contract": "Pool", - "label": "minActivatingDeposit", + "contract": "MerkleDistributor", + "label": "lastUpdateBlockNumber", "type": "t_uint256", - "src": "contracts/pool/Pool.sol:50" + "src": "contracts/merkles/MerkleDistributor.sol:33" }, { - "contract": "Pool", - "label": "pendingValidatorsLimit", - "type": "t_uint256", - "src": "contracts/pool/Pool.sol:53" + "contract": "MerkleDistributor", + "label": "_claimedBitMap", + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", + "src": "contracts/merkles/MerkleDistributor.sol:36" } ], "types": { - "t_uint256": { - "label": "uint256" - }, "t_bytes32": { "label": "bytes32" }, - "t_contract(IDepositContract)5813": { - "label": "contract IDepositContract" - }, - "t_contract(IStakedEthToken)6893": { - "label": "contract IStakedEthToken" - }, - "t_contract(IPoolValidators)6640": { - "label": "contract IPoolValidators" - }, "t_address": { "label": "address" }, - "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { - "label": "mapping(address => mapping(uint256 => uint256))" + "t_contract(IOracles)6192": { + "label": "contract IOracles" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(bytes32 => mapping(uint256 => uint256))" }, "t_mapping(t_uint256,t_uint256)": { "label": "mapping(uint256 => uint256)" @@ -1448,9 +1572,9 @@ } } }, - "6ef73774f40e74c636437a36044d8f0a545e6d4d7337bfaab26ace97d962ff2a": { - "address": "0x06b130F1fe13fcC707Cd00FB942846E9ba41F75c", - "txHash": "0xfe79490be22f188d2ba25738dcbf3e6393eee6c5396337668d68c47f63cb05fa", + "18c76f9f9c8cbc616449cdc622ac25ad9bd25971f8875f66a6c1201056b8b325": { + "address": "0x32664bAA1B9d47b07dc025fDF9cB00859B66BecE", + "txHash": "0x7fba7d093b9167d7aa41f4e26cadaa3f4e3419cbb9741252a2cdd8687d21e9ee", "layout": { "storage": [ { @@ -1496,170 +1620,43 @@ "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" }, { - "contract": "ERC20Upgradeable", - "label": "_allowances", - "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", - "src": "contracts/tokens/ERC20Upgradeable.sol:38" - }, - { - "contract": "ERC20Upgradeable", - "label": "_name", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:40" - }, - { - "contract": "ERC20Upgradeable", - "label": "_symbol", - "type": "t_string_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:41" - }, - { - "contract": "ERC20Upgradeable", - "label": "_decimals", - "type": "t_uint8", - "src": "contracts/tokens/ERC20Upgradeable.sol:42" - }, - { - "contract": "ERC20Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)44_storage", - "src": "contracts/tokens/ERC20Upgradeable.sol:225" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_NAME", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" - }, - { - "contract": "EIP712Upgradeable", - "label": "_HASHED_VERSION", - "type": "t_bytes32", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" - }, - { - "contract": "EIP712Upgradeable", - "label": "__gap", - "type": "t_array(t_uint256)50_storage", - "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_nonces", - "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "_PERMIT_TYPEHASH", - "type": "t_bytes32", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" - }, - { - "contract": "ERC20PermitUpgradeable", - "label": "__gap", - "type": "t_array(t_uint256)49_storage", - "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" - }, - { - "contract": "RewardEthToken", - "label": "stakedEthToken", - "type": "t_contract(IStakedEthToken)6893", - "src": "contracts/tokens/RewardEthToken.sol:25" - }, - { - "contract": "RewardEthToken", - "label": "oracles", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:28" - }, - { - "contract": "RewardEthToken", - "label": "checkpoints", - "type": "t_mapping(t_address,t_struct(Checkpoint)6651_storage)", - "src": "contracts/tokens/RewardEthToken.sol:31" - }, - { - "contract": "RewardEthToken", - "label": "protocolFeeRecipient", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:34" + "contract": "Oracles", + "label": "rewardsNonce", + "type": "t_struct(Counter)1781_storage", + "src": "contracts/Oracles.sol:31" }, { - "contract": "RewardEthToken", - "label": "protocolFee", - "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:37" + "contract": "Oracles", + "label": "validatorsNonce", + "type": "t_struct(Counter)1781_storage", + "src": "contracts/Oracles.sol:34" }, { - "contract": "RewardEthToken", - "label": "totalRewards", - "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:40" + "contract": "Oracles", + "label": "rewardEthToken", + "type": "t_contract(IRewardEthToken)6794", + "src": "contracts/Oracles.sol:37" }, { - "contract": "RewardEthToken", - "label": "rewardPerToken", - "type": "t_uint128", - "src": "contracts/tokens/RewardEthToken.sol:43" + "contract": "Oracles", + "label": "pool", + "type": "t_contract(IPool)6482", + "src": "contracts/Oracles.sol:40" }, { - "contract": "RewardEthToken", - "label": "lastUpdateBlockNumber", - "type": "t_uint256", - "src": "contracts/tokens/RewardEthToken.sol:46" + "contract": "Oracles", + "label": "poolValidators", + "type": "t_contract(IPoolValidators)6638", + "src": "contracts/Oracles.sol:43" }, { - "contract": "RewardEthToken", + "contract": "Oracles", "label": "merkleDistributor", - "type": "t_address", - "src": "contracts/tokens/RewardEthToken.sol:49" - }, - { - "contract": "RewardEthToken", - "label": "rewardsDisabled", - "type": "t_mapping(t_address,t_bool)", - "src": "contracts/tokens/RewardEthToken.sol:52" + "type": "t_contract(IMerkleDistributor)5968", + "src": "contracts/Oracles.sol:46" } ], "types": { - "t_contract(IStakedEthToken)6893": { - "label": "contract IStakedEthToken" - }, - "t_address": { - "label": "address" - }, - "t_mapping(t_address,t_struct(Checkpoint)6651_storage)": { - "label": "mapping(address => struct IRewardEthToken.Checkpoint)" - }, - "t_struct(Checkpoint)6651_storage": { - "label": "struct IRewardEthToken.Checkpoint", - "members": [ - { - "label": "reward", - "type": "t_uint128" - }, - { - "label": "rewardPerToken", - "type": "t_uint128" - } - ] - }, - "t_uint128": { - "label": "uint128" - }, - "t_uint256": { - "label": "uint256" - }, - "t_mapping(t_address,t_bool)": { - "label": "mapping(address => bool)" - }, - "t_bool": { - "label": "bool" - }, - "t_mapping(t_address,t_struct(Counter)1781_storage)": { - "label": "mapping(address => struct CountersUpgradeable.Counter)" - }, "t_struct(Counter)1781_storage": { "label": "struct CountersUpgradeable.Counter", "members": [ @@ -1669,33 +1666,27 @@ } ] }, - "t_bytes32": { - "label": "bytes32" - }, - "t_array(t_uint256)49_storage": { - "label": "uint256[49]" - }, - "t_array(t_uint256)50_storage": { - "label": "uint256[50]" - }, - "t_mapping(t_address,t_mapping(t_address,t_uint256))": { - "label": "mapping(address => mapping(address => uint256))" + "t_uint256": { + "label": "uint256" }, - "t_mapping(t_address,t_uint256)": { - "label": "mapping(address => uint256)" + "t_contract(IRewardEthToken)6794": { + "label": "contract IRewardEthToken" }, - "t_string_storage": { - "label": "string" + "t_contract(IPool)6482": { + "label": "contract IPool" }, - "t_uint8": { - "label": "uint8" + "t_contract(IPoolValidators)6638": { + "label": "contract IPoolValidators" }, - "t_array(t_uint256)44_storage": { - "label": "uint256[44]" + "t_contract(IMerkleDistributor)5968": { + "label": "contract IMerkleDistributor" }, "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" }, + "t_bytes32": { + "label": "bytes32" + }, "t_struct(RoleData)39_storage": { "label": "struct AccessControlUpgradeable.RoleData", "members": [ @@ -1736,6 +1727,15 @@ }, "t_mapping(t_bytes32,t_uint256)": { "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" } } } diff --git a/deployments/index.js b/deployments/index.js index 9e1c98b4..356ecf2f 100644 --- a/deployments/index.js +++ b/deployments/index.js @@ -1,4 +1,4 @@ -const { white, green } = require('chalk'); +const { white } = require('chalk'); const { ethers, upgrades, config } = require('hardhat'); const { contracts, contractSettings } = require('./settings'); @@ -8,67 +8,6 @@ function log(message) { } } -async function deployPoolValidators() { - const PoolValidators = await ethers.getContractFactory('PoolValidators'); - const proxy = await upgrades.deployProxy(PoolValidators, [], { - initializer: false, - kind: 'transparent', - }); - await proxy.deployed(); - return proxy.address; -} - -async function initializePoolValidators( - poolValidatorsContractAddress, - oraclesContractAddress -) { - const PoolValidators = await ethers.getContractFactory('PoolValidators'); - let poolValidators = PoolValidators.attach(poolValidatorsContractAddress); - - // call initialize - return poolValidators.initialize( - contractSettings.admin, - contracts.pool, - oraclesContractAddress - ); -} - -async function deployAndInitializeOracles(poolValidatorsContractAddress) { - const Oracles = await ethers.getContractFactory('Oracles'); - const proxy = await upgrades.deployProxy( - Oracles, - [ - contractSettings.admin, - contracts.prevOracles, - contracts.rewardEthToken, - contracts.pool, - poolValidatorsContractAddress, - contracts.merkleDistributor, - ], - { - kind: 'transparent', - } - ); - await proxy.deployed(); - return proxy.address; -} - -async function deployAndInitializeRoles() { - const Roles = await ethers.getContractFactory('Roles'); - const proxy = await upgrades.deployProxy(Roles, [contractSettings.admin], { - kind: 'transparent', - }); - await proxy.deployed(); - return proxy.address; -} - -async function deployAndInitializeContractChecker() { - const ContractChecker = await ethers.getContractFactory('ContractChecker'); - const contractChecker = await ContractChecker.deploy(); - await contractChecker.deployed(); - return contractChecker.address; -} - async function upgradeMerkleDistributor(oraclesContractAddress) { const signer = await ethers.provider.getSigner(contractSettings.admin); const MerkleDistributor = await ethers.getContractFactory( @@ -150,59 +89,11 @@ async function upgradeRewardEthToken(oraclesContractAddress) { } async function deployContracts() { - const Pool = await ethers.getContractFactory('Pool'); - let impl = await upgrades.prepareUpgrade(contracts.pool, Pool); - log(white(`Deployed Pool implementation contract: ${green(impl)}`)); - - const RewardEthToken = await ethers.getContractFactory('RewardEthToken'); - impl = await upgrades.prepareUpgrade( - contracts.rewardEthToken, - RewardEthToken, - { unsafeAllowRenames: true } - ); - log(white(`Deployed RewardEthToken implementation contract: ${green(impl)}`)); - - const MerkleDistributor = await ethers.getContractFactory( - 'MerkleDistributor' - ); - impl = await upgrades.prepareUpgrade( - contracts.merkleDistributor, - MerkleDistributor - ); - log( - white(`Deployed MerkleDistributor implementation contract: ${green(impl)}`) - ); - - const poolValidators = await deployPoolValidators(); - log(white(`Deployed Pool Validators contract: ${green(poolValidators)}`)); - - const oracles = await deployAndInitializeOracles(poolValidators); - log(white(`Deployed Oracles contract: ${green(oracles)}`)); - - await initializePoolValidators(poolValidators, oracles); - log(white('Initialized Pool Validators contract')); - - const roles = await deployAndInitializeRoles(); - log(white(`Deployed and initialized Roles contract: ${green(roles)}`)); - - const contractChecker = await deployAndInitializeContractChecker(); - log( - white( - `Deployed and initialized ContractChecker contract: ${green( - contractChecker - )}` - ) - ); - - return { - poolValidators, - oracles, - roles, - }; + return contracts; } async function upgradeContracts() { - const { poolValidators, oracles, roles } = await deployContracts(); + const { poolValidators, oracles } = await deployContracts(); await upgradeMerkleDistributor(oracles); log(white('Upgraded MerkleDistributor contract')); @@ -213,12 +104,7 @@ async function upgradeContracts() { await upgradeRewardEthToken(oracles); log(white('Upgraded RewardEthToken contract')); - return { - ...contracts, - poolValidators, - oracles, - roles, - }; + return contracts; } module.exports = { diff --git a/deployments/settings.js b/deployments/settings.js index e3b28b62..aace1806 100644 --- a/deployments/settings.js +++ b/deployments/settings.js @@ -4,9 +4,9 @@ let contracts, contractSettings; if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { contracts = { prevOracles: '0xE54486fa4eB45716c5725d7A46FDDe810B8E8914', - oracles: '0x4bBaA17eFd71683dCb9C769DD38E7674994FE38d', + oracles: '0x531b9D9cb268E88D53A87890699bbe31326A6f08', pool: '0x8c1EfEcFb5c4F1099AB0460b5659342943764Df7', - poolValidators: '0x908C06aFfda0fFDbB4578629aA8cCff372e510b6', + poolValidators: '0x3A2A4c01BC8595E168A90bA6F04BB8A9FEac2acb', poolEscrow: '0x040F15C6b5Bfc5F324eCaB5864C38D4e1EEF4218', stakedEthToken: '0x221D9812823DBAb0F1fB40b0D294D9875980Ac19', rewardEthToken: '0x826f88d423440c305D9096cC1581Ae751eFCAfB0', diff --git a/networks/goerli.md b/networks/goerli.md index 2e990cce..2bf694c7 100755 --- a/networks/goerli.md +++ b/networks/goerli.md @@ -22,8 +22,8 @@ ## Pool Validators -- Contract: [0x908C06aFfda0fFDbB4578629aA8cCff372e510b6](https://goerli.etherscan.io/address/0x908C06aFfda0fFDbB4578629aA8cCff372e510b6) -- Transaction: [0x49c85d3d890580fe2412c432f30b4bed5881c94c70ffdbe470fcffe9b27ead3c](https://goerli.etherscan.io/tx/0x49c85d3d890580fe2412c432f30b4bed5881c94c70ffdbe470fcffe9b27ead3c) +- Contract: [0x3A2A4c01BC8595E168A90bA6F04BB8A9FEac2acb](https://goerli.etherscan.io/address/0x3A2A4c01BC8595E168A90bA6F04BB8A9FEac2acb) +- Transaction: [0xb36d86bfc3b04faadd6c348a87913eb3381c3c301b2ffc6e97fce2b1fd56ab1f](https://goerli.etherscan.io/tx/0xb36d86bfc3b04faadd6c348a87913eb3381c3c301b2ffc6e97fce2b1fd56ab1f) ## StakedEthToken @@ -47,8 +47,8 @@ ## Oracles -- Contract: [0x4bBaA17eFd71683dCb9C769DD38E7674994FE38d](https://goerli.etherscan.io/address/0x4bBaA17eFd71683dCb9C769DD38E7674994FE38d) -- Transaction: [0xcbccb5aaac5d7ec139cd211eba24e89651d8e6713d2622f70d9fb97f5584e7eb](https://goerli.etherscan.io/tx/0xcbccb5aaac5d7ec139cd211eba24e89651d8e6713d2622f70d9fb97f5584e7eb) +- Contract: [0x531b9D9cb268E88D53A87890699bbe31326A6f08](https://goerli.etherscan.io/address/0x531b9D9cb268E88D53A87890699bbe31326A6f08) +- Transaction: [0x37dd82caa30c517030bd3611b27f41207ff71d526cbeb452ed771edd01e5208d](https://goerli.etherscan.io/tx/0x37dd82caa30c517030bd3611b27f41207ff71d526cbeb452ed771edd01e5208d) ## Vesting Escrow From 418144a90cf9d15d223286f68fc4c6964ca0fc30 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 21 Dec 2021 15:54:43 +0200 Subject: [PATCH 48/55] Revert removed mainnet implementation records --- .openzeppelin/mainnet.json | 1268 ++++++++++++++++++++++++++++++ .openzeppelin/unknown-31337.json | 1268 ++++++++++++++++++++++++++++++ 2 files changed, 2536 insertions(+) diff --git a/.openzeppelin/mainnet.json b/.openzeppelin/mainnet.json index ac08a7ac..c66f0503 100644 --- a/.openzeppelin/mainnet.json +++ b/.openzeppelin/mainnet.json @@ -1739,6 +1739,1274 @@ } } } + }, + "97347223e792bf368d6a6c9d760d82b455a5edc1629dff43cd9ce0e019b9b25f": { + "address": "0x459beef3c5Bd5D1E66de93AC908E278ee2488F14", + "txHash": "0xeae913a12dfab0ce7c009f08e47135120e7c2f83c65ae50b0f55bada9544c5d3", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "MerkleDistributor", + "label": "merkleRoot", + "type": "t_bytes32", + "src": "contracts/merkles/MerkleDistributor.sol:24" + }, + { + "contract": "MerkleDistributor", + "label": "rewardEthToken", + "type": "t_address", + "src": "contracts/merkles/MerkleDistributor.sol:27" + }, + { + "contract": "MerkleDistributor", + "label": "oracles", + "type": "t_contract(IOracles)7086", + "src": "contracts/merkles/MerkleDistributor.sol:30" + }, + { + "contract": "MerkleDistributor", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/merkles/MerkleDistributor.sol:33" + }, + { + "contract": "MerkleDistributor", + "label": "_claimedBitMap", + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", + "src": "contracts/merkles/MerkleDistributor.sol:36" + } + ], + "types": { + "t_bytes32": { + "label": "bytes32" + }, + "t_address": { + "label": "address" + }, + "t_contract(IOracles)7086": { + "label": "contract IOracles" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(bytes32 => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "d8130dc915911607e60a0d8df67e30e904fd2c72948a8e9cca6ca3460d3a8df2": { + "address": "0x3Cf7850F3C68624aAD34c17562669c0694E3ce7f", + "txHash": "0xd29453703e51ddaf141fe35f52696ca98223e0ff7592a139c2782f28d038a58a", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "MerkleDistributor", + "label": "merkleRoot", + "type": "t_bytes32", + "src": "contracts/merkles/MerkleDistributor.sol:24" + }, + { + "contract": "MerkleDistributor", + "label": "rewardEthToken", + "type": "t_address", + "src": "contracts/merkles/MerkleDistributor.sol:27" + }, + { + "contract": "MerkleDistributor", + "label": "oracles", + "type": "t_contract(IOracles)6192", + "src": "contracts/merkles/MerkleDistributor.sol:30" + }, + { + "contract": "MerkleDistributor", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/merkles/MerkleDistributor.sol:33" + }, + { + "contract": "MerkleDistributor", + "label": "_claimedBitMap", + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", + "src": "contracts/merkles/MerkleDistributor.sol:36" + } + ], + "types": { + "t_bytes32": { + "label": "bytes32" + }, + "t_address": { + "label": "address" + }, + "t_contract(IOracles)6192": { + "label": "contract IOracles" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(bytes32 => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "1180315bf4492fa65c4efbff97aef9be398013d10c1aff681a175a03508864ae": { + "address": "0xc8970E7C07c251625F9F93cE510b1D9c1a08d299", + "txHash": "0x32c727ebb5dbbc1bd89a3a21cf15d9e74dbc688b404b60a286a9ae858c4967e2", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "Pool", + "label": "activatedValidators", + "type": "t_uint256", + "src": "contracts/collectors/Pool.sol:25" + }, + { + "contract": "Pool", + "label": "withdrawalCredentials", + "type": "t_bytes32", + "src": "contracts/collectors/Pool.sol:28" + }, + { + "contract": "Pool", + "label": "validatorRegistration", + "type": "t_contract(IDepositContract)5197", + "src": "contracts/collectors/Pool.sol:31" + }, + { + "contract": "Pool", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)5841", + "src": "contracts/collectors/Pool.sol:34" + }, + { + "contract": "Pool", + "label": "validators", + "type": "t_contract(IValidators)5889", + "src": "contracts/collectors/Pool.sol:37" + }, + { + "contract": "Pool", + "label": "oracles", + "type": "t_address", + "src": "contracts/collectors/Pool.sol:40" + }, + { + "contract": "Pool", + "label": "activations", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "contracts/collectors/Pool.sol:43" + }, + { + "contract": "Pool", + "label": "pendingValidators", + "type": "t_uint256", + "src": "contracts/collectors/Pool.sol:46" + }, + { + "contract": "Pool", + "label": "minActivatingDeposit", + "type": "t_uint256", + "src": "contracts/collectors/Pool.sol:49" + }, + { + "contract": "Pool", + "label": "pendingValidatorsLimit", + "type": "t_uint256", + "src": "contracts/collectors/Pool.sol:52" + } + ], + "types": { + "t_uint256": { + "label": "uint256" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_contract(IDepositContract)5197": { + "label": "contract IDepositContract" + }, + "t_contract(IStakedEthToken)5841": { + "label": "contract IStakedEthToken" + }, + "t_contract(IValidators)5889": { + "label": "contract IValidators" + }, + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)1421_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)1421_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1156_storage" + } + ] + }, + "t_struct(Set)1156_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "171192e607fd9fe832fbcecd0f0c39413136c766407e0bff0bfe5e2a6115435f": { + "address": "0x610B58583642610967727fe4fadd125a92D6F678", + "txHash": "0xf14e032482dc6879703eab12dbb50eba23cd4f6f4df9274717c570a686aec9f5", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "contracts/tokens/ERC20Upgradeable.sol:38" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:40" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:41" + }, + { + "contract": "ERC20Upgradeable", + "label": "_decimals", + "type": "t_uint8", + "src": "contracts/tokens/ERC20Upgradeable.sol:42" + }, + { + "contract": "ERC20Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)44_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:225" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_NAME", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_VERSION", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" + }, + { + "contract": "EIP712Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_nonces", + "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_PERMIT_TYPEHASH", + "type": "t_bytes32", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" + }, + { + "contract": "RewardEthToken", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)7696", + "src": "contracts/tokens/RewardEthToken.sol:24" + }, + { + "contract": "RewardEthToken", + "label": "oracles", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:27" + }, + { + "contract": "RewardEthToken", + "label": "checkpoints", + "type": "t_mapping(t_address,t_struct(Checkpoint)7408_storage)", + "src": "contracts/tokens/RewardEthToken.sol:30" + }, + { + "contract": "RewardEthToken", + "label": "maintainer", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:33" + }, + { + "contract": "RewardEthToken", + "label": "maintainerFee", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:36" + }, + { + "contract": "RewardEthToken", + "label": "totalRewards", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:39" + }, + { + "contract": "RewardEthToken", + "label": "rewardPerToken", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:42" + }, + { + "contract": "RewardEthToken", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:45" + }, + { + "contract": "RewardEthToken", + "label": "merkleDistributor", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:48" + }, + { + "contract": "RewardEthToken", + "label": "rewardsDisabled", + "type": "t_mapping(t_address,t_bool)", + "src": "contracts/tokens/RewardEthToken.sol:51" + } + ], + "types": { + "t_contract(IStakedEthToken)7696": { + "label": "contract IStakedEthToken" + }, + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_struct(Checkpoint)7408_storage)": { + "label": "mapping(address => struct IRewardEthToken.Checkpoint)" + }, + "t_struct(Checkpoint)7408_storage": { + "label": "struct IRewardEthToken.Checkpoint", + "members": [ + { + "label": "reward", + "type": "t_uint128" + }, + { + "label": "rewardPerToken", + "type": "t_uint128" + } + ] + }, + "t_uint128": { + "label": "uint128" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)" + }, + "t_bool": { + "label": "bool" + }, + "t_mapping(t_address,t_struct(Counter)1781_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)" + }, + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)" + }, + "t_string_storage": { + "label": "string" + }, + "t_uint8": { + "label": "uint8" + }, + "t_array(t_uint256)44_storage": { + "label": "uint256[44]" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + } + } + } + }, + "1cbcdcdafb11126baead1ddf322344e63f3218adbddb2149a3ba6d13e257d018": { + "address": "0x8C3FC957cb0A339acbE442bD0792590737240BF7", + "txHash": "0x6f5e0a0d0b028502a8d3e5fa61311363677502bdafcd7450e7fd7d66c14c1520", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "Pool", + "label": "activatedValidators", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:26" + }, + { + "contract": "Pool", + "label": "withdrawalCredentials", + "type": "t_bytes32", + "src": "contracts/pool/Pool.sol:29" + }, + { + "contract": "Pool", + "label": "validatorRegistration", + "type": "t_contract(IDepositContract)5811", + "src": "contracts/pool/Pool.sol:32" + }, + { + "contract": "Pool", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)6891", + "src": "contracts/pool/Pool.sol:35" + }, + { + "contract": "Pool", + "label": "validators", + "type": "t_contract(IPoolValidators)6638", + "src": "contracts/pool/Pool.sol:38" + }, + { + "contract": "Pool", + "label": "oracles", + "type": "t_address", + "src": "contracts/pool/Pool.sol:41" + }, + { + "contract": "Pool", + "label": "activations", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "contracts/pool/Pool.sol:44" + }, + { + "contract": "Pool", + "label": "pendingValidators", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:47" + }, + { + "contract": "Pool", + "label": "minActivatingDeposit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:50" + }, + { + "contract": "Pool", + "label": "pendingValidatorsLimit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:53" + } + ], + "types": { + "t_uint256": { + "label": "uint256" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_contract(IDepositContract)5811": { + "label": "contract IDepositContract" + }, + "t_contract(IStakedEthToken)6891": { + "label": "contract IStakedEthToken" + }, + "t_contract(IPoolValidators)6638": { + "label": "contract IPoolValidators" + }, + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "8403e73b5622e4987eb42a678b18c511ccbc91a96452889eff19be7f48562955": { + "address": "0x33582de22176cB084aFBFb818B490adb327BC5bb", + "txHash": "0xe641e2ef15aa49caabf74883627c7a97d910197cb9d48a9a2165a337e4af2e2f", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "contracts/tokens/ERC20Upgradeable.sol:38" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:40" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:41" + }, + { + "contract": "ERC20Upgradeable", + "label": "_decimals", + "type": "t_uint8", + "src": "contracts/tokens/ERC20Upgradeable.sol:42" + }, + { + "contract": "ERC20Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)44_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:225" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_NAME", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_VERSION", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" + }, + { + "contract": "EIP712Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_nonces", + "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_PERMIT_TYPEHASH", + "type": "t_bytes32", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" + }, + { + "contract": "RewardEthToken", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)6891", + "src": "contracts/tokens/RewardEthToken.sol:25" + }, + { + "contract": "RewardEthToken", + "label": "oracles", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:28" + }, + { + "contract": "RewardEthToken", + "label": "checkpoints", + "type": "t_mapping(t_address,t_struct(Checkpoint)6649_storage)", + "src": "contracts/tokens/RewardEthToken.sol:31" + }, + { + "contract": "RewardEthToken", + "label": "protocolFeeRecipient", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:34" + }, + { + "contract": "RewardEthToken", + "label": "protocolFee", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:37" + }, + { + "contract": "RewardEthToken", + "label": "totalRewards", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:40" + }, + { + "contract": "RewardEthToken", + "label": "rewardPerToken", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:43" + }, + { + "contract": "RewardEthToken", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:46" + }, + { + "contract": "RewardEthToken", + "label": "merkleDistributor", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:49" + }, + { + "contract": "RewardEthToken", + "label": "rewardsDisabled", + "type": "t_mapping(t_address,t_bool)", + "src": "contracts/tokens/RewardEthToken.sol:52" + } + ], + "types": { + "t_contract(IStakedEthToken)6891": { + "label": "contract IStakedEthToken" + }, + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_struct(Checkpoint)6649_storage)": { + "label": "mapping(address => struct IRewardEthToken.Checkpoint)" + }, + "t_struct(Checkpoint)6649_storage": { + "label": "struct IRewardEthToken.Checkpoint", + "members": [ + { + "label": "reward", + "type": "t_uint128" + }, + { + "label": "rewardPerToken", + "type": "t_uint128" + } + ] + }, + "t_uint128": { + "label": "uint128" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)" + }, + "t_bool": { + "label": "bool" + }, + "t_mapping(t_address,t_struct(Counter)1781_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)" + }, + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)" + }, + "t_string_storage": { + "label": "string" + }, + "t_uint8": { + "label": "uint8" + }, + "t_array(t_uint256)44_storage": { + "label": "uint256[44]" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + } + } + } } } } diff --git a/.openzeppelin/unknown-31337.json b/.openzeppelin/unknown-31337.json index ac08a7ac..c66f0503 100644 --- a/.openzeppelin/unknown-31337.json +++ b/.openzeppelin/unknown-31337.json @@ -1739,6 +1739,1274 @@ } } } + }, + "97347223e792bf368d6a6c9d760d82b455a5edc1629dff43cd9ce0e019b9b25f": { + "address": "0x459beef3c5Bd5D1E66de93AC908E278ee2488F14", + "txHash": "0xeae913a12dfab0ce7c009f08e47135120e7c2f83c65ae50b0f55bada9544c5d3", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "MerkleDistributor", + "label": "merkleRoot", + "type": "t_bytes32", + "src": "contracts/merkles/MerkleDistributor.sol:24" + }, + { + "contract": "MerkleDistributor", + "label": "rewardEthToken", + "type": "t_address", + "src": "contracts/merkles/MerkleDistributor.sol:27" + }, + { + "contract": "MerkleDistributor", + "label": "oracles", + "type": "t_contract(IOracles)7086", + "src": "contracts/merkles/MerkleDistributor.sol:30" + }, + { + "contract": "MerkleDistributor", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/merkles/MerkleDistributor.sol:33" + }, + { + "contract": "MerkleDistributor", + "label": "_claimedBitMap", + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", + "src": "contracts/merkles/MerkleDistributor.sol:36" + } + ], + "types": { + "t_bytes32": { + "label": "bytes32" + }, + "t_address": { + "label": "address" + }, + "t_contract(IOracles)7086": { + "label": "contract IOracles" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(bytes32 => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "d8130dc915911607e60a0d8df67e30e904fd2c72948a8e9cca6ca3460d3a8df2": { + "address": "0x3Cf7850F3C68624aAD34c17562669c0694E3ce7f", + "txHash": "0xd29453703e51ddaf141fe35f52696ca98223e0ff7592a139c2782f28d038a58a", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "MerkleDistributor", + "label": "merkleRoot", + "type": "t_bytes32", + "src": "contracts/merkles/MerkleDistributor.sol:24" + }, + { + "contract": "MerkleDistributor", + "label": "rewardEthToken", + "type": "t_address", + "src": "contracts/merkles/MerkleDistributor.sol:27" + }, + { + "contract": "MerkleDistributor", + "label": "oracles", + "type": "t_contract(IOracles)6192", + "src": "contracts/merkles/MerkleDistributor.sol:30" + }, + { + "contract": "MerkleDistributor", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/merkles/MerkleDistributor.sol:33" + }, + { + "contract": "MerkleDistributor", + "label": "_claimedBitMap", + "type": "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))", + "src": "contracts/merkles/MerkleDistributor.sol:36" + } + ], + "types": { + "t_bytes32": { + "label": "bytes32" + }, + "t_address": { + "label": "address" + }, + "t_contract(IOracles)6192": { + "label": "contract IOracles" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_bytes32,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(bytes32 => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "1180315bf4492fa65c4efbff97aef9be398013d10c1aff681a175a03508864ae": { + "address": "0xc8970E7C07c251625F9F93cE510b1D9c1a08d299", + "txHash": "0x32c727ebb5dbbc1bd89a3a21cf15d9e74dbc688b404b60a286a9ae858c4967e2", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "Pool", + "label": "activatedValidators", + "type": "t_uint256", + "src": "contracts/collectors/Pool.sol:25" + }, + { + "contract": "Pool", + "label": "withdrawalCredentials", + "type": "t_bytes32", + "src": "contracts/collectors/Pool.sol:28" + }, + { + "contract": "Pool", + "label": "validatorRegistration", + "type": "t_contract(IDepositContract)5197", + "src": "contracts/collectors/Pool.sol:31" + }, + { + "contract": "Pool", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)5841", + "src": "contracts/collectors/Pool.sol:34" + }, + { + "contract": "Pool", + "label": "validators", + "type": "t_contract(IValidators)5889", + "src": "contracts/collectors/Pool.sol:37" + }, + { + "contract": "Pool", + "label": "oracles", + "type": "t_address", + "src": "contracts/collectors/Pool.sol:40" + }, + { + "contract": "Pool", + "label": "activations", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "contracts/collectors/Pool.sol:43" + }, + { + "contract": "Pool", + "label": "pendingValidators", + "type": "t_uint256", + "src": "contracts/collectors/Pool.sol:46" + }, + { + "contract": "Pool", + "label": "minActivatingDeposit", + "type": "t_uint256", + "src": "contracts/collectors/Pool.sol:49" + }, + { + "contract": "Pool", + "label": "pendingValidatorsLimit", + "type": "t_uint256", + "src": "contracts/collectors/Pool.sol:52" + } + ], + "types": { + "t_uint256": { + "label": "uint256" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_contract(IDepositContract)5197": { + "label": "contract IDepositContract" + }, + "t_contract(IStakedEthToken)5841": { + "label": "contract IStakedEthToken" + }, + "t_contract(IValidators)5889": { + "label": "contract IValidators" + }, + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)1421_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)1421_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1156_storage" + } + ] + }, + "t_struct(Set)1156_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "171192e607fd9fe832fbcecd0f0c39413136c766407e0bff0bfe5e2a6115435f": { + "address": "0x610B58583642610967727fe4fadd125a92D6F678", + "txHash": "0xf14e032482dc6879703eab12dbb50eba23cd4f6f4df9274717c570a686aec9f5", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "contracts/tokens/ERC20Upgradeable.sol:38" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:40" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:41" + }, + { + "contract": "ERC20Upgradeable", + "label": "_decimals", + "type": "t_uint8", + "src": "contracts/tokens/ERC20Upgradeable.sol:42" + }, + { + "contract": "ERC20Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)44_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:225" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_NAME", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_VERSION", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" + }, + { + "contract": "EIP712Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_nonces", + "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_PERMIT_TYPEHASH", + "type": "t_bytes32", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" + }, + { + "contract": "RewardEthToken", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)7696", + "src": "contracts/tokens/RewardEthToken.sol:24" + }, + { + "contract": "RewardEthToken", + "label": "oracles", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:27" + }, + { + "contract": "RewardEthToken", + "label": "checkpoints", + "type": "t_mapping(t_address,t_struct(Checkpoint)7408_storage)", + "src": "contracts/tokens/RewardEthToken.sol:30" + }, + { + "contract": "RewardEthToken", + "label": "maintainer", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:33" + }, + { + "contract": "RewardEthToken", + "label": "maintainerFee", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:36" + }, + { + "contract": "RewardEthToken", + "label": "totalRewards", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:39" + }, + { + "contract": "RewardEthToken", + "label": "rewardPerToken", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:42" + }, + { + "contract": "RewardEthToken", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:45" + }, + { + "contract": "RewardEthToken", + "label": "merkleDistributor", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:48" + }, + { + "contract": "RewardEthToken", + "label": "rewardsDisabled", + "type": "t_mapping(t_address,t_bool)", + "src": "contracts/tokens/RewardEthToken.sol:51" + } + ], + "types": { + "t_contract(IStakedEthToken)7696": { + "label": "contract IStakedEthToken" + }, + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_struct(Checkpoint)7408_storage)": { + "label": "mapping(address => struct IRewardEthToken.Checkpoint)" + }, + "t_struct(Checkpoint)7408_storage": { + "label": "struct IRewardEthToken.Checkpoint", + "members": [ + { + "label": "reward", + "type": "t_uint128" + }, + { + "label": "rewardPerToken", + "type": "t_uint128" + } + ] + }, + "t_uint128": { + "label": "uint128" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)" + }, + "t_bool": { + "label": "bool" + }, + "t_mapping(t_address,t_struct(Counter)1781_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)" + }, + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)" + }, + "t_string_storage": { + "label": "string" + }, + "t_uint8": { + "label": "uint8" + }, + "t_array(t_uint256)44_storage": { + "label": "uint256[44]" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + } + } + } + }, + "1cbcdcdafb11126baead1ddf322344e63f3218adbddb2149a3ba6d13e257d018": { + "address": "0x8C3FC957cb0A339acbE442bD0792590737240BF7", + "txHash": "0x6f5e0a0d0b028502a8d3e5fa61311363677502bdafcd7450e7fd7d66c14c1520", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "Pool", + "label": "activatedValidators", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:26" + }, + { + "contract": "Pool", + "label": "withdrawalCredentials", + "type": "t_bytes32", + "src": "contracts/pool/Pool.sol:29" + }, + { + "contract": "Pool", + "label": "validatorRegistration", + "type": "t_contract(IDepositContract)5811", + "src": "contracts/pool/Pool.sol:32" + }, + { + "contract": "Pool", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)6891", + "src": "contracts/pool/Pool.sol:35" + }, + { + "contract": "Pool", + "label": "validators", + "type": "t_contract(IPoolValidators)6638", + "src": "contracts/pool/Pool.sol:38" + }, + { + "contract": "Pool", + "label": "oracles", + "type": "t_address", + "src": "contracts/pool/Pool.sol:41" + }, + { + "contract": "Pool", + "label": "activations", + "type": "t_mapping(t_address,t_mapping(t_uint256,t_uint256))", + "src": "contracts/pool/Pool.sol:44" + }, + { + "contract": "Pool", + "label": "pendingValidators", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:47" + }, + { + "contract": "Pool", + "label": "minActivatingDeposit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:50" + }, + { + "contract": "Pool", + "label": "pendingValidatorsLimit", + "type": "t_uint256", + "src": "contracts/pool/Pool.sol:53" + } + ], + "types": { + "t_uint256": { + "label": "uint256" + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_contract(IDepositContract)5811": { + "label": "contract IDepositContract" + }, + "t_contract(IStakedEthToken)6891": { + "label": "contract IStakedEthToken" + }, + "t_contract(IPoolValidators)6638": { + "label": "contract IPoolValidators" + }, + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_mapping(t_uint256,t_uint256))": { + "label": "mapping(address => mapping(uint256 => uint256))" + }, + "t_mapping(t_uint256,t_uint256)": { + "label": "mapping(uint256 => uint256)" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_bool": { + "label": "bool" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + } + } + } + }, + "8403e73b5622e4987eb42a678b18c511ccbc91a96452889eff19be7f48562955": { + "address": "0x33582de22176cB084aFBFb818B490adb327BC5bb", + "txHash": "0xe641e2ef15aa49caabf74883627c7a97d910197cb9d48a9a2165a337e4af2e2f", + "layout": { + "storage": [ + { + "contract": "Initializable", + "label": "_initialized", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:25" + }, + { + "contract": "Initializable", + "label": "_initializing", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/proxy/Initializable.sol:30" + }, + { + "contract": "ContextUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/ContextUpgradeable.sol:31" + }, + { + "contract": "PausableUpgradeable", + "label": "_paused", + "type": "t_bool", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:28" + }, + { + "contract": "PausableUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/utils/PausableUpgradeable.sol:96" + }, + { + "contract": "AccessControlUpgradeable", + "label": "_roles", + "type": "t_mapping(t_bytes32,t_struct(RoleData)39_storage)", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:61" + }, + { + "contract": "AccessControlUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol:225" + }, + { + "contract": "ERC20Upgradeable", + "label": "_allowances", + "type": "t_mapping(t_address,t_mapping(t_address,t_uint256))", + "src": "contracts/tokens/ERC20Upgradeable.sol:38" + }, + { + "contract": "ERC20Upgradeable", + "label": "_name", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:40" + }, + { + "contract": "ERC20Upgradeable", + "label": "_symbol", + "type": "t_string_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:41" + }, + { + "contract": "ERC20Upgradeable", + "label": "_decimals", + "type": "t_uint8", + "src": "contracts/tokens/ERC20Upgradeable.sol:42" + }, + { + "contract": "ERC20Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)44_storage", + "src": "contracts/tokens/ERC20Upgradeable.sol:225" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_NAME", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:27" + }, + { + "contract": "EIP712Upgradeable", + "label": "_HASHED_VERSION", + "type": "t_bytes32", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:28" + }, + { + "contract": "EIP712Upgradeable", + "label": "__gap", + "type": "t_array(t_uint256)50_storage", + "src": "@openzeppelin/contracts-upgradeable/drafts/EIP712Upgradeable.sol:120" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_nonces", + "type": "t_mapping(t_address,t_struct(Counter)1781_storage)", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:26" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "_PERMIT_TYPEHASH", + "type": "t_bytes32", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:29" + }, + { + "contract": "ERC20PermitUpgradeable", + "label": "__gap", + "type": "t_array(t_uint256)49_storage", + "src": "contracts/tokens/ERC20PermitUpgradeable.sol:88" + }, + { + "contract": "RewardEthToken", + "label": "stakedEthToken", + "type": "t_contract(IStakedEthToken)6891", + "src": "contracts/tokens/RewardEthToken.sol:25" + }, + { + "contract": "RewardEthToken", + "label": "oracles", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:28" + }, + { + "contract": "RewardEthToken", + "label": "checkpoints", + "type": "t_mapping(t_address,t_struct(Checkpoint)6649_storage)", + "src": "contracts/tokens/RewardEthToken.sol:31" + }, + { + "contract": "RewardEthToken", + "label": "protocolFeeRecipient", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:34" + }, + { + "contract": "RewardEthToken", + "label": "protocolFee", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:37" + }, + { + "contract": "RewardEthToken", + "label": "totalRewards", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:40" + }, + { + "contract": "RewardEthToken", + "label": "rewardPerToken", + "type": "t_uint128", + "src": "contracts/tokens/RewardEthToken.sol:43" + }, + { + "contract": "RewardEthToken", + "label": "lastUpdateBlockNumber", + "type": "t_uint256", + "src": "contracts/tokens/RewardEthToken.sol:46" + }, + { + "contract": "RewardEthToken", + "label": "merkleDistributor", + "type": "t_address", + "src": "contracts/tokens/RewardEthToken.sol:49" + }, + { + "contract": "RewardEthToken", + "label": "rewardsDisabled", + "type": "t_mapping(t_address,t_bool)", + "src": "contracts/tokens/RewardEthToken.sol:52" + } + ], + "types": { + "t_contract(IStakedEthToken)6891": { + "label": "contract IStakedEthToken" + }, + "t_address": { + "label": "address" + }, + "t_mapping(t_address,t_struct(Checkpoint)6649_storage)": { + "label": "mapping(address => struct IRewardEthToken.Checkpoint)" + }, + "t_struct(Checkpoint)6649_storage": { + "label": "struct IRewardEthToken.Checkpoint", + "members": [ + { + "label": "reward", + "type": "t_uint128" + }, + { + "label": "rewardPerToken", + "type": "t_uint128" + } + ] + }, + "t_uint128": { + "label": "uint128" + }, + "t_uint256": { + "label": "uint256" + }, + "t_mapping(t_address,t_bool)": { + "label": "mapping(address => bool)" + }, + "t_bool": { + "label": "bool" + }, + "t_mapping(t_address,t_struct(Counter)1781_storage)": { + "label": "mapping(address => struct CountersUpgradeable.Counter)" + }, + "t_struct(Counter)1781_storage": { + "label": "struct CountersUpgradeable.Counter", + "members": [ + { + "label": "_value", + "type": "t_uint256" + } + ] + }, + "t_bytes32": { + "label": "bytes32" + }, + "t_array(t_uint256)49_storage": { + "label": "uint256[49]" + }, + "t_array(t_uint256)50_storage": { + "label": "uint256[50]" + }, + "t_mapping(t_address,t_mapping(t_address,t_uint256))": { + "label": "mapping(address => mapping(address => uint256))" + }, + "t_mapping(t_address,t_uint256)": { + "label": "mapping(address => uint256)" + }, + "t_string_storage": { + "label": "string" + }, + "t_uint8": { + "label": "uint8" + }, + "t_array(t_uint256)44_storage": { + "label": "uint256[44]" + }, + "t_mapping(t_bytes32,t_struct(RoleData)39_storage)": { + "label": "mapping(bytes32 => struct AccessControlUpgradeable.RoleData)" + }, + "t_struct(RoleData)39_storage": { + "label": "struct AccessControlUpgradeable.RoleData", + "members": [ + { + "label": "members", + "type": "t_struct(AddressSet)2097_storage" + }, + { + "label": "adminRole", + "type": "t_bytes32" + } + ] + }, + "t_struct(AddressSet)2097_storage": { + "label": "struct EnumerableSetUpgradeable.AddressSet", + "members": [ + { + "label": "_inner", + "type": "t_struct(Set)1832_storage" + } + ] + }, + "t_struct(Set)1832_storage": { + "label": "struct EnumerableSetUpgradeable.Set", + "members": [ + { + "label": "_values", + "type": "t_array(t_bytes32)dyn_storage" + }, + { + "label": "_indexes", + "type": "t_mapping(t_bytes32,t_uint256)" + } + ] + }, + "t_array(t_bytes32)dyn_storage": { + "label": "bytes32[]" + }, + "t_mapping(t_bytes32,t_uint256)": { + "label": "mapping(bytes32 => uint256)" + } + } + } } } } From c8d91aab9fcdfe933fc04ed9b29c89018573111d Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Tue, 21 Dec 2021 16:00:26 +0200 Subject: [PATCH 49/55] Fix Roles contract --- deployments/settings.js | 1 + test/Proxies.test.js | 2 ++ 2 files changed, 3 insertions(+) diff --git a/deployments/settings.js b/deployments/settings.js index aace1806..e0dfd804 100644 --- a/deployments/settings.js +++ b/deployments/settings.js @@ -36,6 +36,7 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { vestingEscrowFactory: '0x7B910cc3D4B42FEFF056218bD56d7700E4ea7dD5', merkleDrop: '0x2AAB6822a1a9f982fd7b0Fe35A5A5b6148eCf4d5', merkleDistributor: '0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20', + roles: '0xC486c10e3611565F5b38b50ad68277b11C889623', contractChecker: '0xFC1fC7257AEA7C7c08A498594DCA97CE5A72fdCB', proxyAdmin: '0x3EB0175dcD67d3AB139aA03165e24AA2188A4C22', }; diff --git a/test/Proxies.test.js b/test/Proxies.test.js index cdfdb773..5fbc0d29 100644 --- a/test/Proxies.test.js +++ b/test/Proxies.test.js @@ -10,6 +10,7 @@ let proxies = [ contracts.stakeWiseToken, contracts.vestingEscrowFactory, contracts.merkleDistributor, + contracts.roles, ]; let implementations = [ @@ -21,6 +22,7 @@ let implementations = [ '0xA28C2d79f0c5B78CeC699DAB0303008179815396', '0xbeE3Eb97Cfd94ace6B66E606B8088C57c5f78fBf', '0x459beef3c5Bd5D1E66de93AC908E278ee2488F14', + '0x584E5D4bD0AE1EEF838796aEe8fb805BbB82439C', ]; contract('Proxies', () => { From dbff464d490652a337d2856f989686e0d6f60c6d Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Thu, 6 Jan 2022 22:34:13 +0400 Subject: [PATCH 50/55] Update tests block number --- deployments/index.js | 101 +------------------------------------------ hardhat.config.js | 2 +- 2 files changed, 2 insertions(+), 101 deletions(-) diff --git a/deployments/index.js b/deployments/index.js index 356ecf2f..83339ee5 100644 --- a/deployments/index.js +++ b/deployments/index.js @@ -1,109 +1,10 @@ -const { white } = require('chalk'); -const { ethers, upgrades, config } = require('hardhat'); -const { contracts, contractSettings } = require('./settings'); - -function log(message) { - if (config != null && config.suppressLogs !== true) { - console.log(message); - } -} - -async function upgradeMerkleDistributor(oraclesContractAddress) { - const signer = await ethers.provider.getSigner(contractSettings.admin); - const MerkleDistributor = await ethers.getContractFactory( - 'MerkleDistributor', - signer - ); - let merkleDistributor = MerkleDistributor.attach(contracts.merkleDistributor); - - // pause - if (!(await merkleDistributor.paused())) { - await merkleDistributor.pause(); - } - - // upgrade MerkleDistributor to new implementation - const proxy = await upgrades.upgradeProxy( - contracts.merkleDistributor, - MerkleDistributor - ); - await proxy.deployed(); - - // call upgrade - await merkleDistributor.upgrade(oraclesContractAddress); - - // unpause - return merkleDistributor.connect(signer).unpause(); -} - -async function upgradePool( - poolValidatorsContractAddress, - oraclesContractAddress -) { - const signer = await ethers.provider.getSigner(contractSettings.admin); - const Pool = await ethers.getContractFactory('Pool', signer); - let pool = await Pool.attach(contracts.pool); - - // pause - if (!(await pool.paused())) { - await pool.pause(); - } - - // upgrade Pool to new implementation - const proxy = await upgrades.upgradeProxy(contracts.pool, Pool); - await proxy.deployed(); - - // call upgrade - await pool.upgrade(poolValidatorsContractAddress, oraclesContractAddress); - - // unpause - return pool.unpause(); -} - -async function upgradeRewardEthToken(oraclesContractAddress) { - const signer = await ethers.provider.getSigner(contractSettings.admin); - const RewardEthToken = await ethers.getContractFactory( - 'RewardEthToken', - signer - ); - let rewardEthToken = await RewardEthToken.attach(contracts.rewardEthToken); - - // pause - if (!(await rewardEthToken.paused())) { - await rewardEthToken.pause(); - } - - // upgrade RewardEthToken to new implementation - const proxy = await upgrades.upgradeProxy( - contracts.rewardEthToken, - RewardEthToken, - { - unsafeAllowRenames: true, - } - ); - await proxy.deployed(); - - // call upgrade - await rewardEthToken.upgrade(oraclesContractAddress); - - return rewardEthToken.unpause(); -} +const { contracts } = require('./settings'); async function deployContracts() { return contracts; } async function upgradeContracts() { - const { poolValidators, oracles } = await deployContracts(); - - await upgradeMerkleDistributor(oracles); - log(white('Upgraded MerkleDistributor contract')); - - await upgradePool(poolValidators, oracles); - log(white('Upgraded Pool contract')); - - await upgradeRewardEthToken(oracles); - log(white('Upgraded RewardEthToken contract')); - return contracts; } diff --git a/hardhat.config.js b/hardhat.config.js index 6a1c5637..ed208c7d 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -10,7 +10,7 @@ require('hardhat-contract-sizer'); require('hardhat-abi-exporter'); require('@nomiclabs/hardhat-etherscan'); -const BLOCK_NUMBER = 13848390; +const BLOCK_NUMBER = 13953510; const OPTIMIZER_RUNS = 5000000; const log = (...text) => console.log(gray(...['└─> [DEBUG]'].concat(text))); From bc840bab0583f2c83ed9c6386c0a13d47a5b2a15 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Thu, 6 Jan 2022 22:43:37 +0400 Subject: [PATCH 51/55] Fix tests --- test/Proxies.test.js | 8 +++--- test/oracles/upgrading.test.js | 48 ---------------------------------- 2 files changed, 4 insertions(+), 52 deletions(-) delete mode 100644 test/oracles/upgrading.test.js diff --git a/test/Proxies.test.js b/test/Proxies.test.js index 5fbc0d29..5c3cda03 100644 --- a/test/Proxies.test.js +++ b/test/Proxies.test.js @@ -14,14 +14,14 @@ let proxies = [ ]; let implementations = [ - '0xc8970E7C07c251625F9F93cE510b1D9c1a08d299', + '0xe68E649862F7036094f1E4eD5d69a738aCDE666f', '0xfa00515082fe90430C80DA9B299f353929653d7B', - '0xDb123d84CdB055fdbFa9058f64A460BB0fBF8eAE', + '0x8a887282E67ff41d36C0b7537eAB035291461AcD', '0x41bcac23e4db058d8D7aAbE2Fccdae5F01FE647A', - '0x610B58583642610967727fe4fadd125a92D6F678', + '0x7cA75ccf264b2d9F91D4ABA7639fC7FcC73a7e09', '0xA28C2d79f0c5B78CeC699DAB0303008179815396', '0xbeE3Eb97Cfd94ace6B66E606B8088C57c5f78fBf', - '0x459beef3c5Bd5D1E66de93AC908E278ee2488F14', + '0x1d873651c38D912c8A7E1eBfB013Aa96bE5AACBC', '0x584E5D4bD0AE1EEF838796aEe8fb805BbB82439C', ]; diff --git a/test/oracles/upgrading.test.js b/test/oracles/upgrading.test.js deleted file mode 100644 index be1e6aae..00000000 --- a/test/oracles/upgrading.test.js +++ /dev/null @@ -1,48 +0,0 @@ -const { send, ether, BN } = require('@openzeppelin/test-helpers'); -const { contractSettings, contracts } = require('../../deployments/settings'); -const { upgradeContracts } = require('../../deployments'); -const { - impersonateAccount, - stopImpersonatingAccount, - resetFork, -} = require('../utils'); - -const Oracles = artifacts.require('Oracles'); -const PrevOracles = artifacts.require('IOraclesV1'); - -contract('Oracles (upgrading)', ([anyone]) => { - let admin = contractSettings.admin; - let oracles; - - after(async () => stopImpersonatingAccount(admin)); - - beforeEach(async () => { - await impersonateAccount(admin); - await send.ether(anyone, admin, ether('5')); - let upgradedContracts = await upgradeContracts(); - oracles = await Oracles.at(upgradedContracts.oracles); - }); - - afterEach(async () => resetFork()); - - it('initializes with values from previous contract', async () => { - let prevOracles = await PrevOracles.at(contracts.prevOracles); - expect(await prevOracles.currentNonce()).to.bignumber.equal( - (await oracles.currentRewardsNonce()).sub(new BN('1000')) - ); - - // use Oracles abi for prevOracles contract - prevOracles = await Oracles.at(contracts.prevOracles); - let oraclesRole = await oracles.ORACLE_ROLE(); - let totalOracles = await oracles.getRoleMemberCount(oraclesRole); - expect(totalOracles).to.bignumber.equal( - await prevOracles.getRoleMemberCount(oraclesRole) - ); - - for (let i = 0; i < totalOracles.toNumber(); i++) { - let oldOracle = await prevOracles.getRoleMember(oraclesRole, i); - let newOracle = await oracles.getRoleMember(oraclesRole, i); - expect(oldOracle).to.equal(newOracle); - } - }); -}); From b33ffac5eb938814fc4b0fa5affa225885058ad7 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Thu, 6 Jan 2022 22:50:35 +0400 Subject: [PATCH 52/55] Fix tests --- hardhat.config.js | 2 +- test/Proxies.test.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/hardhat.config.js b/hardhat.config.js index ed208c7d..0a659fd1 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -10,7 +10,7 @@ require('hardhat-contract-sizer'); require('hardhat-abi-exporter'); require('@nomiclabs/hardhat-etherscan'); -const BLOCK_NUMBER = 13953510; +const BLOCK_NUMBER = 13953000; const OPTIMIZER_RUNS = 5000000; const log = (...text) => console.log(gray(...['└─> [DEBUG]'].concat(text))); diff --git a/test/Proxies.test.js b/test/Proxies.test.js index 5c3cda03..db828ae0 100644 --- a/test/Proxies.test.js +++ b/test/Proxies.test.js @@ -16,7 +16,7 @@ let proxies = [ let implementations = [ '0xe68E649862F7036094f1E4eD5d69a738aCDE666f', '0xfa00515082fe90430C80DA9B299f353929653d7B', - '0x8a887282E67ff41d36C0b7537eAB035291461AcD', + '0xDb123d84CdB055fdbFa9058f64A460BB0fBF8eAE', '0x41bcac23e4db058d8D7aAbE2Fccdae5F01FE647A', '0x7cA75ccf264b2d9F91D4ABA7639fC7FcC73a7e09', '0xA28C2d79f0c5B78CeC699DAB0303008179815396', From 4c4f809b49f6adc0dc6cbcf849b88e3cd45997de Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Thu, 6 Jan 2022 23:03:14 +0400 Subject: [PATCH 53/55] Fix PoolValidators test --- deployments/settings.js | 2 -- hardhat.config.js | 2 +- test/pool/PoolValidators.test.js | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/deployments/settings.js b/deployments/settings.js index e0dfd804..4ee16ab8 100644 --- a/deployments/settings.js +++ b/deployments/settings.js @@ -3,7 +3,6 @@ const hre = require('hardhat'); let contracts, contractSettings; if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { contracts = { - prevOracles: '0xE54486fa4eB45716c5725d7A46FDDe810B8E8914', oracles: '0x531b9D9cb268E88D53A87890699bbe31326A6f08', pool: '0x8c1EfEcFb5c4F1099AB0460b5659342943764Df7', poolValidators: '0x3A2A4c01BC8595E168A90bA6F04BB8A9FEac2acb', @@ -25,7 +24,6 @@ if (hre.hardhatArguments && hre.hardhatArguments.network === 'goerli') { }; } else { contracts = { - prevOracles: '0x2f1C5E86B13a74f5A6E7B4b35DD77fe29Aa47514', oracles: '0x8a887282E67ff41d36C0b7537eAB035291461AcD', pool: '0xC874b064f465bdD6411D45734b56fac750Cda29A', poolValidators: '0x002932e11E95DC84C17ed5f94a0439645D8a97BC', diff --git a/hardhat.config.js b/hardhat.config.js index 0a659fd1..6d00a299 100644 --- a/hardhat.config.js +++ b/hardhat.config.js @@ -10,7 +10,7 @@ require('hardhat-contract-sizer'); require('hardhat-abi-exporter'); require('@nomiclabs/hardhat-etherscan'); -const BLOCK_NUMBER = 13953000; +const BLOCK_NUMBER = 13952000; const OPTIMIZER_RUNS = 5000000; const log = (...text) => console.log(gray(...['└─> [DEBUG]'].concat(text))); diff --git a/test/pool/PoolValidators.test.js b/test/pool/PoolValidators.test.js index 66b04123..f4dc767a 100644 --- a/test/pool/PoolValidators.test.js +++ b/test/pool/PoolValidators.test.js @@ -59,7 +59,7 @@ contract('Pool Validators', (accounts) => { // collect validator deposit let poolBalance = await balance.current(pool.address); - let depositAmount = validatorDeposit.sub(poolBalance); + let depositAmount = validatorDeposit.sub(poolBalance.mod(validatorDeposit)); await pool.stake({ from: anyone, value: depositAmount, From b9cbb0068c3062025d86071866af17e555aed866 Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Fri, 7 Jan 2022 00:37:02 +0400 Subject: [PATCH 54/55] Fix pool stake test --- test/pool/stake.test.js | 86 ++++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 45 deletions(-) diff --git a/test/pool/stake.test.js b/test/pool/stake.test.js index dbbdf491..7e878472 100644 --- a/test/pool/stake.test.js +++ b/test/pool/stake.test.js @@ -170,7 +170,7 @@ contract('Pool (stake)', (accounts) => { poolBalance = poolBalance.add(depositAmount); let validatorIndex = activatedValidators .add(pendingValidators) - .add(new BN(2)); + .add(poolBalance.div(ether('32'))); // check deposit amount placed in activation queue let receipt = await pool.stake({ @@ -409,18 +409,27 @@ contract('Pool (stake)', (accounts) => { from: sender1, value: depositAmount, }); + poolBalance = poolBalance.add(depositAmount); validatorIndex = activatedValidators .add(pendingValidators) - .add(new BN(1)); - - await registerValidator({ - admin, - validators, - oracles, - oracleAccounts, - operator, - validatorsDepositRoot, - }); + .add(poolBalance.div(ether('32'))); + + for (let i = 0; i < validatorIndex.sub(activatedValidators); i++) { + validatorsDepositRoot = await depositContract.get_deposit_root(); + await registerValidator({ + admin, + validators, + oracles, + oracleAccounts, + operator, + validatorsDepositRoot, + merkleProof: depositData[i].merkleProof, + signature: depositData[i].signature, + publicKey: depositData[i].publicKey, + withdrawalCredentials: depositData[i].withdrawalCredentials, + depositDataRoot: depositData[i].depositDataRoot, + }); + } }); it('fails to activate with invalid validator index', async () => { @@ -494,11 +503,6 @@ contract('Pool (stake)', (accounts) => { account: sender1, balance: depositAmount, }); - - // check contract balance - expect(await balance.current(pool.address)).to.be.bignumber.equal( - poolBalance - ); }); }); @@ -514,39 +518,36 @@ contract('Pool (stake)', (accounts) => { from: sender3, value: depositAmount, }); + poolBalance = poolBalance.add(depositAmount); validatorIndex1 = activatedValidators .add(pendingValidators) - .add(new BN(1)); + .add(poolBalance.div(ether('32'))); await pool.stake({ from: sender3, value: depositAmount, }); + poolBalance = poolBalance.add(depositAmount); validatorIndex2 = activatedValidators .add(pendingValidators) - .add(new BN(2)); - - await registerValidator({ - admin, - validators, - oracles, - oracleAccounts, - operator, - validatorsDepositRoot, - }); - await registerValidator({ - admin, - validators, - oracles, - oracleAccounts, - operator, - merkleProof: depositData[1].merkleProof, - signature: depositData[1].signature, - publicKey: depositData[1].publicKey, - withdrawalCredentials: depositData[1].withdrawalCredentials, - depositDataRoot: depositData[1].depositDataRoot, - validatorsDepositRoot: await depositContract.get_deposit_root(), - }); + .add(poolBalance.div(ether('32'))); + + for (let i = 0; i < validatorIndex2.sub(activatedValidators); i++) { + validatorsDepositRoot = await depositContract.get_deposit_root(); + await registerValidator({ + admin, + validators, + oracles, + oracleAccounts, + operator, + validatorsDepositRoot, + merkleProof: depositData[i].merkleProof, + signature: depositData[i].signature, + publicKey: depositData[i].publicKey, + withdrawalCredentials: depositData[i].withdrawalCredentials, + depositDataRoot: depositData[i].depositDataRoot, + }); + } }); it('fails to activate with invalid validator indexes', async () => { @@ -636,11 +637,6 @@ contract('Pool (stake)', (accounts) => { value: depositAmount, sender: sender3, }); - - // check contract balance - expect(await balance.current(pool.address)).to.be.bignumber.equal( - poolBalance - ); }); }); From bc2e4af260c60b0e1df7c43e1090ab6e0d712b1a Mon Sep 17 00:00:00 2001 From: Dmitri Tsumak Date: Fri, 7 Jan 2022 21:13:38 +0400 Subject: [PATCH 55/55] Add v2 audit --- audits/2021-11-25-Omniscia.pdf | Bin 0 -> 3343375 bytes networks/mainnet.md | 15 +++++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 audits/2021-11-25-Omniscia.pdf diff --git a/audits/2021-11-25-Omniscia.pdf b/audits/2021-11-25-Omniscia.pdf new file mode 100644 index 0000000000000000000000000000000000000000..2e45a88cf6b89ebdb0eb2534564ffcc4a1acc313 GIT binary patch literal 3343375 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�+s2 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

hUmUVd%E(+gC1RokQ9d8xZHrH1@lWp2n>S(AH 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 z%0D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%0AqlkA`=R+n7m?O!sLanS1lT4 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

qp-(G z@XF0)*rQ`U1bdjt`>=f3S1%zmr{`U8@DZNN*;SX%*;liII%YdHo#qe(33qp*JTsRbJ1)ar>X4BRtot41>3x~O zErrVkchJ*2%0q$LeV3S-b9}02oy%*aNgjRqjJbkI6;>XDBsvY$=+}zsTu#Y5Mqv)oB z%@P&V=8YvH`li@o*L&^ZDy)3uBl?Xl8roBEFfP_6&drb|-wP?@DpWb42(dp1#SOWAw zk(ImnRb(w$5u?Ex9R-OF0-~`vX(dXVl}VI|*`h>8Em1=DOSHER9%>vJi43de!QN3! z8YL=C;#FeXDA7Sj^mlS{h*BwI^$>dH%pE0GVT8y|?A{;|2N?Ao$X^Fns3F^(P?nQP z(K@bj!if^=1N0+SN?ovyLPX|@*VtGfAi3qq2XI)NM5n+?FPvDoL8%S`QE61UDHyY7 zgd3W&Y0ylQl>~DX!TJNhVNhf2e|z_x{j>yT~);PAlC6b0!DCH}1_TbofxnWHnyT zx(QNYrlPq5@yS5&?FZH*n{UDlEI?H zTBbclB_J+#rtJ)^A3sWYv&ZbRG(_zIjh#D-j^{RtM)>O?3Z4|Oa36}Xzr zcRlqa+?z5lN;1sAc~tD6ijt@0O0*(-z?^-nUc!aR(c!8X3B8<(j>MDw9<<6U$c{{`k(QU!oVqVr zXg&9fYyur@v}$fFNM2+dYfXsI5O+rYD(;mXf=_c!i!ZHZ$D)P7P1J(bA9=DLhU|n~ z)dcvh80RPAGVh5kGuStBGbRlY(e(r|swoN}OyzbUoa6^;mxyL>Qd)Np6`|HRbFUC( zoQt?uAs0hc6xnN!;?{vZdjbdrdSS*josJ=8Ui1(hDzXfOzJd=x*dXl* zAnYE3wOU*=rk^d#L!Se}g1F|e=6JyF@`DF}uw5NqlU9hXL6)G`begh&kGQTN<{Ajm z)-ymTg)IRgRA%c-yXqbgLT8zVs9rh{3cz*VoX4?EuL8zFtCEzKYBmZ8(Zff8uy7|X zCsH^(5y`oRw)u44t4Z=Hge%I4s~W3#xI$31rXYb%OH8##j&(>SGmpEub$g&DGtlla z0Ib#JCID74^fmzYtUy6kf#L#n)(E+L5)~Iv8(=pFfRI_MfnvDLvZ0}YPaX9znRxCx zC(GWeks!R_DiWLnzy@WD0N6mXd#dW%Ux@_ePAw7)<7EUBuoNCNxN5qG%}T^10yZbm z=JYqn671qh0d~~0mmnoj7PMRgAXc6S01!R%tS0-q1b`U-qX4K$wMg^^0Om;0@|{Q! zbMXKG)(jOW*4k^4Afk_$kouDWpcNbS04)lT92MK0KJjqTA1-7I6nKz87qZNfX@)Dv zwXAL;@^XEZ^@Nn)`hvqlaP-b^o*t%bhb8B5K8ueaJEQ)m6(8+!aNG{81SnlA zK7wGk#ok6NZ`A(qAYLS2v-SuVVT&k<4pV};x+K$DuuT^=Zf}h`=E{}^tpo9n2-wwh--WrAUPh+I;pw8ONM zv{Pq}Q6x7}Wm8>7ui)p9;4LS7njIIx0dV4S%f_3zkJ)%wpunAGWGHVoi5G*c2+4oK z*qwf6R420?-#?cIWnJQG$`YvYvn*_Xf$iz%B?oA zp!I<^9Gkn)(X+2cScdvJeRZR2^xI zo{@*-axw?wP*9eGr-A>q4=^$#uR-!7lo+FB=-mvY7?TWE;39Y+0F>(VW?=<9c&1fB zL2_Z{Sm@=oQnU)l`H*>e#IyewG!iHX-XeOWkHlzB1u%G|Ev~B@#P_hhW7l z+j1FHT(WAFD{D=A$g2`5P&RDSGX2&jQz&(B$rg4P&!*nWu44jn9or@NQkv zN|=!UPR=VL8#6Mrx2raa77F^nTXhoQqqIvua%MTmtmLIZiqlFgkG9@T% z4O!qH-27?$gAFa<-%J%|^mG>gnm0tpYDDUq0eBcRF>wL^8geY*UxT3g_@_bM#6RE< zgT+_{@8BO1(ZLsve}#X7vS;y6<|K$Lo#o01j|ZxZB}oK$z;0m`#%LmIz@W+|q8BB_ zL{Mf>Rlpe2mYBmSibi2}2D2fl55%>#?Zv&yScPe3HivzMx#=C>B9 zW$c5(>N1P{rr6iQsvFqX;gY| zVlah$Jvu1uMaQ}y&&meuL*L?eMNLcC*WhQ0eHvwp{WQp%*mt!97_g5pJH~$P;Zy9h zRdF`?xg?$!EgC&Hnygn&VsfjEmV@|4OCuVVhRryCoY1zrgxYY+( zm5(`A<%ti(C7}R1HfxjuoRKMr55zSn&R|t0ugG*PDsqbAUW;ZWT%@wa5)CbylW?(! z{=nkpOUkQ0-p9Hny782O@Oa6v*fI_Q{up@&6166 z#xSeRfRRWk>*IEh^wZe(Hm0m4=wk;xDYh6jOQ{dZtY|4@WQ*+_A4tGsDG%i}HA!|U zQK_OOTqH(}5-VEbfWexfY0(g*AB*;cCsg2#)cqr?h^ATcga%&HxE zFZTM3*wjN%W>BPv15zIBO$;1$ZYqX^Je^b(^8lI1JkFoZRoH3G zXh<^CP}cB{r@&@Jyj)onX$*8z`X3C{e1IhbEr*i?mplVJNL*$Usk$ZHsI8;fJS&IH z=J_@p&BW66v~bdJlvv)$qqQdRjZD}s3zsbNQ>Ws-2z{z;kB+JXvOw7_tWBN7h#6z~ zFn~6;5!W)VIUz34OU-WTVU-=t07BNG*$TKsGdZSAg4r4!!3^3iaUDt$|Wk1 z@d!s{`68&$cWjhdiH;3Bl(N5NU!j7<0vo_9bH z?R*_OZUt6QwOG9x3SC{bRH<1Llwt$yxmIMhv~*oso|Bc9xwZ5VJX(D_?d#w*YD77B-K-fc0+dSyx!6qmHf&2C4S8_ zzTR-P6`Y2cnb8joAUl)wOXwD?*GivKC>@M*9ER5CxF#=LH)cTWK0}2k0nt}dt1^PU zybg#t-8}H&8vtTL9bhBf)*&)2@G(G4m+smsH}BvVPwKKOK!jBr(iAxrcm&XV1`y>R zM7m5TP_nV0gsxIv}bgB~;pS5;hrjt>w_?q|3@q35cq%4g85FEQv3eBB(2K zQ&Tc0%IAci5G7%1c6R`f5>?Tl;g3YRTU&v|SL;fWcdzEn3(x}ie$z^4HT)q9^(fM1 zXKsPvaN6cyH`Che!6*MV7{=0L5#y)8P@YWh@u{SxKM@@^FoYu+F{YL*@`TMYZ%Wv( zvif_`VS*v+B;bO*j?z)X18KCmXmYO^D( zgkEn(hY5x{^6E3uVS!;=N<#nP*-wBW0}@{DIH}@q^iRhp^`I?e35RoW=xiMK82L5> zU7Cggx^k!UICN!zGmVY1&MDM}*yuabZ`Ko}a!>e3H0aF@BGr^#z&M=Gs5^>!16+53 zot=-YDT0sctR6^U*B8|*MLEs-%Nn1SSH?eTZtyAj^Io+Os>^|Y^0U-D7$}RH*8C2n ze>WjYd=TtkP&k5%q6`S;&E%-x@J)mu0l!>Z&Ouil1q{t zh83F#Ga5`F18LZun3%Y8l-U>PQpT)-ikcwV954GLa}??*1Ur12Za7p4G88c5#3YQ* zMhwXrd{$G-5&AjpaIlrmN3xkh z2us;IfV*e(A-jMv>zOARBp3y&Xfpd`)n7}b+9hSP+YjoChnPThy03oIIu$&Jh<>GV z0toO1h4~`-C!>=q#u#W|z+^KMcqB~e#E*iez%_H7&B9Q95P>Wz4RcvjT68I$uMZ@~ zyTVm`IjarLeqv-+|Kk_nw^aynBpaNXZxUQYhg~7v&2O-X1dQP@Ave7UfX19bF5y18t`n&;IHtk zxxCSxPn(irvCgOlNe@0?d_I`a28(e+B;zt1&pVrpxsHB=zl1q4q5ofh>0=r9*t)L#TTM7TbItPU9r3<->m z5BGqMx#c;a`*_M_AJl|vgd%#mKaN{KL&JpxY7jZ82-Hg zbhg~h0$na`4r;@UF9V%sGuzGjW{lW zDF5956#f7B@g8Yzx6rFr9hEWVO`*v5Y2QS8xZkP$K2q&v3#zGGQZpvEl z7`HYNVr zxYxFu7F#n>nerI;y*Asx+r2h&&1-#sj?dE2dz&fC-1MpUDcUrw%zoB5b4>GNcSad? zNU0BSxLMm`yARNUS^pB;6C_?GV+<7nF>=3NOJg*a*kCI};#QATm$BYFOGu$}6!UoL zj+162I;{=~`zaA?l&}s7Qwa`>tDHMUpsV82=juO9(prS;Bfy79x9I=9NQC-r4^rG1%Ar`vh zJQ`_6olC=z1htm)0GaqV+~;!ziE()`qh%49BN!~_dRI6{f29nTT13^2unD@fF!NT} zRQu1~>NIRJYMAHHM61_`3XHI+1CRV7{pH6Zu(TrMjdT^7X+|!t*kQA#31QYfF4H_B zp$S8EzRTvHWk|JIWT!nD#7-w4Gxk-fW7aivh1=`Bo?-VapUi`bQ2I=_LX~$Sl_` z)k#L}dJ@~IBo4@mkBV@j%nO8^mSWG8S%)&Up$oxB?D<-zebA=ShsKa)yU;EOv`TG3 zndI1nc-}$km)leJSOrwjAE~>pPyQ}-asnu6`U#!)iS@XsiPF^M6xbvxMUT!l!%Vl} zi<`}WiE>JaCr!om(C;;w#Tv~ks)fNVG8E&GEtB6wnefkte`32BYjzkK*KspGC8d0g z3Kc;nMcP^z_jVcA@y>@O%CTME3*x_IXg6fBIpm~Kl`Ja?S?MkQ@(0*3x^~L9hbhjv z3oDKZARsRypKwl0KOM+3+)0yh-mKmT4lFXwW^x(%0ts=8<>E3 zywfszAMY%*Fue1t+eAopDjwq2IF#Re%kwp2f0M22Z-HtlJCY^XARdWC3$B9tMP}ujt8>Zq2mq=%W16w3oFUNXV1<@`(Rnt z?eN=DC%(lIwL?do)_l_U=e+`Gm69azKT=fe9dv(QAJK6@qu;yYxM?pw^Q7 z=>@gd_ykXq;mr%wNp5z`CBW;Mc7}{Py=0@R&AbW~N;^AD$4ZA_*+gcaQifGDb#NuJ zbWdsP>wT?m$c#}Y4CW<%rLltAkV$is;#4zsX|znedSJTEBmpvHfg*x5p zo6Jq8i$&ECO^X#xfm$>p@JLM{@ZdcNSTPCNpXg$M3N#p^z!Zq0OVfd10Nn9%$atTIiMMLK};H64i#3dLdo*F#^hOJer!%=H(V(qb#iA#I+ z?E~uyS06nWAeWy(Dp8KD<8$6A8#5fghPB55=q{|m_VJ)kzlg;~^di<2fL@2STXjM& z!P?4U%~$Zxz*?^nD!VS%e;(FAO4zY&UaU#HAhn`3)KK|RSVQMzy#+MoxEq+AcZaOEs1*-o5|HJsjPy;^TeQ6kcKxlz zko6W@hoZ$MVvEtC;y04SZ1HoZV^2L=j(fWdZO*9ePMdAu*=ESJ3|BvWBX`0{+(9Lx zPfmhx=ux%Q#u;r|JXKNs^xD>Dn;=j0?b=EUiZv=sVvj+_QKu52=guZUVznydoK85k zqg4apDiKp+%&qFh$tw}9I-{piT$aMZ@j#Fn5k`s1ff!elEEDZ(wK&G8>2Ziz@F_K- z0^T|S?Pjbs)4@T_b%_ypU)7Y7D9P_c5(;-hW-JizRO>(?V~QwI7a%bmI4iLp|a5=HrwqHg1^D3e-Za-}F0QbA%Y7*#F>LlRtBP6G_U2(_H5FbT9I_FZpT z8a0=^^kCq0kb5cd+73cPk>H8+Hw`j2cui*egZxXR#P9NCKR}8|Is|2uo>E*BEyS}L z<~%(i?h>0s9&G^ohoRWHHA;ue*hO;DKrD-6M3~zwwqvkjGG)AgnV?*@TNzO7O~YPs z7p+rtNwn)*IWs#vQf9}u!zfYq3KDx8-3ozX)H%Qqq}`yA+^qeZvYFAzSbgVJR_PGu zbh;Kz1O%i}TLFzL( zfK~$Zt%%R0c7cXTNZI`)BZ`pXobb*rlgn1=LNw6bAQ>`_mbE|Dq!o5q=}$daCNh@^ zf8ag1T(_(jIEyWYMp%#aC>#JXsms>Aytm1&VXh$U9>xA=W4O{A!@&CdHk-MIIXHn= z4EjZM3IWM0Fh~FFFn8si%7KsWX`*?UlY7T}^vw?by<)SO3!ZsmH{ZkaYd&#LYC5DAB zM_n)0Ti*o_7DYV(ynEKuAjxh2IUuu*Ll*uWlG6dF{G8Rq-|`ofIA$tWUw`}fPd|Sk z(B-rKhX10nbOUAl{M*Oh{|nB~!M}d_`0pS8alPK2e)>R5TmJiS{t1uR=${AvbH{(~ zzy7q!D>iw>{(t5_*Sq}Z0nK?6`~Ow{tcG#zDxR^{qwOJkUTnRnXS5FO>w^6+)#ct? z>%}%7eW-!-zJ0AG4(;MicCL@9F4$jCCEA{IYqTrqu3g&((1+Dp=zS{j`WN;|nrW>a zq~EVUdkP5AeQUF6Ki<$XX0 z%+T=rU+~)=V_q=cS8mXsgIe~(@u!bhRN#J!uAw6sDH5vXvIo#oXB37_{8o0wL7}t% ziygLquXp%2jOJgNoK#p8>)#)KLL(ZG-WJXKVn|q5EUD)={%*xjniMy6LlD zjOJo`T6;|y-8p;r=564Vy=%|zNZGKgb+j#1{l03gU9h0UGQDSj%)h_TQF@Q1VwsoY(`GYTJzhImh@eJHggHa~TRva#+hZ93a+Oa zNxx|edV64XqqWw}u7PiJ&a(OYx6MDIEDmNCK-Qi6U)oY!P0Y_@>jW+cAZx81S_sJn zKWw=vc7Tw2Aat16(;oBx1uc5-2IXh}+oblnE(>p6-nXT17+=}Q{Ir(7T9DjL6_0j> zcFXDOU0u;FwRO4ovkkR5yuD+LXi>B0ecHBd+qP|;wr$(CZQHhO`?P)9*7Sq>zRx5# z^Wjc1-?ma!Yh@>E@Aa>$AN1Q3#Dn}{Q)fh07*QEwri}|M_ids+QilNm?mqDdABi6$ zO@tnE&?Jfofg-1yaB(6`OB)d(`Ob9jy~l@ZAk7fj$l^X>i`)6P6*{kM z`oOL+`(@)!b>n9z(9%arQB@;dTDR1F$h>xa`aCzWlj~o8c~p?ZOo0ef7n`lejy=ed z%)OMrZ8guzyCQZrRU_ke1{dG|8Lch}LjYJCnkzcgp9 zy`#R2GPhpdnm4c=x0V2mg6>k;26>Sdlg(2PL#`tkkhmV?HQk?va%*xL*?L&iW;uYg ztcH~S^mfJex@WtEl_b{~w@mil_gV#hAMKWFxA^Z00GWZlU}36u&b=M$N+MNtgcFOV zJe#muJZ)3U^Qjg4A9`yavH-xv6{y3sf{TCfagm7tz{SQF^z5ePq9@s2#UL=UUj&7( z3$`1H=duM-fOM{3y+FGT&RAU`i{c2kIGE4^fpT;8p$g*9MyF=nL=^M5g8XeAF%i9) zSj!tnIW->E*`$Kn&3baPgc{6(P7V{&EM_y1kxb_0>d|PhinKbv1g2DFyf8`1loPqe zW6C@e-lvg5e#iqiW)x;PU#K)$5}bM~ZC@|l9|XDJsbC^9$86i@WK*Vr`S{HB+4b`J z#PRr9O8&Slh@l+%uvo&_QT5Pr#I-w7slUR$Gy=6S)a=~!rj^q;J<^zj)r_!Bm2&x2 z2N&XgoP3D_3&m4e^DzgZq0~GqcZ#(MIU&bOMaHy!`Wk!Z)(fhC7)50{?sIqCHsG4J zDs!o?9hx(`T8Fji=<#x-cDA!velJeAsPtGZ{tBx$|D|Q5_Y12=mLBvg`dhjtqb_Xs zjs`X^Qk9vrCLnj=x&XoSMfrupa_E#e>gBO6KaefjEd{pIddNAE0rAgtDv2?hQ6 zruiDiVvzy!wsqrRA*^=vg(j-)Ora$6el-z+>$ggDUF>EXf^`~N(o$NffP0HOgJo?W zUgt1>U`zE{G}Y%|9M@rVjoP2j+nb{Sxmc}O3=fq)FsviND*2pmn>|*o*#O~Jv@g`v zJ4{{iI=5b%T`AZQwi-0ma5;PprT`$`lt}nzpxJbYzLv1|^y9wsilIr+#aLgevxp`` zo4YpN?tmSoicBiy=yt55+{tz_!w=XQZAZ>i1RpHNHJ3j#h?9*__?sZnE*5dCtMC1l z;Vo8Gp3YKf&0+rG`M8wKo)_)WkJNPCLb|&3T>uoM7$!>xS+|Pc!v4aL21I}OH-*18 zTZ=bDIXR=C=$!q&pVOCZc{_OivXN)0v5Co|Z8vQLcTmB<1FKGn@%)N9Fb1VZKeUqs zzCSdqEm*T{;)W!Naddy+!;sX9jVGUf4uh+W>S4)dE25Fix@B-uSCqA|r?0p6zDm%mL$?+Aeq zv-zkL_D3^7&4Uq-Ef0tYcBhHDWF}KqGBDo;LtC>Hb$@$BGI#MHVROPa%g3U~uh zphQISg&lA|L^zV%+3bw@t5GeBc1Rm0S5KcGj|!S*)7oW~s4*nk8{D{d>f38T9E|{A z*AAPV)=(5R5O_$j)`p}+7(OtFC??>&F;P2_0TGc`%0-)IqjA=6o#)zd(S0NP#^wYQ zE{j`uWkEY1zwLx?GRpIBJAteATvmat^v~3wv(0-CuNYQxSl#uMxYl=;qQ;Qg!d(pm zg5Xa%{z7WxUKR3##b_fesy>q7UNV56nxVqIx^Fz3C-a*9ixCT|llbgeOs3>iB320G z`zGSUIC9-Jwp!#fDDnjlr;W&D4AkpfFx0qNC_uXecNxT*9WO*-3KCk;oEQ*G2uGW`(tSf&jUSho=Z*s5L2GxYN3ftn{!vf#^Gqu0a z;ip&8A;Q%H?rTG~s!M%dXolODK5hzzDWoOlZtzbT+t`-ZpLimZG#KGGohi_SXLhZ? zPJ(WRD&Ovj76G6tCo50xztfdyvjpI5?leS*z+J31(IXmbIxxUq1@7C=)>4zChQtA0 zhAq}l7`fqRXyDKIJI6U<_$9I9i?iQ0U8pWg zUwFQo02E1w;lvCLZ^sZ6%}&uDo+0@x!e;%!6bwMQea0@gjiQz)T%u>?@_}x;kc@eI zk8j?C@e)nd*TCyUPpJ8p)y;{zSvYvomtALupJ&@T0A3z~#IrR!Xna{=Yg6K6 zd)KRf2YVd%I9DjWEQ?<2@&HHiJ5}5!T)A8Jp*j)u)P|>nya4yJ*+PaQ!G3LOf#WCg zE3*g&ErN%9@DK`cebKa|u`#0ECM4@*w*pZQlFgQ|MAs^){sn3DN8cG<&$(5w1~#eakTWn%je zTJ3*>{$*hLH|bZ=*wNP6!O++dpMm*bh}{2x|NfJC`#*sHGXD#z`ycS%f7<>pdhY)% z{Fn77)_-DrA?d^z*nUp_#q#Cl{Ref|*v9A|ei;54!#|ERe;)WZ+?V;^a9`$s!F?H+ z|1nF7KllGN84S$-VEq1^v-}$t%<^woFv~w3Kr*oW8y3v+Z+k5Nw#V`>d)oh>bC!P? z{IB8upJ2hP%p6SrJ1bawG6q}1p=(ubNyE?LK3l`DFA!M3&jt#9Eif-|XjzXS4p8*| z+iz+LZ*Tqa^zvAKVdeq0jkubLXiygw7dK}-ch;Bt+Y7g466G6fMw3sgMrbv+H~Yl6 z+ey2X_0n?CPKa%G(B&)RIS2A7^*;CO_(S&u_IrBu%t3o*bII_}z3=zvtK3UJ-q&90 z*T+$+W9_%kYeHbw`)h~JiZzElAe1Q!Nk}M3OVoYwW{r1xU%Q?!$2W05=|o-hU^yhK z!iN491nOGDRBF!!SrpcD4wPuWEEw={hT;dRu{t8M9PD(L^w9$EqKVatXuqvc1*$w9HYAR|V{XA(UI{)@U)8 z*}f^|i--%cAw+og{HY$D8Xm8F{9|x8t+q=UYD(msVM0(G&b9pEeRnf-EmQ=w!oPrf z(FijFgy#&D`+bLgo{tAjS|vUtw*0A(wL^MSeaMn$du5|%l3mF1Q)q)IpUO(zd=V2 zSA@ah7V%%7{$z#NOj$mI%#ju_ZGb(q+=Rb|PK1`Uhh1mv@<;18(V{bnBiT+mSm0T) zA=ZN{rGwr~R>ojT^7P{fOG6$B$V^Pt0_ft_8z_(NI=nCsZTIX$)%t=*T(!?)hg0K@ z0tnd#_HRy2zL1XkwcFjlQLXz7pcr!aIhWH&+dW}&lr~bdElEsbqI2(*&8we16Fi05 zoI06KD%A0fImrc5jqOO!2PFpsxAqL=eYN{luI#oZ74A6Z$#dYxB5w@uLB3W zsPBlhnXo#?N6`46G8m%go*7@VMl*+P?XO6`U7FZ_-yAQ)H@yKHZ2c(W%08`I!b+zk zJ#h4DJx?T0L~u2!mA&OB;wVgM&3ybrMsn5ZMWwF;-Xr?&VTYTjZ}!#{1m45mgY@5% zkC;j<(7%OBQuxZT@}G}=!2uhC$8T|7cPS7D&<;ejt{YO%Z{c39iM|(iDufSY17ly| zNNKdhN|8g+sLyD_cmaer#J)@sYA+-E^FMxuPo@02ORsy9Dos*F>W86`eyRcJ7F8iD zp}w11L6GPrs$!i`Y!#$(rQkeV@agUhqOr_n?4)bG^nS&yr?btf5k6oE6TVK^XCTzz z5~w$rOGpSCYbHfBpmLfWA<#%GG|K)*9^|!BCmh`HDP_R9i604HTHhVG`fC)u~BqTN}(NG(-5#J)NrG zmC}K%2<0nWv)Th@Fxq zp*zUgIoU}}IGO!C3sW`2^r(Xw2#24fn_k6no7s#LLUL?6-9^@+wda$oqP$&aVud9-h)~1E_!;Fd{-2)yzE0sT4JWLyhS@?Rr#-|h$6qSgUZTKY#Bv)!4)dnYKP~Zzz7Tg#3MfRgV+t3Xulw2Q3x<)D2jzJ zV3Uwl5t3K5qlXA;RU%J zF71gdSF;CVeff}|bmUC#gAp*=QJd30iybFywExT57aam&>*O%CY*=OXTj~(Z8CyM; z=q6dA(NHGf@|lRPQp&E&Nio~jaH0%JWpJlFphOk1jk|6C{tz-nSn8ndq#aFvq`kr_ z4UEjs)h@4BSqf|6oGVx$*4I@GMONrZBuXNrA}e&riGz?L$S~KLU-PiQVJsZ_TtQz% zOD0Px2ioj?E0(Pd!e`N(OgV1Z^LX)B-28d6s)~LZsYp-iX+ZCk1(W94qf)(3Nbjgi zN5XnT?3`qcq-26)UrYD~GP1%c<^#ObnOQU8UgjvnZDq;8t3HDeCljJ6E+??}w>Sq? zUa0hjX4LDg>j zd}SjBIW4&q?21~a6;qOqx@I}>TskNQm5@K~uzrY3Tn(vRwQXE~->rYh+qz(#V6Bkf`Stw+go{EgF3 zN2x8#zXBm+Z=G_-6<6>v6Z?8*jKis~IQ>uts|m^HnWreIz~(K>v0WjE2DKQ?uy+g1 z89q1D^w%INS)|j`(oFsa+^>xDMDgX65P#=HxZk4*Mo{_MF+d%s<0#7gBMWcMYZx=o zyxcfE0alHfn8hy(BKD@wh;C_y;F9$YG%QB$K7J1liI4`@w}8({PZu^Ru_*QrIpJa4 zV%@b8bCNIB$%kmN5SO3*QsU6V|uA?Kfztest&`gQ_-@-Jt=pi&%Seqo6=Q^$5@b0U6H(-}w!vak{!07md^ zzg&2Hp)VFdYJ2zy4{<+nOWVQ{1ij)*(sLw0>H<hlb*>=ozDC9AG7p zfxR(Au{CtlPDO=5XjG4fK);S>84;+e*aO5e!n0#nw)~3Pw55%-8tAHF>AzUG1}pBIpbVNKwbSKWnJk3S>D@H;)>uj!HRtkGH|~W>9U=M_ zPLk50X;w~z1}rp}drPOnLy)?hYeu<91gN9*ZV&fCeZos8!p&~!(Zf=Y90*DbF=3e5 z=#SKE<$dNdqFXH*8nJ5S^Wp8;5x&A}14UMHAOrkfa#O2UlJ&|`6s*I@>wkr14~xst zc`8+atsslYsLT->!vU3kIzBye^xIIzu*Cb<1%+%#C`qelg|Tq<>rjp;oUEJz4@tR9 z!}h7K4&FAf6&pv_X)sggiiOh4=pDP`fxTOJ3Pb362-K4m0;icl7uQB5WK5j&`{Q*ib3483CLDvXyaGMA<0e#29JFYmZF${WZ9krE59!XJvn= z@X*Qxgs$@JPa>v$<1f<@U3ca@ zirv34>wAyCa%jw<9H4Bh{}>(>61HGx*feShe+6IbK&6IqRtDwDmfT-*(M{VK79|A2ak<9SaTTvJ$APhzw!W=RAH zQ*PuF!F}pjL6ct5F!PKre(~6bo}!NvmJ}bR7 zRTe^KCrG-_>P3j{QH}IZkync+R_<`V`7uYj0Sd2p6^S_CQ?O7b3@h0rYk^UI?JjZ4 z(^iyhb!^}XSy_2LeaQ&uwG-gLHPJ2h7+3Zi0x>$yubnWUsOy9Mg41P;dH8@-(Z1j} z8-y|6fm9hz7TBg9ye7we8fL9SJpKU@vp*mSpF(b2#~b&Xq<%|ALGf`7Rc74$J*d&* zOfi)0+k5L|rjwRIhwbKp4Q(F3TVVGW4)%K@*4AQ%7V{;ooj1Ws!J}5&#SBs%;4|0N zfrmUg!mJ{_&xd&ro2+@;tC~0{*(B?6C@L+m9+#6<*OL~q z>aE3o8y(3GDhF(PUW!Hie5d0E?gm;W1YX^3Deh9mx4+6aVaVIw~g16#?aZ5uf%jMB5 z9^h8Vxz+!jF%?_^Zl;imOo9S3n18XFb?D$gkK?eu&PB$Czq=W22j{rklsaHDt$_u$ zb;(=825UBzy{_iT`W_8?$#!>G<-K@#LIm3(MD^k%#I-W9-{?`pATl$L?wn z%%gMCyK*qTiF>PiaJTvjHxB4nX8I9|a>lCn_XZDeFGrbc>a0fME$n-v^fKpGx3FC8 zwH6Z6UO2q-aW4MgV|0pKJVUwVpjXsJ?1gS7bUb`qx!>2i7;yNYv8E2pnbII(ZAkig zi28GIRL#G5duuWbL*uGy;Bi%K7)-F8bTd&;L7cnFfypo1xTWz_)iCbvEh(wL7onCqi5|zwah=ynVhyl{3rXb|fgW01+&zF@htn6wMKl zbYGuC-`?C0I#|;Mh@@|gM5SU9yL#`va+2V2-{E_oJABlMtf6 zN0edOp9?|BHm|xrrDR8Sk|KY268KOvnhiMPBBEKOq>=P!(O5`&l$d|!=dHN2Q+()%xHmHb)K{P^0NOUyZ>VO0SEN!v>QyaWWXce9 zC;wHTCi)Z14C?3lt==xfVsZh$zaIn%N>|TH_)DjS$Rt}@VXIMmA-x&p7f*|m*@5wZ z8Dzgoi;+R83=KUfj$yw`nUFbFsxAr;pGUUV2*<|N*WBhT|n`PZL}Hgh7|GK$8h#YbWT%~qncUm z5?ZRV+flm2+qt2o1!ATS*r~=e(bYQA67lvhH(SW_Me0eAgm%prs+n7+VJKe|&}(6D zs?ijp24GYsKR+if)QO<8v7DN`E2A*N-9Ih(M>51bWv7%aC=A;r^+xI0KR>dNo-2Ns z_m}5_Suwdzp4DMt%?!gSkpUWbNK0b_NldZXRX|Fw5loGPCFJ%fLkk8<)wGby7QcOn z7*v*C_+e@;14UZ10G%z1IrM&jYt(=Ihqcfv6tQ-*9fFyUD7n2ov(6!jUb+sc{EHhK zhYLBXY>7C4OEf-M4}y(*_jf0F-9~a)Y8`A1TB4`Ihr!2mAxkQ&A7|gwtmFgtBPp)- zTwCKu9ngF!;XJLbNL?wihQ33JH-;`}eB4Ws$DNM#39bU+1k|m>EJ>x%cJzIW@KPCg z$C&WE)*5QEQKhEPXT5Lo84lqN2CWPw--va?it7YDifI{Jz}0oj3W2bmBXRHJie{1u>yKv%R-% z-xKKwQlk8lQs15N{Z3c=g9maso2wwJdx`rILnmPPc{cO2&Ha5N_rm4#wfK77Ve=B8 zdr^9S^3DByVEP&8_3CFBOEr5s59#n8=euV(a)fl4_Bv`lc!9MlcjC+A`(^4&x`V(& zy1y=5HJfFB$-Jjx<$GgJmYu`WE5^xv25c;uItZox^m6$~pSR#hMST<~dV7p7|$rT^;W;pwy+&MfMhhya) zc8YQKcHk7O3;n9*L24$mvv3x2JLHxQ4i_LGY+nmwZii7AwevUA=Z)63QfC&v69KUi zJ700)&P8S?WJR3Mri80NB9gY^!e21c=IkSX2sO!3$(rpP5SI00Q|G%4*Ci?ZgEGUI z`mNQ|Hrjc>+k~2phAzDV;d{&Luzg%t5+boTQF820?16J%g*_5CAFIwaZ^OvN2h}JQ z?rE0O(Bzlo!K0}7+hr|I?X**k1TXOXjg27vXxH>2yzg(9YaTmX{$E;`X+jEux-X=p zztmqi?Y>^Fcl)28$%1{w4jB&u?M}XGDj3QUVk$!&1JZ=0qv}+T`3_vA8SQmeTf@I@ zeSg&>52gG!G8xPNKqh1Pmq_#p-RS>`O!m(h{wsi^_vD6YaIoB6zOU-^))7Nl)Yf$5N zfIUd`ezefK;$mDn;HE}ZC*MFmI*jQ3RTF<}IJb#v(XJj(oqBOF#`WmMK?D0gCLeQa zeA{6+CuhE~YBc$}E`?TgecNXy-xi#=H|nlo4*YF$La*Msc|9f8a%;aoTvxx_Ts~}f zN>jbtZIt9jSHJH|FZk|5cfSW~KOZ-1S9iXiFIqPwyw^p5sS7MB(CI4Ex~=>>MEy9= zOh&)FJ~?z8&U8ZJ)mD8+Y})Q7di|;#*<>^4UpwEhwzudHHtAM-zr&B~4BI{)t~eL4 zzTa`aVUdWsz8)qYpM5XcMDG`8SHA@-t1m`g;Z}3MKHp;bFhVV_pY%Sj{%WK7s(B19 z^itz!wRul}*P+p9uig`u;XQcrwd9Uo!J*ygyj-?@a(_lP+h>_dC7N5@G?nCHK>1c` z%Y1QOpPxK+guCF>Qfx<0;?;cLzb*QHvjdITduybZI>JuLRz&l{0ca8b$kXutR^w1W|OvPMdPmC_xv_@;A)~rU_@&YU0O)|`;0A0{!#Zc8N z?kg_>Df;ber~lK8C*IYPg70laQ?2Qo6#efY(U>% zq_4GeQ77%DBb8d~nvN_1V4z0Yr9o0Q84}*xRFQn)xo{{)CDTk*5e+LJo9NaDr(r$R zaptvc+%jszx!3W=K7el=2egbVr|l?3T|44~bcNq+kWcB5mrkr0(C+gkF{XC zMisIQGletw+jK~yk23~kY%q#d#2VGSZj>1MlRL&E^_kk};Crc6ml%4n=@Ky{Phnv0 ztR6kY&z@g5h&f3&lR52IxrB)(O2KsoG=~ckr!h8$^(RteeJ{Nk{yb^*dK$E|tGeey zC(TLPTgdl5QY+0`H2lFeTBh`1*KD9M)iuJg!F>ssM?cU{kN4@#YJDoY9F1C)Qne~r zJ63D$hc37wC&T5>ShIoiNfI$Y zzCRY?4iP|$!hE%ct{AvWK`N7JH@;d(E&eOvp9(T&=K>jZ<`;NNK@W!+@b8}jGHGas zp)C5#jM9f>W&_+)vF3tIkqbc%ZoEQBI*~JHjU3h)^w+mj2qs}=MU-9A%Uhaw57X^+$1%VYA7lk#tz0CT{F&e!-<^vX*a5{e1w2f$ShvVC! z!1$qmZB?O#^m+GENxc@xJ~Zco{<>Sn1_I`|vI1)epipxK@1ZCoMG-FIUdt30|0-y= z6@JkPmr_=%u8`Y@vb9<)R@@YQn(^)=ySGj~O(3LsTo1~>#Dh%CiM`t)_&kzq3ak^? zpNa79-I`B-@5;aL zu|8)qNwc3>tU9%Y++%Nvxm+v2sSYcAXfy&+)jS0=(pZn*2+8<`uroA;{B%IPlR};l z=T4Y)h($#xBM8p(>asnkaF-6jGCwAyidviLNyr6=yu45G6pS+|{GN*Vj@WW_xg4Ys zG?jgw^G7MXAbCtz0NK*;Sxs{}ElZTTHQQx?T1&}ub)YFO2EI^09O46)~ zxcBg(7>=QwHQv&bsPkxW9#8!NVb1+Z%thBK+XwW}Qg=@UVT9h7_$5Up_I0xznYHn` zqQrbshcYs2^~kQt(10Y#MpgP13QfH;!kw%z5lA61QIHId(pbfqE?fEp9?FVhruRuG z=3nsfWjvx6qy$TK2n3O9_Jts76j29=Akb8PC{`8DU=4A~5Je+l;xvmmYX{F^#NHE? zDH$SmL4*^nDBK7GqfcCRO+ea#xHpjB+Ro&pKn;{`q{8}G(fV4*5mxm$`tLENlS{6bgcp`U>tMRo&s1IwNe{6 zhq|}&v;=8meyG0b8R|0e%CV6Eo`+UDzDuK8+*cq$R3VoD<$?7oddj3axHG5h>G*jA z2P84h=(^pwMx8&|T7@ec$h!v5KNlj+6*`<>7b1PLJ?bm+(-P9@JWyqib29n>XyVVO9bvp-dw zL4Zn4+Ub&LJQ8;TGNv7nYa!Lpb;JK8tZ)a0{~83G~JCk!r8DcmH&p61!rS`{K~}}^b79E^ zPNs^nHN4K7aT)4?6G3HALIt8bviiFqvHhwnl0H9v za9GLwx#Pb^+-1`rl|W%9NZmQg1wcE@W$2yrp*1b!0V}4U=w{>a3mE}vNd&-*jle8( z2?RrV9-=l%3W`B~s{5pv$)(^7Q|9IzLheb;(*md;40+Z{pvi#IIbKWM@MTgIf{4LB zBy{1=qy25+p=MPFesbA>UiKquKGqF>n%C-FqH|9KhlT1;fJ8Y2$iDT1_)_o*aWfg? zq|#%nI4N&S3i6pPcNK#io?Y9d)3NK-gP$(lHwOAW?%ho0t*>V%V05w(#xHB0YN!@G zALIu=S)zjzlzxU+>*^TK4C$x>K3uBa66yRbgxUXGfq1@o&s1zg58vJRHqed5x(DghH++_ga{8O{Yz(!?N+RCeuG z3)6%I&@{$emGK>4f*`xPY5_M1`IP*Zog~I5S&foa>P`hPqK99wl>)s&{wf7#+^8H8 zO&;17s2$EWTL)Cg+AMzg&p9a>)2f&C(-(27(N^3F!$fp=OzeoiLdt|{TU;<{Wq~c{ zdHpRUbE^g2{&X8ds?&!iXqUwjL~gpP*WoMPyT2hq3n43L3Ajme-=zY9okiRj8ZgvycLI4~EW;W%Zj z?4&HM;KWl^*H9JISE0NpSGW(3A(Ln+v;jyxhqGW>rL{modtKZt z;oVX%hAKhM?tU>KStGF*FY8J}Bd&FC1}84@yPSalC!VT#_)T$3+|L-~i~))UqP_}$ z)5iUm zBz(wX7?mm@vtXB_Q&j-_%7}zsG38QVWQD41nNuU6pr9B1RA%ny5<#GPMo13Sh?xt- zPYXAR@`QyZ{A9Pk*d``YAaA~sXc^y>|2vJA4;T_R2D+|N~z za@7c0ZH^OzPhHFbSW{0q0VpHC730id3lop@Bm_pp0a-Bp69S?dBaYWRs3inUIIa$t zR|@wv>M0QOb1oeZs|_OdgP#CrA4OJNtkax98CqZE@- zsSc3m7=f!42kIuMH=QPjR7c@wLhk036uN2BNk5b$-5-`Kq5j2C>AL zJEh=c)!7;BKq56CO0?+=3Wp8vE|F{xWRtp16PP#B)>pa*GGwcSx0!iS2y+oR|Mj96 z>IDp5QnZ zT!qSs7;8QCL=VBEg}FN-@o^77*7}g~2(L+pEs^9@(BN|mf8=JQ$1cYzE)f&T?b%q(5Y={gD&>b4VfX#IM=o}aQ+)P>?AL0vk!`&n)*DQasXBG zZf=ZfCu&oi0yY^VA_mKz&7#q!9^hjNxCIV1f@*k^_?{AOw6`iizqb~SO|j`R)N&Bv zDN$S@l(ri@pU~1MO-`51R|$muJjVK{87;UkE!T8nw>b52GiTSazQI*BR#s(qE{l?* z)Wh!nE1%HrEO|&@_bpsd+w`(Y&AVtTr{1Ye|BSvN2h74CyGM~)`!)8?nl%y6=uDiV z^&w|yfna$p6O77;4bzuG*hT54CIx^SISZ@GA)ANk*_}5-AtS`zWM_i!z7Ygb?#L&r z(@=ZpcijzrM5bh*^2`BetIEjxJY>M?rbDzu6zkuGr>X?5ePyEg5~Px^ELBL5DTlT; z5kb2eB1AhJnqtMxOOi9cfa+q|^s7kfkEz8FV1X1a4N>aD-p@MQ+8J&<| zClJ-phH-Xs@?-5$xKC0`9wrZmF#2nlK+Pf8UbVxYU-bDAW2&43_QVtZk#WD^hH!Pu zUx2ET8ifd>ZflnMSvYnYnOV)o3Yb)U5^P#_8{pylDG(U-rrcnxHju24nW^V0VqhML=bKFYFK|&?Z;UZ*pK4ZDegw!Evf27BgQ#)VJG_ zGfsdjPbHZ3E6!&hed67L(UcGoDt*x6NC-ef8C^CE4&8{+-%Jaj;5uBipCiuZTvTXi zdy?6)(2KrTrrHYBPq{T-lvgZ_21s6}l{MZUU(C3tn#%H#2STLD(gCTP=~|?P9}+^3 z)c-*R9E3s+7`W;QYBVpMRRd~ zbTzDcNk`LIHeEBD#{5&vo8fudLd&VyJqoOd$)@AONKl$(obCdyS8xP#SB*O{GDb{( z$?dohCyscYIerBfwpG5z?YLpN&TX_V@+=FfoG;_XRJyoNa8}6xTJj~2A-{>g=+Ku`@9Kl%leEFu}hO$Q9bF-45jcE=JZpUXYkc1b(Aq9 z?cEU;k^@@wmtzL=V>u`@k(b5jZO3B6b*g5mv7pEl(6@r_IyZ;%P|yUuRt}EuwLIQi zCI{Px3?EeH;Z!B9qrHa-k0$oVAk#7YZL8}}@_W&W?dtdA1=40~;QphvA%!k&sW`~SDi_>MH$X&scNm)CtLvK*Mpl~cm#RhH zsy|Qfo|Vzl5bszKLiK1koo7VLj1+^D=6x}Ghb^gIZ$#cGWzhsHpJdCTpm@ff*1lt4 z(?bMlL-K+udZR~)=|V!5TU~W*;jKYEcB|pk$IaGMYP39~0lNg1vj?2zsKzPgth#f} zJ<@u*p^UBZ@Eo$FBJ{OoW62#7j7GOf=f+O_j+d8q+0vQr<`CKAX41xOJtgs3z36WX zPuug0!fD82{ZJQ{`k(4y7*^Mu=s7AE$W=0Gua*$fEnH&p!Qx)R&-CK6XlZ-9OR?x+ z4y>8g%;h*Ri0a_WpEljjn!?5Y&MPAcs-+5Vkd--zQJt@_ zy(7=0VdjvCmJj2>@>-=v$HVE{F_*joiO{PB{P&_lT=+X;Bb-*h0ElLqcnLdO!-+f~fvbaA%a)eXs^>dCCAtT)Ga zkB=h(9|eejoJw-g?<9k6^$`{ch?^b&)g8-Qu*FyEjYZ;7(9CRj{@P+}IA~C{`j%iQ zc>9*b-i8mr$g+A!ge8Ain$b_lA*8Xv_kI^_Zbf6Iohu4j@DBtb_#FE3B}LqQhO`3} zoH8sJ*$~t!FbI+(EkH+->@vXLoLZ|+e(b5!AQiag2SVpE2uP1BPJ?>40|c?gM~jP| z(40wN)avOI2leRoOX~Nlb7dw?B5;M&esN4@ z&=W2#qejUB!cP)fFCN&L{Ke?-DP3Ec_-m!|&{%p&rP?D#VZjMBz%0qUwWkV2V2BcX zo)&oQy&)h&Wy(y+3|yh9CrUAnu%@Y@KS*9v&Uj2ubJ80AF#8L(}k+IF5C|=BCx+s=9u^(t5n|`w%fOV4?T(KbbMCP^tQXV z0L0hZmC9}66Vh-}MwnW43ih@nTF-_xG`K55S$@*#84ni8C|~7^#M4c;FpIHK_(E%u zf5*FHxu&Hi`3^?hi7^pZogxz?BJx%4APk&{V^d7%t_dEhO3F}P68aTtX`~dqk5`(4 z)G;9{Cgsyh>byCYya(F_9aqnhy?JXtPg9G|e{O-}Pek*^^{`%18)cOt{AOu`cR1{h z)&S~Z5NQFxQ#H5HIT$X$##4S{8vRr57^jgNjj$&GxYl8hO)G7b@K>sf8BQ3Yk0^x! z4h>qzq{L4?Qoaj%#Q(I9TbVCHK6_9qaOwlIuJR&{xS2lhXLkhDS*eOAFj_TV(qdF( z{nXXdRY^P`i=Te+RnQ9_zvMpnMP4CX1OU=8Bq#$LYEt^ASX$>NKRI&%<@geesd%?U zJS@p4UF>4a&o)d`+Ld`>D?}ccbO@x>`R~55x5P=IbSC)1gp&`F68w)ztuz6HF_l9o zLo0-}3i7VP3w2I>kt3*k5Kz)Zs=OMN#u@*n@egalacn^07xj~Y zSxDU2`?JBBcWo93A#8V{zVQ)G&s%G`mx&N&YxBjK8lIFE#BqB$ti*>OYJ``PeVAMe zjLb%9v9>Ct*PQ(&A`-&c^lN>KriAhct2!3-W>0fJX~p&Ld9_9YxobHc7}9e~i&o8K zv3*_rgRO=fkeiumta1f)9ND8cm{w;I1P7>k1Fp%4MEEMr0d`8mK>fa%oZ?*$8BGl@ zLC~K3v1>0PNu64F#AJ5*O^y)(IV?tNFIb_l28<=6_1C!!Kl5TfU#nCiDywyNtt(I2 zaq?25v5amhgCp(Q3_R1pn-o7IRgzb`>1cLWRl?%A#&~^Xu=@Gq`jIF z^8CX>2+e3?^a_$xi;mOB0$$82^a7IzfFxe_a_)~7P{ogMtee6ReFfMJmXsKv1P!L& zq*02dPizg3?sy9@xD5-VbWUqb9y)Noy+-Mt8x^u+@0fhpmkau59+Vlw-1g+Kh7y57 zQhtr%D5~;t<>WEDa6^JKv^(1tZUZ4>j_|cS&+&pyTm|{(UfFUw>&Y4LT{Puq37$Sz zG`}_$cg~lR-NUm;ic!aI#&~MRiV~w749!s$(-}C0w%O;c3$_p$K!LP6Ho;*dgeu5_ za)*LwI$}yrGY^&Doyl4c%eDX3}*dUB4irpczGZi!TH+@~0YZQA!g?Y-bcXB73!(w2?VJkVZdPm)BMDnb z(**E3m>Vs$bqw^Dp*Sh}O~Ux_BV}_xL%qqd``E{m`+51!p zM4n(&e$LKd|4UJd%nByXHnx9cP*XQpyi$-WUpqAR-l&U}-+~DuflWhKq-=0SI9Y`y z9p3V6EMy}vM`RccznjnBMZgn-84mh(2+a6aPpnciqXHy9Dbn^0)l9+6K@w8YF*prp zyM#$|`!gA9;}#YP*8o57&maVLYvlygvZPgD~#!Q_SL5}kBk%f9sRSh%}*D- zaGPWZWs2`%DTDhm;z`>@uv|oLTB+OIs8)vV$mkYYpES6W>lr^{O@Gp*&@;GM-VmP} zsQr0iZFydD^2WB2gM*oRBjc1mv^yTp0>}&+g%I&p>#;)uq9Vr6c-qVrtkvJIi^fK* z#ddWnTTgCeBp&V-64Gxt9PtZ^8Vk;ecWsEB)s6%>E^XpU0$81GJIX~9y&45k1zi=$ zH5{evcHxmfeK)a6Y7@%=eYV_O1}nfI99*T)G?4D8FXu!S28^qiP-z^^@aUMeNk}{c zw(NJto)AWX|>+-;v^8;)uhnMKK*)_`PX&$ zXXf{b&)RVq?fJ|;bAUu(((wDFYqM>_7L>2G z#6;a2i^q$JL0DWOX$%UzB^TXAxkMblexD1BpN(o9v1E~an>5=KQ^lP?kQ*HqRCyB% z1rrrTepiRImkTMX^NncJVlGfNO4yo6ge0H*<>BPS=YSWzkVK#(CN>E*aJaQT`M^7+ z&3~trwfhSSe-tP0QCs2Msue^$)1OE>FG4F;8;^Iu6xi^yUr4t39JIk+V%pj4`&)EZ0x9#Y^+i)Vbrk}_mSO6(`89zj4v3^AJ;r%@%%zzLa_xT>pJOO2# zph$2h?CL4AiEF#frz2rd%AWZI8buz1wG8ph1l1bGkNL&F9iQAY?(Q;4^NQc!~-L-mJDaA@IOs)D7cIs0(Jsc&#W^ ziE0SSiQYABqNhO#P{GK;!J0_p5DB5B9F#UPqG6tlNOHBn@lV!qXgch@^yu{-%y3=u z;MV^`wd>D2A>5>qqjl@P+YO%xuK#L|;>Ai(71unuS)RePlC5)J(r7@Ot)BzBvT}18 z^`w(3oF?P-9Vpf{T47a;9n}WZc469nFSLnJ6=lxIy8nXWTA3a;_-EIdYrJ-FsFjx> z(}TLrZOeL>BRdR#POF&{$tgOb01!XO;+bTHo+y@wFii~FY$GFOWwNeeqfhIiQ2BkK z(%CmcPVH8vmT**6^G~bYrs+_XpmvO98^8JiMwmyY=HODupZ9_nb z9G%yLUv4&HFyAka#7J9h1yem=DjW|&xHPiw@)u!hj)@50=S0=9@in)T%N>F4MSpkM z2IE)!3L<2j1ld{q=wMV^q=gtp%!o7_Rn#pGXTgR}LnZ6q`BtR}8{_TqI)BSZyqk`D zqfZ;swg4zWx$FR&MoERvK6g_;Nt)gS5 z+cR-?q92_)CgDURo=E$*FmN%+luFCIQ8pLz7>#0CdtCqMq$8v%tPC2Tm3U{RSSooe zL3f-C)cjFVuf+_Fj|idjw{L}nI#)(Rlu2QXJc#1!{PAlp>ZiICE?X+T zk@4^!!@IYAFDmCr3V=u4tJn`ksXdhUlu>*%KWQa~!_Id7AZ%izUwNP+9jfo^WV+EB%bK@p+^?Z~&$P?oBIoeQiChExyhVAuB}6FWwZ z+8CAa!$8-*M;Y`n691~+8HxfmD{z@r%Ap7FG}kf2P`u+5Wlb`B$ujtUufR@eNlIjq z`ez&7t3tafH6JmWskcNvASpuwPi8p`yUCkPXAR}j%to+|to%?oH;NzGzS8DX{<=wtitLArG!i=!zItkhT&K{1(9#iAc_EUH$jpSow)N^tYEj5?=U+2 z4ewxCKPQkTX)v45tvN*lUxk{jEAFI{N&b&y7YBPe-bOV5GBECNscBs^XtsLgNRgR&QuNx*{RxbP zuJ)Y9dr4c}RMQZIa8m9ap!&tKf1|9-CroGCsV#$0E9Wre0GpJxIf!G+xfec(p$|N! zM4y$W3mZI_3#RAh;AE}T0Vs(bZGgBK&JE?IOZfNwk9UcuB|`EF z0&*qKmOun6_(N2O;(|>?7fvdB1#i-X#JvaP_Pe7$6iAK_`W{X> z#3{m5eG%@;v9f~XkD8EhP|EMcBWFb{>-6D!&Tk@5+Yizl z@aD`h4o=wmSr%A@SGY_)db?%4d2HKVQ?eR1N<*@O2WpW!EqLPB4sFh_Z24AZng{o( zw0v|-`3@zrjK-q2`nf5pZ)LAu zIm&Ew=^4dCn(FCT@OzIl)7-h!z}A;G0b(D;gZdB^mDjQrnAb1JN(8^lrY1weV_gTA zq=CLj%H6Y~kYc9gyeTuc7OG~|Vp6A`?rPN{wBlinxIWdbA-7s|oL$JwghHPs;HxYy z?zQ^9VQo`8N&J@%H5Vzc=p3roD<)X!Oc}LPzzndjAqxPv%3IqV1LWDy*K7?G*Y60q z?((2=!pe4nmqE*1^7U=iuPmiJgG>(0=|`MdS^Lj_-KTW_Sw);%N>onuwt%56YwG6A zSvZ_T>gG=!={pP54k$OOU>BUV8uXhiT*AK3aQs)9N_V%ba-jth+-UqW#BDDTpT#0V zV3|00;`&8byCDS_xAQikrl!3k4s(Z6q1bgCV3}`Jv~pG|Rbz-6kW#@U z{nS;DB4?DeM7ErCLNxMjexe_JeO}BcdG~1kr{7(~iSfP)0G84@b(9;fhp!JBu>?aw z{lS&3wbVJv8wMpWp#^|7~T0^w4K}<}8 zG#~wqo>bTfX&u+i;uR>ZV#y&t0Q*e{)||_)K>k+j+vK{Vd7Stv+bB$Pmtys86T380 zSwsY5-JS>3Yf@p6hqrho-a*LFscp@9vp(5#x)741mL098*7t@9>(NAQ?}SY8;Zcb8 z5(ad~()!0nEtJ)sG^Im2fqsm*_8MblDFX!4Z@*0xM*T-e%0df^NMxUEu{|SrTW$u~ z^)sqUbnKpAb8g0qf&I*LtuZr7w=&)TXKd8X1f->yEaq$DD-1sHqcD%k#5W9k_}56mx~vVMX|$4hmq>zjQED zkqHuPieX(8SbE=*MTPLvj;A~)Z5RqF9S#|38tUSc(>O1D{Y2~Md%&zth55wENx*A- zU9guQ^q`4(JB9*%#M1o(sinCiXjN9cwaYW1X@?I=RXFvOKNCy2QuUhfhOmXjlZjdp6`A38zv$yJFxum+f#KM@u#5 z-i=2^iILZO_Hr~|EctlQ2usm|AE-$z;S5ChE$tQnkVwaipBiyLS1nh)cD7bg=(5e7 zgo6YZD8&$+hWrDCAV+6~&UTkTt3V&?cSgOH(yoIH`>R?=di=GIWFEJZvH&rV!K-~& zf-*{IfsY2~k@jobh%IDP+SmJDowmWzOl1mQ9EtlgCwdz_HM=7QrA1hV@qHpZ-M&y==U9@4u!)f7cL9clAECUqKoE6+pn zef0idA?0g$QS2#eKle&1Z3kRHqJYSX%oCfuQc7M?O2$OZex|6q`@A`+X8w8nyhz!- z(fxcJiGHLbs|%o>Q@DbX}=+EQzlXryl2H|2xm4p5{)ecv@J4& zEY~6^_C|53YrDCI*GGO=>1_&EMV+^-8bxWOQH8X;9y#tN4ao(`zc9n&fG! z`gSAI3OrHdNWtPBhpxr;skVHG>m#rxqkLRY!aAu5@46e3X!WPGGfT_4hs&Blzh|3< z93gUVa9ebyXac?KGK$wG?y^JlMuZ0A6z7sDA!myQV||l#zd@VqCPre1g>ab7_-!Kj z&{nlti>sbf?&Riam7AOrapacQU6#U`09?h2%}VE%`iFtoW1hWs#?xwetOeUkyhuB! zSF7m#lkHb2rhqdU^GLWVYFXfv;Y&hgm>`6ee2zia{sYOtn}Sn2JtAqY^0!jrk{ZXo zd21-k(+w!uNJ%;`QrL?u#%E~V2%_kD2*FP!DhNvS%Zcb=PAmd~Q}y};ayN&EXr-OKKf+$Tphi5Ji|q+6r3(GGl&>E+ z_NI^``E;^6H+fe|#Vhm*ZF05mZ^VLY1Kxp}l+9t48LB${?(Z%591kw#doB#5Im~~4E1@8J3j6blx3`{5cBiBdm=MNwzelp~QVz7r5k+Tp6D|6_ zhdSOT?h`BKP$-c)n~du?SypVOfJN% zzU5;~_OyFp(BN!S^eQ3Nw0RIZs=uRbh)qtw2@ zZeM*^{^qmMiZXn4VfiPqPLzQjkDm1}qfq~FRZUjk+{obXONdx~`Ns0MK<9tr;Qk8O zKf?2cgJb?#G_TR2Ut7U0_=^f4czc(1r@&{`_BN1<2l+peOZ#kGX_{X82uG0 zDI;qWM^ij{Mwb7f(UFdpgaYP=7ktbnK&ve-Z+`*b6F^u7`TjF^E{Lvwlw)qLp*yyCajd7Ax!-gmCXPvVI|Edh~G ziE*=K)J#uGx`uwN!R`cp@md&NI_)I%^_Bk> z-~a2J{zr2BcXIuA3jHG#|E9V6E3f}$b*O2;u_v(N8^p7n6*XL#M81ZQNEgg;Q zt-l669<7j(vzdXBf~WuY^d4VuQnEV~VvnYWgTEwNR$@A&UU_Fyn#_hLHpYG4MZJ%iv`8$cZ`be4} z)3VdGASng6kCjeD?GhSy-}bVU_K0!=;+tpkeq#NhuG{uokf6ZBmz{@?>EG0{o5Yu; zLU|r~tdh~~pq}w$Z|UZ%H1dgkJof!fpx#hV-dNC})6iOf?8JAz;~LQD8$*!~cEV9r zXdrz2?&t-9w)(0B`>^Z_F*$Wj(c+|xpmAW;P>HqS@HC*kVHNiYo)U>^{!q=0ZZN%f zhp_P~|4Lb;udyTQJ5x6F=LD>~xpL+Z^9grC8r2t<@N`XCGgBJq3gjo{I#NUL&dGe^ znjun6=8|!Cz&p>1D%upG{-w;0O$BsYL9hQY+M+nWs(YwdxG5Lq%O?1SO~!YGfO|0{ z;_RQ`KY@6vJ619D4&t}$l1qX%_t~q8207v+Urt^B)c#hay=JyH6w>MY>^MBaa#OD~ zKM7}2KOhglMScui#^JJUag8@YOXNikZ^HTZu; zYwd!&IjNXJOkboD zN!V0vFaNH5&#%_;+Fv?k)V(wxs;*l^s~(}rFBoAi60A~5X)dREAy$&jB^fvyL_A%T$FZrft_>*2nz1~zxT_m8O|GEq>V^{d z_F;Z06Fm*rxVO(c{25*|#2e~^{VC|K`J&X0=SAX0<0TsIDBn)xMeRkHmC_Bd*K*a? z(WyC$c5-awHhVEM{!p)~li0zYBBx=5&B z1HSR$X8KT2CS(H3#qd*H6tPg~L0E)PFm3>tb;iYz*0TWp&yxMKxTj{QLb22M5@mV? z%*ehh1*GR`YkXDtD|li)fGm4L-tyAcBQ512;YlXkO{fKW>yftc)_mfKN7C`P&7Uoc z)gud`W9Ye<>(s!WR1x4=~j~DcbMDH683~nKc8UN0B?9=*iGx+4v-3QVag=!_dX{o!M$XcNQPw=rH0104bI9)lN4Hb(_G%y4ln<#CpKt2L z6Li%q(>ABFErU;Qhi?_K$9^nNS6CmHqDM|IcZY8mHLuz1o-ey^ImbTTTESmi_pq=p zk4#>oKe9g9qrqN#OuRq(ye}_Yqzuw~3=$vCCgip;kFKUaoj&exk9}SZBb2~R3rcx6 zVICbBH>|t4w1cDRb8JSqsLklia(76N_5$8AvjMMQVAm z%btC@vk7bHg-MelE!G2j4uL;0`Lp?9#OdJAb3OO{`5BTd^+Mruz~sB9arUOsi7^Pv z(U|7h0$Y`3T3bNMYZX%c^gb1ocDCB*A(u7gx-DX@Wr})@mFxsZWd(O5zW6lKIpd=u z@i|do9(}XGN7!S#n=58}cL}v7;>AfX-sD}Qb7yb-V28(~N2yxm9+6>(lmSdq@lgqM z{wT@s1%zKU3v0zxhI@-5X!z?!S+XKBq+5-A=g<9$6A4Iaqg*q=PYhDfi5JK6??d{K z8B1nM486fdyR^5XWQ_Wi*Uwbs5Am)%%5hmkw*=(V3QT`IFR{QD2m)=skL(NRMh)`s zRK0Kox2IdyHm98ydzc1feQ1?}tS3h?EJx{AT4EVZYyN5;nxrw{8eou_-hOARCOvkY zrm^y~QV;G&7-+sue8LD0NqLp;AQ%j^(|xV0uWIItBTBLg(OaiqVF78n=x>OOyC~Y) zU41UoBx!EBkQn~Gajb>KNUyW7|0f z-HmXsq+3(8bD+^67S$+ZEf%_0iM6>|R&WKf@CqEFDy%92-N!5a+Z{~CSaXDHxhA_o z+ES6p1^RD>zG>iOKq+6gF_+??@h+H$^yIAcKyG)Z5kBRoq6cpn#<1PiAPl_-{eW=I z5ECd2_YFa7-rGuRAG%nKVLdS%`SDPw6b6{Frq7VMrK}XDm_foXOCe)NRyB`%(e>$; zi02_RYi$Kq-fT;H*jtt++l$R$_H|F?AkMu0MZ&3=ma~AWNgMz5a;X}%EIpg~_E9(7 z$gyFH*Q>ZdW!banXQDHkaw@C%Yqf5cGSzJ_6~v{Wco}H$ZvI6+^AQE+ zrJ2_i|NqZYefUe-m^^xc^mB6Kvby^9OMZu zo>~GKfn1j|Gvq;>hZ7MWsNlLKh?pHQdGdhiEY>eKD!nq3X)bQ5TuFzlPf0WsJu+bq z(V?;5E~ESrO1#>AM>Nzvy5UO%Ey%R2s@?4^)=z=c;Q1aKcn`5{_N^Mpm>Ta-Ld6eA z-yhoBmFVC>CxN)}*Zf)6p8-UUQ<|6@z^-d_5cR$kYAR5Il%=9{{!%PkszJ$Iw#D7M zp69{{FV38kH5Ec72WDkgB$b)?HJOK10xyRfvfOZRRFNDG zQono0kIvVsm-^3*pG`B4_%L47;iB)V&!GkipH#Hc`-xfvF-?ZNxi%viTilqZ*G&{N z=v|K3qY^es7A=33Lu-OjHM_!r@=CDodi3+zFaH?r)Qd~!j|zaW($|OV01QS9DIN(U zGDNi|Y}EEI5P>cyWSm__$4^IAh)>fxsHgQWVx9+h(y0 zgc2=0%IOuuL-klT&k`lJ%L-RzVngDPzRHr+ChQ_&$7L+zC=xMdhs8;XrlQ{`Wlrb= zuO&HqmE}Wz6Q{53#fZ(v-vO4ACf^iC7&E14Lu}eFvX6Z>Q`#xBf0Ec}(kME^o@4PD zOnYUor7^t83HKgFce9>L5fVfz{M!QL_T^}x*Q&@w_+CZUX@z;pr{C|PJYQt zx!B39_XyLnsg8w@#wE41XHo*QAY!fLx)4_|fkXRMsLfXCUdTNB_qEuvjMT$;WPDFu;H`&Oe$_s){pY0l?^Rcg+JZ34oQ~Ez`+>Fh52T* zH3{L;w3Zs$3%F_f@9lfr>X|o-3UeynHI(_CJ;JJuicTez`QR6K7z?;p^C;3Dt0&>b zU6ugnL_3~bN`2GsRi@?E$ji8=KTDy+mT=P*5UEp#RsF4%KUBJA?;|;#giDX?di86% zg;fL1iSKsSU+&upsNEugvRx~x#WWA~+EG|gYpRol37IAcwEviDOJybLcPj494o=mR zWj}zl6<259%4OX}j3QKYmudU{p+OKi=nJt-?wHb$(DG`LBcOD)Y&(0)Ww`K0J9%^t zGbOT7@?r%9+1DWd+R7Kmd%t5EJ4Ec`0Wg~UYLxte$W#Y%5O{l+Yeug*iWp2ldw9cS zZCIXM_l$;Xd2wC_B)oF}iUZ5J-j7=Fo`-DX=i_AmyChrw1t@0QMtI(>vBX z+dY~an#9dJw)VS8aQ^SOu7!l@7KW1KeZ|;QCDq7Qy)k8$`$+Sw#=whB92Iv6scdH> z@~pcf3dV0jf2Bx;C(z1Q;xp!o1NC6?nsba-bHG>Hg}L=g8N){NNtR6_Xl z5QvG71hUZX4Ptl?I_flZT%PRwp-DZX-&`i3aUlil;c5q*AqAQhXGaZ6$dZPfp*l!A z7m~O7hgZ0g29W|AmBsqSAq9qSBns@KYeDhpciHBB(aXdf4J40w3oAaAo}D4OiyrsJ zP-?=g6y4?C+n6=+STrF)`%E@}9mclW{WPG5qiBH7aauW^rcEz%h004t5J$R+vKH8* zf062B$dl^eSWAt)Ajy&AYtAX|!t7(hi`1ehq56xrD&RJ^4g9`>x#pFxe z`ts4YB$}JEq_W|dDA-8G^El)mKipMaU`9Gf!G>(8zzp5^_h!r(XsnrN(8t~TGeO=x ztt{o1?9g;#NH2_tzbDDCU`p9&jAYobL?2}=oO9H?K1}jlG-y|C2XSkNRIy3)ok|V1 zDYw4rofA1me$(MJh@OlNw&U|0I%gwpX`;-lah7MSf1&wglZk;jUXY|YJ&(4Ap0|(p zs=Q#;jq_fXbfmlOOXqXZ2Vd~aA5tV$Dx}azSq^8jRM^*eS+$@Q=gm0unxBykrZ{ailY{Gn5`Q5dJ0(6T zNxn?<7GX+o44J2W;40BW5SM-ldZ=PN>tFRtC=4t1|4y3LYTqyU-l2oLd}<^<$e_$q zp)U$v=TZnpfJVlzjJf=sr&0aVq2mdHy6%tL^9T*~*Jyt;=zSdR@quZP)bQZF=WXoi zOyFtcJ&gY3HubSue2b*Ns4)a0t_#FdQGxewE)TSVR?2fHEAP%PCx`vb;nPuWq-?xZ zRgPk3(d-sl&M|(lT2Y-C9%Mk#rs_OCA@kmLmJd)6TcFCwg*{|^i$sN~fiiPIU!~V$ z40ow9!EnX4RL_RF;cOJ1ki_dKGTGjF6H z%8VXSe=A!I*Jg7KR0ozjgme2w{Y@7F_2k?McDvyib6TTT@wFBARTtkdd`-pi``B~QAl03ApQ_){2u%|Zh z%nSGqwtvcASJuf_b+1pkTB_34KY5=&Q8(?ITtXzJL%K!jK+Z&FIYYU$yf=#s_V&tH_1@%X&%la{r5(OZwX^^CTGzGDm#%4=OZUVIlr zP$)5B#OsB`?+OYEu;uCD#g&ygg`I`A9_Ph^hlf0z6XXUS;~EPH=Y@4_u?9(6B)=+V zEv_&jUB)HvPqB%pKMYpXWpJoX0JQ^N8*HsNnM)fBhLJBM_FA3Sp=}Gipn!F!s7YLZ zIhy+%Rd|+N#kBTNvgx{09CHi%P;p-&G0m8C!zfb0H?c;rWTT2l$`ECbMNCVcO01OE z5VC_cKKmNg-OSo92QHI>7rWY?ShYIj?qj(}N8iA?a)y;NfNEPYzxXBbeGtTBh|F)O z(GZy@)-oiP@AbB|L@CENhPsM+Vn-CX>lH@4owDw-?8rZqTeaO|?#)lrZ3Z6ejWmI- zFd!X%`?M!bYmdN^gmc}ScE2&-uU7-j(#4VGBcdUA5J>US<4*SIEKg~{VX*Mpv2q$c z!BFyt%cpU~sWDVG3Oix^_;7s*t3|QlpSZ>c2TO{i!j1%!HAK)qbf=oVB=!vi_|NB5 zOO}Gp*6w*>t4cs7bz*$enxRNy zI6MupOw(AP(i^5F*!V?OlCMq+B&U>Ji>2^o=_?fpfu!$G{{KV zuf-KM=sw;l<%I7^siz7tr>`z~#6`1m|pOoyr!z^#}cxbh-{}Xm5%C zZTQBl=x5qf_GkC5jk7?H_9B7eJrhNo*UJLsMAj~vympx^6#G)NUY?tO(T|P{9!0mP z2)})ecJ8tz#EoY$`PN_RBlkm0Rf-hQCim0D8kbfR%43&TH_5SH;59K%KNWj)qQCwr zRZ@>8aI_&b^AVo+?tNb&goo=u7DxM#OPFf+A`}m~jDHm;x^OUSQ*yF7&@rQFX{oSI zp&YtbiJqpscXH#_*g6UIK=mf`k&a1*?bN1u$__ja!1Uy1K7%v=ehIxN9M-EH$3OmE zp>U?+^iaUtt=uwF`&$<;dYID2)!7wsy$mNJ_hh}}5MH&q88%I#@7nYLG7|>Ht&aCK zML?2U+PfguZ5mCA{B!DQeWJ~qM2gFVfBpQ3w!&EW?LAr+@!@{x%v*lLfeOcSKkoun zLTnbh6{~JGE~>Ly}s03UKW0ZbCOJhlt8u+);23b zaRJ-TlBBtf0=*nXbaH#4j=^G}YqIT07`-xpT6B19dU!1^kSf9^s<6JGENVj%D_3OE zJfc~#AjgFKrR$BKNfY@Uu5Tb;a3Sv2L5Q6+SBKscGE}ta=BjpgzR#MA`EmRtMbnH} zTxT?2B1b@OT=_(C#hm!En4f~*XK(&tL0B14Bo;utMo~Bt49};ovkLA%n=$76T@#WW zi=n2R6smrz^xoZ=FxnoIw2~X8>X*lpLz~@z;vk3HWNg{`uX!bxtf}eh5R` zlE8MCgeD`|-CN)c@bQHu)*#EdnTQZN-WEqL#a!RCp{jNs5*_c=t(&A zr!e%Z6iMB(>EVK&(D~?yRHU!~JPNhd30vTM4H)c_CQ!n^$U$;n&Fe6=dxz~#Wd!hW zCLs#+IZjPTY57<)PF7IAMQR`_aaTh#$98w&BL+R$gY8xBPW()5O{Y9-&h=vk3tz&@ zXrhO3Fa}-V!|DMxr3gk>1W9~8#kczqUtr8{+yn#?!fZdt;oGbVb}#f=BHSf9Q&T4e zK^0yY^aRa4@S=7!4nIX`O8!8};F%?kB{XKEKZWH`XlR8rrc=%lDXcP;qHJ&Z*eZ?d zjCy;1cPU{*Sclj?F1-f1UE33oi<`@P=~WdCnKr@Dj5H^J5G0FwX$mGB5#t9Ci0+n5z zjdfSeFhQ>8*4unn8>nmg?s_E*v|?xwsYjxFpD0a8B%WcBz#2vH)eN$|X8Zv^M*U4j z!}9DLc#uK93_a#gwPVt9KUCJ@ObvU)?@3o> zjteKN5a--p?cr}__mZ5p?T?p|=eKQM?#l&A(u_3!!;BvXyiqU7LsbO=a3y7r1LJUX zIM&$q!4oLMSDfCwztiqI;tbZ{c;0nFbj`rWaj{)PA_qZVM@U@H;`_%5?=5T&>smqJ z%GjK7A0CLjh0p2#>^A?{UpBlnLbZRLo@^W@1BcO`YTkEdNXY~LK0tibiLK#%(lr?8 z=DQ$oapE^wZ)RDx`$o524^eG{#rK0tPun_^71|vFobo<;iT}}0>?Q;5>FeK$lFZ+UD?~Lz`bvq^CG}MjU(c9=6Rxxa0E@?^H=o`@5V)8?zQq{JiWzho_<0IynPz(Vz z1#sb1{2Z}vhKqrry^Ta&5ME-0F-Ac9Y74pgWqfiTiwabxc%7=KTWj?tsdl!aZs$b3 z7^O_vD=>vHdGv&-u#GpAzEi@!sV_vBPmxvRChxhD>p$^CI-0}yp!|Z&DzX~I)xTrv zlhs*R=pZFN!VPOmkhc1b|sK>iouZSi=e$E z$rPCxi9y5~vYWNLJZHo3@kT-3Q6Xx5&ll5nQGNt1*3WE8D23r)^t1GsXSri>(ON`_BGFEh&G&d{~o z%%?g_yI9GYW!(ZHkz#9nS67r+k|6Q7Vsm+9wf0!z#?4HFG(L(J^;)<~PaF*}oiPrc z3z-b>P7Y31BW#F6+EC?*a+S?9rMb^qb1g>Nj!ssX{YYzeFCJ&)N>SMri7x}7(gr85 z&_2wrjJq!N|JP$z(J22m=j28UZ&GnQWysR&8|Z-T6^eO2;hbHk*s z7lC28hYv&DV&)vQxmS-Q!?Zvv)9Ty*lnT(p)e)yb#-u{6d`5x(X!}`$P*uoj} z@rXE%vkpD5n7y0=!fxLbjMMkgs6Vi-AUmsRsvwzQOgQ8$tS(wW>1_B+M6lV>(NYHf z!$I&8yyc@7pt|9BFl>mZy%q&Ou>8}a>Vq@P9Ai6-fjc8`M60!MnYhotI(~mn$(y;U zoLWAEpLLvYmD%a=G1Mh|hEr%ctL-Od5;Vq9Bhp0nnS7WXb09|pmnB>-@`~qCL0B@B z%ScM(c*>Jl7sL@IkguC#ORPcN0@N4H} z$oS6WYB4BA=+$b!3nm*Z`8+Vv?>G)_p#V={eo!gdO!xO=+N!BKd&I90k}s$p{ta8->V(z&B~nc-)@~9C3WcT+~$jv51C2*AE)-*f1{T zm@&fgAcWIJ$!gm0n*M4#4@z|W7UXKgk7zL8RYXvvz!gM(RzfP2fa79(s$eRi);Qio z=_M*&i@ty8@Yd9ZF==AkwWweR&)1aKVy2H^Wo@zeLK;?u6tjJHHbyzS^3%g@0-OtyLtlSGOmz2XlzuTq{3r zt$!}y4D}ndQRqv`4(;ml&}d)2pAkd|i1roP9BW;I=PQg2No9v_2gxtO_NWU273jB< z7GBC9%Nxo?K=2K5V{S>O#w_L({}gHDD?D#5Sx0?4Dt6!7oIi!DxHuVxqt@`_?tIt5 z>F1y?T_z2j+we++legD8MnKwiM|WeALxUZK>Z&f_37%JM^*VVDLD_AX4RypzjF-pl zJfW{rqP(XXvX)mwk$;A=UwMLK=a0KdG!5nv;y!uE{H4XfSV`$EZ7H&CEb|VfiH6D! zMk=8J8QBff^NoH;iL*eVU#x==jv=avy;H=+1MOtbtm&B+7*D8Qlwh|c8>7DQi=_eu zRM8LmqWhd?_Bx}aC`_nQIQg@NR|l=kTx*G~<|fK{>^;-vSh^zGK%@9G5;jP<2FR*9 zgF<2^@PK0GR6wtT{Aho!s{w>+t7`v<9k6MtEG8FmU&TaySsAI{WW>4|c!w5=sw-8| zZfJ=wIGm!@9M(vTJj2+)ib56LL!8B*Yv*0ySFhDSVTKuA%-cgCc!7!OnCrr82{YE0Zp>j`{mhCdYS;nZDX6&NJfHExGsH=?F6>uZ&5Jgpa9 z2MP-U=)j*oI<gc1kc=Gz1M-0vZyC z-%$^cMQpQyPc=4NSq$2CC80$f(HjTE7Z3o7b?{>rn0qp zoz>Lc(qTOe)0>`|ros=+nvd3*upU;J@PFpinT;1k5B1(Kfp;p_lihqBo@FX{=9>CC zqIqkT4!bU!FjHk3aGizTsj{3_Ya1Xk+s9!i+ z>twN&;_ZjM847wZc__s<)8CJ}O76IJc2ZiCa7=F97G6SHu9MAKf$I^V)`MQAn=_Rj zdsPUkeG<9nu`Qu%J>fn%$JAktz!j=mo!eHbH@Aj45k8dbPu1}`r@s5oor&5lJeX?| zTzb%}WkL9$jGxiGnwq}Dn^yxIW?pntPJM@==9}qcPP{(?x0$kxuMd1LJm|bKk!yDS z0(g`ZVly`ac&Km)o+{%Qs@O=2Q9#^BkP>7Ms14Z}GcDp?Hll{xQP$vXR9=vk&65vjX_ zQfRP?W?C@Sd_D+gb4LLdm+76~dn~*OB24);fOg=73Qbn8)|;L;9QB71uqGFkY{VQV`W!_9z#)0*S$MfRru;R0~d%iPS0mN5PArZ(m;Y79=Q=% zN@khhMX@%na7aX-1kwzTORcgi846mlzVG!Me62G@`nY<5i%BOCBAIcoS%w_)t|Gih zNhLUkGjYvJu`?wYMX_8uQMp|Agu0~$wiL$l^zf6qD9Pc?CMYYhnrfjUzPuQg8<`M1 zGWdgzYJMDOsQxvcvHqlmljxDOy*o&VB=wnmiPse$P$zuuh;>X45_)t=%i+wkF;1IS zS-@r$ZeA5oIkUc8r|#H(P(27Zo>6M?(9xgWb5;PhZwb3nR>4^Gt8w?&Pcksd-S>Hg z&DOb{QvlL~s%}wI#tqSDhRLCTw1aTXkmv8X-%4YE5~B%Zv2wd1ISFq#xMrP2flils zt=f-1E_!@0raxbJk8~^M#zP$?T9JTvu(dQY5l!6trpe3Ix20DY!>DNMuOb%x6s2x( z79j24?iS-@1R}onoXEcFV#DuvS`{vUJfP-M*+~zbQMXls(MvjZ3o}EOaABPslpzWV zrz_;Q9yD2g@E?g1W}%X*9zGls{x9a-Q7L7y95vJ65QQA zxRc-x!QCAaxFa(&d&!==-Lp@d>$dxAP#@puRn^}zX!Z1-6+JbGC{|yQi71xP;YnNY zf|M^y5OvpM(H$(3!H;Jhu=?D0;kFjJ-^M^%HyXi`D+*q#r^6qg^ zAfJD%6WR5dQKzIT3`f_g-P)Q>A{vNhE7W6aHt#DDYd8eU;ThT|6?@$I5EVBkiGJWO zhsv1(&bl)`)2Wb+;i%}NOw=h=XuRjbQ9K{$z?w4q9*O#T)TLO;cvXJSm3l!wQaC}X zCi&*=V3N6;e*F7l?zbu*_td!0H|07Mwltu-Y~9e}{Yo+>)7eD(cPMrIPxhs-$K}tc z)O*2et2+I!9<+mTa`tKJW+KWv$k{UEx!(_}7q>-I2kt7O9)%_Kc6yI5&_Hk1e9;tH z%ANPdp7=6VwNm3a_vJEAd~32Cnt!OUCTZ?|sd>zu+Ue4h-?aUbRlq>1WP7dasL$RT zS>_Uy=yaV=rh|rGW+F*z&CqRvTHRkll>Dkti-sWHK7`jdjd4wngu;R3Z9y!x-!16| z$YitMb$8m4OKpE@jIM##g!A~J+5o{lbIbE*S;y2V5x6{h#_+h$duep?!3E?KbqlC> ztCcz0m*Q&}KCF=nAFKqU+Q5SSvVob`a|f9Zz>F`=Hi^arU@yqGO0 z?rhz*SDEsD>&T!8bDI^P?DpX}%iPOlgnALrdUX*ksE3|c&yF4stryxK*xVN-NBOLQ zac+x392<2S*5oIQ_o=%1D#syr-p3Hp<3}Bh+?>l)jGos#+;JbJh1Z zbr=n#IhVJpaHHgl=G)WQxMc1T(--4%3b6*Zcu483NZlqs^zn$HMU)&>fJbNVL~7YY zZQzI*!l_0!UEvv&VOHMf2R3BaN=;2eY`ZmnO5?Re&ziQklqCaO@wwUf&H%F{i1k-j zOn+h>zc0T3x>~PbXb!yeuJDtia0cQLf08Eu1YdCe310{UVHMyzPQWXvzn~BXSyK~B zLm;~WtNrs8R!$arPBuag7AAU5fG#0}lKoGJ2KWmGK|4Ep;P(KGzrOcRIKdybf4ArV zigNe|OYkSH1N(nK>--m!^ONuSADJ8g0G8>$2p<45Art3s!UwreVe%=YKE{zO#7Y*~SYKbu({0SpSs_k`sjO6@c$}j(GI9WSeNxL_&;krw8X5%Y(`lT6+zmibypygEr}< zO|2os!FnJPeyNm9>C>!R<;b45Jt1g6Q{cXUg3Z?8gHI#9vI|KYIMzz5iEJ z=AXcz{~E{tI-q_H)8Cc+Z5jec^-sEsiS6Gs{5A6a77f||O~WxD-38zNjQ;qhJ!{gK zn-CxEvP0p5HXlD2eg4s}CX$dX7|B8iLq;Pu2`vsxRZt;57^#$U-A(7B_x;J6%AnGi z_*YWZn>~*rCMOwKR~tXM#IhWLAa~Z|q6v=0C!mVf(1#fgvQYqx#i-2=dVk&;W2!k1 zm-V|E3c0<=V#F6q3fR9=@n@fZJNQ4Q;?Jr4yOO_4MF0>}_^BczS5&xKqKoKon+g7q5E z&8TZp2^9l{z}B3UHusPz?x0@nkRI7(aJKTn`m6?mK=8u>pAl!HyW) z1+&bfyPomDWu%)72URh-2rlCmJ2-_Lj+%n44(@H_+Yss7ff*zIFl>r(R%=DDBPH<)*ajTvj4UZt&6 zaA8pk^K9DLwpE%TnQ5$og3kwe8SBVqvHD!R{Ga**SkV{OOvPv4(a#ac6M*!S@BfvE z{~sJ}0D%8j5r0FF%pAbKfc}}&KFu1dq8)L`-oHg-#rQli>P2qw-awQ5Tbe&43nLHV z$3^mBI~?b3{%_~{DPhB96)SwjWHl~}T+6C{qJyRbZ37YLaemyd*N^u5zCRWp^!@bO zUyP3#)*kn-Sr`aX#!O2W<BUsC)yUURNPUW;tMFYaA)xvF@- z`1x_Z!tsB9A@Dn#)c56dyW3#Umm({yP2gfIS2ymls4(b0_N4BTk)8>1f_u6BZp`M? z=6wSeox3OF$|(Ru1EJ$WuzxqX%S?8;RjopAEOMt z#RejgvSUM@hiab6wJuModk*w;<*QtNI(uE*ie*7l?7~Htbw{nfIP)<5JGdTbY*oh9 zQ&*Prz1s;X$}sr)XV$bq#sI95d;C1Se=nY!JybOUMe=7Ql3p> z_DrG)k!t9pUBS|{q`#p+i>(C{N=>Qw(riy4?Fs-RUSUc^6lwMV(-|y?L~M$m5-!l@ zQYZJ7#Sfl&r*7XU`SZMQ9hU#A(cp(Mj*_AXOhj)^=>;FL=$t3fWnbI5ht{5NYKga% zU0jR^#Y2OFNd-L@T0Xc#@uo6{(`saqoId25H;waFD2|%7B!DUkGYa!~1HY z6jn9-COiguIm@e!FZycesDoisk)&!B`CUh14xo%XzsYrx46Ha^TmjQTmUj5r zz0OJnW|q51j?P3|#`3xqIN6?q{X+=;YRo$BJ=z=Y-lG%8ijB0{ujhR5%8>y&<)3H9 zvQL!Jhe7m}0^&Ds(r{eVvt{8`A9Wy_65=KY;$Us?Vvec#myaX9W~t^Dz&el7^J=aX&&olh>wN~{R|}ZEse`R>s$nMP z3}zh2vpRJsYj0o7g$*WC@>mS2E)&R!?S!oujf(5404>k%Pz#XRd8S614)K-tI?$h5 zN)poCsfC4)hS2>wQKwQxT2N~PczaE)6ZvRjVVJs1Pa&KNCwVF&qpQd}7&jF^5ka$J zgG=e`s7Ad)H|JTu$g4}|s;?5r)RmP0=ch7IfWbNMk~R%JEc8b-3(K)gpKkR8DGPHzp-n!@3Olme~KDO9#V z_G5s!l)@U<4cJORGT;zuzPKuh5Y?jud^ac=U++2KK9LZwYL-%}MiY&6pqxM>$)Mt0 zD*SR5TO|kf8d~b1jT=Ha>8uvw+?Zt?EUiz|3Vl}z zs0kaK>CqJuq%YNzJ5TTOHCL}8@vuX!e+1@6$5}+7&?Ln@i42SLn=dckRbR|-_#0D~ zMnl77%!TqaE8~)p3w@%)8(I0z3{Rs|xX(6N<&)+7a4KnXSBT@uuBIjBO*(PY^D8T@Bh^3Jv1f#Ch zCsxPPKs@z6p|QM|pMr=F4Jjn7gbE5CC7_@nqSP0T9mZjlNgY;FQF;2ENC3^ObQT0- zq}{GeE3%>IsLfL*sxt!qhSRw@FtKMasd6kgTn-!!5qN8n)%`oG%Jbl)RC{)9Q*!kF zN>8w9F@*vnJNPWN@wl);Q;7(PdVrf{O?0S@cxMWaMn5HOk?c3LO{GYp$A0a8(M&u1 z(8VBwl9mnP53?jf5whPjBQ;pV+L=e{f^i~Q<&)=vYVw!9Yq3X}UFM#=F^#%y2p;vt z=1%>n7#c4Ejc+y2KO*|JaC&?4Ozpn-Yt1;^4Rs>DE0d zPf3}-Ds<63%6P99C(1V6b)>5adLRmoNxvbP>-U2Y5o(R4{hq*5aITIlo08y2 zxbkdiT09BmchCjRbRP8z#aU{WLDBH}p`drcOV<(dtY0w3IrkIZknb0`o;rSli4?zy zC$G@c4GnxB7LlXI7+lrgM_?h86V_c1q8#_7p`kJft|xh#ig?Aq>*Lp*YZuwD0{&}g z#pKHIwiWksm}t}-_h9lIWR+^{3?>4rUb7C#KZYUxk2^K+DKVO%o{EWalo=Adja_F*Z0>3Vfl0-<*LoK86&@QT4U zl}EnbKk3I@H$?p-?REZvmGfdYI9gsM>~4DbLNW93#y$AVRFc7MWr&3`Oqq!97N?cv zFlrG*y4Pzz78J`SPhbx=Jck7XdaArDTGYC-cjlZ&*YmWiZ=#8%t2$Ka#SHYZPex$)t z{a$)v6owQm7xr3&>Og;68*j5Psj6>ycL@)JlQ(>-_5fnIjkbPkXk9ganV#9W33<@{ zvnQx9JYy(4qu_lg<7kL7?7+JXwR)41n30|ic2dYRC@~F+ygtbd0UKhYw$JY+78co~ z(kN{0r=1=!-!gP0&s^u&G7N!-WX2?-Rh~xgupUkjc2xH$^BXZh(H~41OrA?Izo}V_ zbQ0c~)wzfnIYvVbaebFD%7Ata@!^WKRgDN|TdQVAYXC0_XDX(rkxt=wQYfCj(J$SA zwZ5S-CFHT6kO{3e9blSi%A&JqwW@(lCM2swnb~{KoX10c&CRs_j)|5VpcPx^irvlPgd=i1O z4o?WN2jP!N3gQD|PRf39iX!^rV-!l`%k?pd(dFPB0N6w3IL7FBq&!OCz+a=xPKmINJMk`*mk=?54IKM(&3zvpjO}9z@3$%xRL_MX-)JmS^cxEAAI6IkT%w?D84z*&F-3 z(w^!-64m3@p?pI2vZZuL=v)9ad#Lf&FHMCU@|xcuN04a0U44fESVtB5Fvl~QVi?{N{2W%NqIxQS}jUK^Bs$WD*i4es2E_qd> zNqdKOB%(o!hKZuXnvTLdV<{oQA#o{TCh=(KM76;L{veHa3h75#IwwJAckmLPajR-@ zu}_n4OZ!s7;2K@JUMj2gSrv03XK)p6v`x;~75$2X6^+oM?Vekh*morr%Y0~>`LYFt z;P?mcWW;K74+5%Qwyav%Jzi0bhwQHTX>TE9D?Yd&Ue#bkULj8UYR}-1FJt{@IuwKE zRVJo2T5d+{5j7>&%FJE3Q{To(L_o7WgOlW{DSPKjD@n)KRYftsTgBL^R+Mh{lCYq^ zqbC+#^9mN7c=(*{5zIFG0pE~Yq3uNkdGs^S4K$AEa0j1Su)=AaxO+LYVXU?&rJ;E) zD0jX;Z+kIyZ^YE)dzfSJLecj8`t=Dh8SzsAbIC2N3Uf-nubON^3!04?hu>$vO504; zx;!TfJ7ao!*d{jKyCky8;A7@jXyBRp0M|1~PSKV9Ya+#9uw||+eYDjQ7d0FGVrg^_ zsN#wl5y+n91C~1RFQ<1OI6MUs5FrPm`iVhQWzsej0{y7)ki)9jN16VsI*x=1ChpH_tB4h z?kCcz#osRkkpbEw9;vZrv=Mt%&4J;Bi*WK8aYU#XM6D*n{%Ga3WgU*B%9prS!}Jnr zyhkMC+|;)fi?K)q@L^lxvx&mVI2MZJ$I+-_%Jd)f3VF7nL^jK$3_(6xV$JcMMl7j) zi&T=So=~0i%bF4aaJ;U4xnRy-@C_Y<9XA8-`&w8+nVo&?X_1q`15wXe*N_uzgJIi_ zgIvRy@TIE*%-nt6U{D(f`iu2PZ1l$^<6&60LOMWo7yVE=E74x}R;@`4 zw|-qzNOsXYdUVG3)8>IBd+Pug%n4(4xKZqakuZJc^3Ho(11agNG9fHECtIXc5k1N1 z#QR|4600uBCi``%{sz*zb!o-rt2P1ecG&*!`Joj7Xmw3;DnxoH{4R;9JJ97K$?ZLc zvGd+Elkx6&Tkx<2)sPq}4kw^8h3Ycos3y6jKnu5$<)aLWFh=X^3G$@e2>?FAH zq_TZ47z49Y*X1HP{SoWhc%;z5$whV9A8%2#xQ1|MQ;$5YX0$jyqfRC`+LdyP%#(NB z6k@fTQfDb=&+M^rRiy}Mx9mnVi? zP(2emizW<1{Iz-ZMKXD(CyS>oR%JH}yuHxyl6zwzbiN&!M$zZa(pJK!GCFQAD6qEm zBAZQwJqg;+N?6$%Xs(R9w(%?1><$e@aOLy^v~*j_K#KcVf}f*UA%l?gNY3?Xbl!T* zr|G7rgEB~mR*~64YNB1ajKhI+Eq5(SyIO5uu+Fwx7 zjX*g&Z);n=^kPDra|s5t3`@XqztpsC=pHfaXnd-yufhzJdzL}~f4~7D8f=IH3^puMF zWNU;)c3DIFDIlZ6Q##{vHa)?=cH0qmh3)D)jv=#nd4u*DCznvN^w3ED_zqQALn2g0 z1w9Q}0yrv-zv5`xmP$?Od`!XO5`bt5YNTb0OfAJlC2T-t)F4=+rZi@8AO!}+!~{8z zG+IoSBnv5$RrLwB&O%`_03?zKrpD3=DQ8^cz^gR##x;Bw@xHwxh7+s!Hjb*P3c4$U z3AeK#Yiyh_Q?@>?rRevrhUrzNBuAF_g>e&{wtgH7+=F`EfoJ})eFDLd#dVg=t0L@W zrH9s%%ldJNh zdl!Yd5iJh;+v(*OB`h9g22Y!5?`MzXfPJ(0IR2B5X#qK!jBdw)S$O0^wWxQULX=cl zRDBb&CoI(cHHHHrH6bHGggZC(LS|>|q+st%vLq*e5J%NNj*hbS4FRuaukhHzv2LDK zWm;)}D;A}A2$9h)_9mz?T$5-89*b|^aL|=zT!1uT9fB=MNRw?Mw06^Gob_vS>GG3R zzo}ROUc@#5Mk_`NHsFMyW%|ApbKd~VKrzd)F+6C zuK4V%y|{=PMcawi`~K3#h!B)xtF)SFzKVp?TUZy4IRe_S;;3O2qJ$jWO<31?8K7af zP5p)1Tws`mQWUe_tW?m5{s$++t}=r4f|07DUi+y z2ssM`HW?5Z7_fl}MN}-)o+3$}rzB+7Sy6Hv6A8!pwQQbLmYen|w2(V`MP4!L!?21} zm8{*W%_7U7xJ}rVkOYprtFr2}$)BEkC{Ea1jC3xrV(5R7HHABBQvDDd(D6Wmky*Cs=nNVhM4SUnS=8f5EB{KJ* zQgk_1-`J>6kAYcWWl}V&o0jF9YqKop`bt%PY;U%q9-{d=fk?-*wWb8Y;u*~fRjUC) zlj@cQq$b_MJ-GYY66ABz;j)Y{Crq3VJLL44$Vh{Dg)&iZQlwL{+=%keurRhnz=%G5 zbA}$0EZno)mRe&u6KYx0U=4Awk2PAQ!Cka8VArKxF}f2c#*tMT73yfnQA<4q4tH%$LSJiwBp}nz^t)l*b0xe9d*jpv zX4H_!%wrf6#7hq7W1AN(fA@qeW9sNZ8RfMr!003p%#jc{+_EAQmgHtE>&pO6MXVSG zxfKYu)s$7H)bZIHR3M@t-BvvT{jqr6pkyk^B_UQeJjD1TbX>1nkr!@o!X=32lCP*junROE=3cRW zSaV>kpLir8ZF2Z(pbQus91*PvIx$9*L_QcDZZN=rIS4XP4OuAIL#-rTI-fo`=(JXj zNr(4C)n>dWjj6RV$ej`R4cEc0DEyQhk7Xb#H6I++Tv!94YknoUA5yRjMO)h}FS9{q z#WKGCrQ@4%n?nj{s*hzoe~M{a1|IO(s84c243S!(x6BoHT?Na zXR2(ug#V?eoG03JDA9N0%(z$(^Xw8FJr|7nvO1{uMa;y79XTWAAlR_16v9Cd{y0qx zCb@}`Vnldha7baOEy&C@mBX8oS5{6cWX$GQ!#tb1e)BxMI-cPPTNTWizGr}H*gTUpH9 z8K}v1OP3$(TbcSG=&V4ivG2;}U$a(5X4h}r#3WZLZM&>AT@%FE;A9No%U6-GJ{M${ zQPfFCH5kh}c4c7-+eL8r22;FOm|KspY|?>bvvU=db0|AMTD!w)~i z)by6n>Xj;w?Gi%=i_Pm9M+u=~!O0HzFGW4h+1W34yM%{|Bv1$&wXYbyIYy|SLvo%j zSI{e>UN{1!^oFR2i%E7yunZ#1Qu($db9lDIXzgNF_HOTS3N5LZlB&*ZQ8~*LKbUFQ z$`mBq!bV|SUfiSLq3qdx3O4j=5u0MI)~^3V*PV|fRoRhNTtuQM+TX~B!y5i*uLgGW zVU!PDgBn#kT;4#kzxgNzOd6K$jJzRNypNEHX|VZJ&uA^&+H%JEn>)q=in-NxgsoT7 z%LF{$mGnG7g&Gcy0CF9fUu1sH!FA7(4xM64y@ zmhlT$>r^Ohf?Oj?sz$@)SLFv1TJtb{gN$1=yK9Jj3=>TaZ5$y4{*47yhM{R?aL1PD ziOHd>meJTK)-7<&z1wlNZlo*O2bl5z)|z>YRfW?4^r$3sOdQjoee;zBLYpW}L=Kuy z%YyEaD$U1zfdnLDiq9}Y7NO~*8Uh@C2BxE7JxwuSLWxK2;%~DwQ&U4Qg$r?^Q{GHa z#0u%x1fVT)!GN}43HwhZsP0Hik{3iM6$6g39eH3vUk#1JMlTKDwXchq&W6-?EE{eH zEfmI}5KI-urXS-*Wp2wYWWv=F1zFsk;A1c%@4*ksVI)fzigcht+fVjbVW0%PCu+pI zK`}#pGrw8qNhOHgUOuAB+(NeuA)ARpzT0HyCIDjkJXcx zGg3pygb{11L}%JTXyiSIrt*eqvm_CW3EAop&dd=KqaK7fZSG`1212Ru!L#+!Rw*DA z1unqSO62~LkWA=YQAU*ilT$Unw1c!b*}8|vO3Go)%D1~#$@l{acZ=CVt=Q1#onsWu zNyUsh6?KG3Y8Pua=`z#E-8d^Kk=LO zGO#ln2udp!`JkI{1K^zx?tKDiCubrm!=nS9)MRBk{~ymLM;)R7yoLQ znM5oqMPdC;TIhkzMlFGODe&s`N^n33rNZO|C~|Y6B!Y|tqtGmA46G~FDNImt2{qST zjjpqf1fw~YUSF?Zu!)lutPl*0A>|GldDfr~#ME0!#hH#1kP&=9!^XB1F@{B?ee8jS zM~0}V3hF~^3dsh!l95#`vKrRVVWQU5r*@v`Pmim1GAGa`U-KLn;qMC?ei6*J@~KUXdzL&jm-%34#VK)M!Z&p zEuUZtHDK_aYwg{wjn)w1a5gM-84&y1LgH*^g0z#9o$Al`%;o5s?}gA`OnB4mVeW#o zcT;)`p)$wTjW*4+(fN6V`j$xIp&Kd*+pB{ZE3U6AjQ9;I!N%$%7DEtJM@>E3=xTXZ z4Aei2*FhFkB+8w9f^6?fI6-e0A+lOCe5Bp}UT)Pe7W)3NNaFBh2Qsl7kTR*;`}L;7hk-?5mHFbVg-zw_``EiSw{x$1ko39brK}JngA97 z_<4DJtz4mmoY8VBnj5iE_7N1Ra=VxQ(1DW0Hc)Kbxx>pk5g%7{#)rqO+UNTaS_Q9_ z#-vGmOc81G?%l}IfFv6I9f9pg^_eB^P7XY(oF!G!izW9;@jmFM$jRW$9gdAVrf1=C zVhkAY*Ee5KCg6@{gObw-j`~YGZn{^LTj7_-jT|)NPwdC|<1MqA;7bN>e?^htvyPA7JAw)N=Xb^K#h3s ztQ2qF^jGasf74RB;-K6WoBC(NBLr>!nuFru(do6Z_jckRJo}|B7)vF$-edrpoSFTV zY(xZ3;!3$u%+ZOUu)^R=ICW9mjgq6s*P@_;0!}qlaXvL8e5;B@6T(*(EZEc(uAVOi z7^5Tx_$E2J!s|V=6gr}|%I#-l(5EI%Ng5l@E7psGDHh?vvoi6Wqlat3FIAw%VN~Te zD2ZXBUWPh9$=zifNj_=G+PrJoH?IHI>wike+$e0rw-&hUp`S!tt98FaB%+6E?Uwao zx!m`x49p-Uew3=25c0WbRHWJgs#F&|tG_vqRsu2ZTl4*z<6K<6d zuCmQ=R$Fhj)X;!%h~=<=_^}{bLL%rzLq!C_!huqnCd4$r(=sk}Evv+2LK2n4coEA; zRl$X;uA+Oc<>uScr1{Cq)dVfc4X4sZ^a174xgDM)Esi^gQr2V-;>NvgqKA)#$?1Br zS_vcxu?p_dXoa&{vei;_-WXaB0#+;O*-~_@5a(+tS{w`>4-loMHTQ+dWqK)EvVyAP z3rg0ioz#tXd}k7s(dVY6=o|cTTD3oLlvXCqmS0oy-Z_FYW29Un>f~J67$rKf7k|H^ zB%hvLUSC$r-UZ{PcyQJ%AM|7(SMvVUDQ%YU$U&}T<)T;39@DRcx>A+)ZI>V542{7H z8oNUHOp9Z+>0)^tVmxVJp{^rD6>nFlCj9=b%SNM3&=Hfe{T>Xj(IN4hk$jUGK`~0{ z@F|MUhWy!+WdZ5U=?+3}^GqK!0fyD21q`tt^l5TI*rJPSIj4g|N^o0N&(u7Fll->Q zY%|p#&kV|L;!}%;hga6%r|!LE<-Yu8%mTX1kd+U$Rj37<=R?81ObM&WHTm z*T#~09&jIzaI%=K9+kz_S{}nw)^LZ(awMP}FPAS&mKkADp8|tqOTCJgbwiu+PDqq( zFN5Vd7Vl+QJ5VNBsN=_cB@|ut@dlg8;^;w$ca$R(1r8~RoH@>MPmI9Ac7s%t=(}`5 zOs2Xos>RhDI$e)QUAr_uHjB{jTl%`ysDxy$KxRU)(4~mR=KJR`CF2Ge|{ zbh^qTm$B{4A*$*?r_8?gpcdrCvPQmEnWm39*!IIyuT`pbCAt%x_N*Et#bV0llKJ2!QuZ9Sd9CtdGRGBfgNiJyO?U=D@qy1fo9M$2*`1L_rDWI% zX=lI>liEt8^~MEYc*?0RE>0MGbJU=OE%`&CH<#&(<-6Pbh@&M zlNdFUncno{4Rbp#>NzD1`ag!Ge_;)L^s>oe+YOuNa?g86i$aTwE%0VNzbA9s(y)G<8%Ecu(@-^I605mH%t8|%@ zk`as*_D7Rc9db$V4~%}y~sfh&w3nY&Q0`4U>=34xq_mWpLL%6Q*1U zRd&T5*d^?+A;u=+KysNSgfm0E*!7B*)@Upoqu!gOi6_I>zOOVQxdolS_j2aSE5ZAK z`FJnndL|o$_(frwa5B$)AQ94qT;c7JeYJ{Ycf$u4Vk}%PhDC?ZGEhHmzlKK;X@c7b1QLx|j&P6DWI1%fWCX+thod_6~cd0Yvh=0XmX7>Ba zOGaQ0a6biIFr<6~qK3KYSA~zWaopFJMuN}aQhK&J4orQ@bz~+?)g}pgSnRo^By}HT zDSy;ty(Sd@L|5pmn!FXt#4YH{;;@@d_b_s{FTmrWA9uD(nWsk4kej%7t1HE8;;lzq zkobxFMAWX#4q32=MQVH6LEtPaf5pCh-AoB;-J)6>?jyPC!l%80uDMV=?Mg1)p;;J= z^;|*Q{7H#EjxF8Nf@bF_VPu?d#&+Z!*mViIQU}QnuvAv;ID?O{$k(JVIOvm`B+fI2 z45mrh`ut8W#RRmYL-E@Oy{lfZ9fk<)ITFPgb}q)vjt%=hd&4rDqqwBZs4GN?&MT0~ zjZKQBFXaHJ7qlI&f;QcgzPAi!1qBK%`XG{T6?u;it49b>bt-Ut5y2OD(3B}t)sGuJ zN4p&ngT3es&3ax@I{ln+F5Y(YpaFQ0s@U3@46m||x=GSm>uF3g^FDfa4h|rCg^YY# zi?-MfszT=`dWQg-MnIg$O3_P=>YGt&YZ4t2fWUz3a?0P|hLW!sQ*l<@e!2W9mb1TE z>Po%7imp&X<;X?*$acXs(R0m&x9MAdL5tEs3FkY)%P`77zp2$%Rmw|G_CS}6+<0`V zP+pUWFH{E0Ep?Nf^l^qT&H|HJpuRr1A4jMdrXRnj*Lw2!y{J}RG`kgck*$ros5x>` zr#zhQv|ZHI(o`c_S8K|(4R@v2>d8&T zZVl)-F&!>WN@7pu=4)rm)%BCQt6YU{EL!wST?kOKQ|4bxzS-H6^ZDejk3ceb%!Yn( zpmJ#Jt`R1IX;hXChMG=-{?b0}ezJ&xQku>y`fn( z>KDM%G->Q*j z=(m7bO!!ek_1WuCE(3#z2tv-*^+MDyIpYu6Std`hN21{DKEEOJd;4)Hrh5w+m*t)S zznaiXU??{R^FBd(TKl7f8@tt^595oS=Pq@1M&Y#ZM+xe{j;La4p|6)KJI;1+q5ptb9d^vS)blkI8k>X($NRL69)T@4exjlwLeimB0=H6_JkTrvwBV?Yjj}V7^0(h1OWw`p@nxUxDz#Qq+Yuuk@x!T5Hf}ca3Us1fy zI@m?czkOb`?TbVm9I3hOaAfwU@7QWzvmbD~b8oFFA?%nAsX^DaJQ7Sag8S&4D~F)l zBcOp^Lyu(S;>74nW}oBLD3Awb(7`_$hV%pc5F^WNtkwdbqXTLn9XTitWwJ1~H;R_9 zk1c*tQ37h($;aQ~8@O4&fs#EZ)RR_GmL=CI$Tk@Nu$nBcHsLZDsXUx{D(68 z$HWl6`0~s4x>GdflYbx_O7l)q{xlob|4Da`^&u47q`%hX6hDJ4uhB2ryI zb%^`9+)}F1?1rtwIkO0SPQ&bo&`!9%oTX5zTzxw6tVJ-yKEoB(^+QVJyV(mzw--`| zW^e7*s;hgP4%!!YT?YQmUGAH<>Xa#{^@Y&*D(mHXCvk7DVBRfLe)Pfi#7+NiD3_<| z7ml!&trnkK&`KLs%B(vpz}wA-8n+qWd_YgvV@veNNy#b3dDmsTOtpy9vFf+Kd)~2n zu-k2}hu?L5<)-%%eR1`WmC}8EWgnbUeBSXrE5(nbgXfR;zT<4}?s78#f8Ky*sNV2+ zty-3gl~7t{$VDgzJ>Hkx05K#RuQ3y20ci2Q}%v( zDyP5WW7G9H_q$yT?UhFcjcx}%H^bLt=%#7s#P;sK8!5C?ZgHk7ky}?6TgT&DB%K!O z;0%&R^yhdUMM(!k~Ey$P9)P|)BX_8U8Ux4fQ`aoO8zqHRG_ zY}>7$ML;Mj8`vl5+tgJI zys0>Ox6`F*6Lb8YekeJ~T&H=&H;3pt(;uXbI@clvC7W#!&p z`0~w`|5WzwPE)h5J>$eJO;G1-08Y%kRVAMuW#*)|*s!@PzP>#FoZDr};NGnIB>cxV zLoWSbNIqggvCOL9Ct9ocAc>oA7-eU9Zw(fV6|Bh##B|?jYf`kGsnncc3dv|8;%!^_ zW^Xo|!!_}*u6KaFN!qQ*Z{mN%W!^CB>6!D z^8JU2+H?2uv9X+*>nhx1 ziW>t;pqqV2uuH7SA?hi_tHMRsf1g#He>}A5oLMwHmY;I$oxRrWLMs}}I;b^7`n!G> zdnH?a$XVa{Mr_5#equfZT!t~ojHjDq9>>HVcpTm_#J2LsG#{(=4Y+&79zhba2#&37 zGg5{J%Y9f!o78b%E%ZrNRTgIhB?y_sBJh^F_6EG&IK#$tU70CnT>1qaziA_Q?nW)} z#&J!ed`L4Z+;Ym^@lR{vj+zx+{Lp9rWMl8TuLQwqY-E|`Sr52eVDwGNuUNoI+Hhab zG#?RzPfTgPj1U_=V6P&1%wjIESQ3rGzZwBsKT;Qv`56ae5) zmhZm;q5PuI{`V=20YGl|XY7oB1VZ^``!|&Mza}65f04o%h~xnPe?~MB2l@&C_#F`d z_!PkWXLu8F;8OtW|CGWQ7`z0){3n7gW(y2q0$~1=Wd@c2z|v3IfDQ+in1Q7~1p$^= zU;)g3RtGErBeJmk!wRrnEdQ_qY#7TwtN>fa@((M(rUBF40&Do!a2UVz`l*gKuj7=ZQ9I4Z2a%mIMujDI#2!1}9M0JdKa_^&uAzxw%G^1qEk1?CL~CaVQ- zu>LED%KU4@{Vg#z{(GF1e{lWI%V~cg;UR&Dls~!t=2xilKnV#U!hnj@8e&e){!|g< zo%}el9@n9_^6>i@3OK1^2{-0kd2?Onb^VHXt3a%u)#%P5>?DzQS6BBv^*JOnoRsL- z^CGWd1z}A_odIM8Ga%Q0n)#6uQAdiOyAy;%ne6T_X80dH{_WoX^^E!%$>*Qqr2N+a z{V)<2PSO_C$ zQ`3g4NLT;8RSvkM=<)l_6{fael_?Av^+p^EMBI{6W#*3-@;d2RSsOffWRriT;XecS z|1k~!c`NwaGz6|qKQ&|p{F{cqR*Anw!++z!|IiR#4b()YK&4Kspw>Mh4 z&?HelevHIn!3yXl>LvqG=p)0QautS=$f9EfmM+>h11XBOk#61;X|eo}tiW9JD2nG0 z0eiObQ>X2>$tA4u&>hX_`u3F%#!RgNAzXh@6;SqxE_KrCz1vU>tG>?+{%L^nwfR0f zcf?* z!k;4QLc9AH(+9&g-b0Z9*HS)6Kp!yZ)F(_V70xP3%TUs?(1o|}c$je21@(Ja*y#L* zN#^lgi_|zw!G>)7sM(F0W@8tLt7c_$94@{3+_3eoA@sdo?{0Qo!8*e|UT6;7Yr7-8<>ncG9tJ+v(W0*|BYPY;|l~9dpKZI=1aE z@4MF83$@O!Q{P#8|2L~<)uXG%Gp_p?*Zmvs`sD=3@kH{~C28Sl#uM`4vc$Ul>@C(j z^qFo9rxpgytze0O5yOkq}6h+ z2o)}1#aVgoM#WfiUVdmDM+=|X6k}-8kv{$#5&yj9zdhgoDG~qlU4J{te@etZHo^Ww zM23HPo3i`|UCqBRQhtp8L4OOn;2Y@hvxtAA4TBKn!T6GGG9Nf4wEpKn#N-1v?ft{m zsFcNOQgA1-2z`l;Sj5Ai!Tg~!#g#gkcZ6UsVz*&N6)ybAayXkD5E^4e1+9AL+LOt! zuaOH#Lt7xYTD6x7Dfp7Xm^ts-{dK8!KjWk=l-Hg~kGm7t)Qyb!->LYIB%%K?75^}~ z|8W)B8UIj`@n5|u%YV?sQDEq{Zr>BIwFFifXfYT25i9mdx*;3KP4M?_;!jFUrKKXu$N`wl zn&KW0^^5^G3eK?apng;mA4hHBcEBHlaKrEId#>m6*_Um&cz_sSkkS7;8UHt|&7XzN ze_Y1T%I6Om**O2%+OYf&TAP2K718^HiK<|L5iaL~<#W9sAe2DkV!dFEL;e63l_?Wa z+NwzslgL-8f1<;px7PkpktY2eQT%q_<^1+)~Ek*5kEn%e~9?6 z{*>iEXl?#a)8ZfgH0zceWLpSn5d`k*&-q}6-lYc!W@sWpchrIi%}*7Xm_S+M!w7Q9 z6XE_KY8rCfe^UHd&?SAth&>$nl_V>syZKggB7#$8U=qi76gL{MLfd>8>VL8YJ>GE$ zhlJ%#U`}j1%YS;C-IF%YISASLRarZ|88Y&JC*uExxB2t4!hc*uroX&Ung50V#`+)h zHvhdp{jZT&0h23q_SVA#8pq%T^*It54MaajB2^-{1To3&8}CjCM#v4BInG~Z#r}o0 zNoC|v^&Y;LO*9zBMR~*)5AD(Rrr*YIfq%}5C!e$8AgC6D_Pl5JSB{$fb}PQ#?3UE# zEIxfTGMay*;h%T>x5xWGH7Te|8g{>3}klA*7IpJJd$D5*7Dq zP-Yk$qf1$apTSo`Tr&hw#<6$rzb|4s?#HlV#D=rCrq+GM#l*x!1}mQrZpv>CW;bI- z`F%Gg_{+N1o@Ub=+_e`~(C>G8)xQ_+Ufc||-Y?bQPgH+=e?RGX%(3*E^V*p1d3=3% zI9T+$+RO2^KLF4d*MD?%NRt(RYvdWtLV$`TRmsH6kU5QXnh!0fvqR40e(Za)wRY5w zITYqP_}2D1Qp6va_}KxGQJ^;_r-Ub*ezRA6BWFh_PI&J2;!sx&{{U9~6}Z|f%g&dp z>$RLd^YEv4XoFX4%d$4d(J&E6nC`oN4j4-Z{LdjU8*qn7p!!S zI~qgX$Pc%hy%Bak_T644Z|Lo6FQ*>vE;%tKwg7nUP$OyK?JD&u0%a2cmL2|3Wp_zmI}Bp*f8^K-L}Z)vo<{FtuJ>wVe6{jzt|(S2M*_bKMuoX|2+3hbJ*9mT@_xnBbTygVtrK`P@K?&M#9rmd12(JHpvPy@c-J}oP#rJd&+QKDZ z{|UY;QwwpoX>l73bO>fqR514NQA046L9+X*IFEp_KaYSfuC*!YP@IBClcGbM;uhL0 zsYV6Lmp%8GjAUc;Mm)9bX#DAuLbT0#{kGsXPWn}WOMf@&#QOS9{>>Hagt|kJd1Cwi zenF1qR|h9&D?2p%mhuLHo>odUQO9Hz&GvxpD!mvIrqNUnZI#K(LM`&|J6HNDidcy% z8`n7*)nSf_`{$+?-AFdxD?Eq7v&5H|=$j_JR~Oq(JZ9QuzD{dAr~GIM#yOwrK)Udp z;G71z5S)_7_Z_bncE!D`BV{ZVwDkz8LY}agY~|LPjMOB`93P%+hU<3rvP{TPurg#x zg{c~_NXfWN7$NjYvEF%=N3gci^e}luq@ZK0xPH%# z#E2pZOrTtaJuCr$(;4vP7RJMa#hR4YLe;BHqFd+NnMLzDI5Q7pNk1zeIa=?m~Nqa=hp(lvog z!@@J=)Aq|eTgpZ3(yflct~YGR5dC=7o%qM3xb=%fdIe``Ck$LENb0hHj9}r&w)1VG zQ+CBmO;<<>)QK`r4qd{8m5t|V3h>c(M;TecSiKW(Ta=!Pl>G3Af>A-e5$ShG~mY0wfi6BF{?*T+)xm zPx=M+uZwtRVI;cHg4aT9Lc`nM*j-YB++v9fyh3o2!CX;w2uLllD zMs|!Ok@bd?NR-997!r1Uzr|M1U1CJid&hdr#jKd;f>4GdhD2Gq?T9KvV|-J zq56yfz+WFD48N zB|I0|nGv~2QL{?cgWh|np=Xv%CwsTMMl`=N!r3V(Ag#%FTMw*6?U zLi+L|(l~Ro)3kNdJ78y4cO+smsCs8z-rV;PzaxKF+rQ4P^ZXK~y!utkq~@%a^rk_o z#HPKWV1o)ID90@5N?w8mCryx@vH6Ven4=zCbBxWsiFS?E_1k7zaQX)gBPa4&h54$w zM7D1DYeW(6ce#;Fl8#80^FTAxI))*){!L|~Nlfn=_8{v4sS;?)l~_b%3;Y6A@pr`X z)Dn}3p)00VO$nD@gmZWUv8&|;{zV+uB@5G`pblv@#}^)ugn+Qo={$4xHi9-^kk=#? zaL9IEVj?6kGH!zK_h@=JO1yBoxG7QMAXH&|RnDHEVb!_klKe9>W1)Cr1=)QeDV0cw zayp^g(e*i{UXo(JpCY_J3?=dg*b4B~l}S+{s6`Fuh;|n^WWq|}8~N#03afMzv|8gj zL!d;qZKa?HnP#toQW>4s1m~lF_~+F822sf@>Br53fy1O;{SaF4(kSE%28}E;9}-j- zYZDa?Y1j$S_TN4SQx&FE8#L@UB$TlufQ|VgF-w;z?^WQKyxRw^A14GS+b2tqE8iw# z1TWwt=yRhbcH%UJeYV?(aqvDoBmDw?<7*nBp$(8S#8 zscdOeILp_wMupsXVmU2&1N%~yL1RJ7^;&{{7mb1A?OR( zrd~S--K_TOs3%ypiEAmwEo_WFTqFrkGrg~Pj+1T(uWLNlGW296EU9pFj^K`5^_nH* zBHPfiO2^_b*!$_mIBIARmufU#hBhHIidJ!AU0E7CDxk>jhPsuOmLSJ2vrjP>ToMW* zZ{>05m|I{|t~o$o!Nk7S_GSNvlShB#GPgOhhWLek=aK)x^du$jZ%zAIkPCL~X&Pbn zYFf{EH-BFNhMyGu2`s}rV}jE;Q5rlL3Vk=EU<2+ftdMQC5GIil*0{*nPaB=SwypWx zi6s3VLclhB@7w~+5z|`#Nq-Hnu99Mnx)<+)fdHg@v-xwJAf4QCjdM{dGfL(ahR1R) z4i6VK(P{Y&UE+4NnXSavj?oxJ6N3W8ywn}$S0nEu&plpeIu zb@C7`gp1Tv#2W&_LGS0Z*krsSX6U*pngULmuwYZd@yf;U&5^iuMujA|u8}ws_ zK=Gt9vE%MAbIXUu+6MHqpQ0YZ0zOZmmQl71NyGfGH1degPVRC^YbV(CB7WZ;RwmVR zOjP7TeOctnoACL|_v%LUi$(~ol-g$G)dq7MP`>De1*QJ8sMV#DS>9nj5dhnR$A{qV zL~As6=t{PT#!ee>#;Ezzg7I;^Su?MD*EIm^>lg1!0M;AVpaa8xgI@2Y`@U&(!X2;p z($I+3I~>Vp|Elhzd+)*9T(O#1)dyLaS_azZubc%giPgyG!u-3S^RW4=#$!|%Sm`*raL2o8>FCnc%quo;)EZHlkFnm4ScVDW~JE>0zdOLcq_H}&o zUHsvD!`FEVaL(}H`t^Q*U;QzP?{kCDb-zg8rR(|faFVhz;*8n6Ws*kk@j;YVC7;z3psN;KlX~LwLbEvzn*5Q~G9bH;nkL zg%%^$CJp^ydhP}QI?%V(+E=h>eo2cASU=}^>v?acsBBet(0la`Q^$phy1$yj6@(r$YQfA%*&-{T;1rqG06^+Yy{&t@~jmz1zw0 z)LQF$D=V>yxDE{cS8R9VaY;sidh~0#%Vl)fZoIXwdi&y;ex!x$HZDbZtz4aZ_>Ds^u^zUL9^?@bp;j!dBcIf$- zQ{V*W;@qhla^-<|B9nW;n^q9D81p>1XZjg|>CQ3JIR0|0f~C(|E>j0P zlH92f5zs2-izwsXDnN>HW@kTPElIBz;ISXFn*z;>-U_aNiWWR zBDq;Y?5)}D^cWj%pdqkDx}YHJ`3OB1x|z$kfiQV%5@gO<2?WqN9T4Vx* zHrzT6mukf|DXV9Cp<|+8TuzbJ2}tb^YXvUyYmrbJa**89il0m{ACl{*D`KUw8l|Z7 zGc>wkdF=~;CU5;{sJDs{Cn2U2f(!UqzF|Y9ku!x^ngpT=6&=O;#3ROP=Ao%-N>X_k zZY?GR*E@G0YY54sFM<}fPbnL$PI%Ok4FsKfZU!=Rl1x+-N2q&@=QxgSi!SIBhIt_4 z7;&aAw2x7{qNXp4OcchMqI>1pomUP}ueXfW zVT1~$to}CZdB12btTR@QY;9s%uw_bF{y}|>heJ%uIG1gcI+Pe)Q~zXJ$$C3}k7Fro zMaFW9-ozC^kQgbkcirQxmRsOnV<+lvJQ2;oX@p;^;l?Hy}NH$8Sx81Znz}7duF?DFso?59ta>Xv#JVsAA?C3Jx=8&OvN+d#s`BbAr!-wH( zFTY+EUqv3h!OUxcYqbVm&NgMptdd^sg5FQ|z$-L&Ta z9q1C5By6-8dS;lK%NA1?IiNZ6i(1gxZ5B(lSPNZRxwSO! zfIO$zv@riz@Cs!xe;dvCfW)$&wr)q{5iyXvom7y1@t~`z)hdGe#!CyzXrOhl$|EB7 z2+4T_togF&6g6#x@HiBrI9H1iJKrRy;r4?C8}WkNZQ^4szDm?%D1y;wQY=hE`d6!l zZV~IEUj=Gg??uL1h*d@BOz;|LiK_@QxM>V8GKtz?2gw%=8c7+ZjA){5_JGAQP%q0?BuOqCf4ODV>(nC=$kr`u7st0a3$Tb$RgA_VBSD5m|Eup|GGi92B zW{|IjgsxBlg~EDR20td{6moGILY-yrWu0&*G=NrVN~&j&F5{6=0M(wMu*#r;d`ETo zDT2%s4R?QTay+Pw5TqZw&AR|1$#QDK2#Ymj({n27Ec~P%oznCUoqXb7=9Xv!yMS4U zTOuR6o;7GoKUYfHREjB8n?(^%5xxRXj*PSt1k=cqPn|!|tOvN3m%C1Qqun z2NCXCB759<)lSl@ohxYARfrjD3Kq1M z_TE*y!}NUEa*N67FVWzcj5r(b1<6|ThXtVbyU(Mob=U&24zL1Ify)yrC@b>Y0qKRm zm({xE0K71&SyFO|$H> z<##3;M1+Mag;7hc8_M7X9DO%3quoiPY4J(OdE3~tKmcthN>UCQ^BV$?{Vi6Vsl(;oU>(!*PDgphuG{4P3 z46_3w&9N&t|GRz*7#l&sTTj`fU%$G!_KR8fs^^#s29#N4p!z!Gk#t<0GmQ#t%brUK zh|xKNYpEhE%Wqyf_>mZaSp5+`5FYaTWsTOCxFYc|ktXJ_j@H^ge!lMHAfIrTo^^TmGH-K>pa8lBWVQ&V|eyju+$ zF`84xTYLrB+fRLTKXb?>cE7^ROnPcDtHw=GVgHe4Ry|2}8p_C0`(yx{uZ5;s(P-96bvKK? zQ+LwpnR+xw7|-UPF9wL5qOpo+cEy{%BB7^9L2GYe@PKpO=--JqwY=Tvdv9oBp|1A% ztHLUGOL^@DS;oYbGY1ntC2KS>J+J}xdy^;!Q&em>V`vb_BVdSPY?iup_{wbpJb|Ge zo?_9r!Z0V@8)IU#>cCeauMKnDah;PR%54&{=FtR%no4!SfmCidI&a(cTu=u1dRrX( z?gu-U#E02RUW=8d#&#-t(L8k$mmyDFq5YQduBrWk1n}$({L8uh+;jw;-b)L}smQ*m zT+5)D@^NGm>c~4?yit zD~+(T!o$=#DP@IF#S2-NeQE6vN=EAsSte=r-CuOxhc6qi8~4@XXC7WOUdS&wt$*n0WS?G#Jw}J! zX0H(g@1}&_<8|d^y(FZOyW_yH@0lHE=^Ev2;@Nq{?dW~>ZnK*I1280(j>&lnW8#YY zmCK~K)AC(58J?X6?2foH;Pqw;8! z(;oUBI#wS+b)ITS@fduT-a&1Q0= z9nnS$D9lS6D~=9W;~s+$P~mapLpoW&{S~Zo4b*g4I@WNQ4N<6cd;up8 z)dME?9SAU%Wr%Bkz}dIt1g<4ET%H=s`&_rNyhi*b@47CIz+4mJWMmk%=03KVjSZEM ztBL++l@je(2k$9P4o0G!fe6r(pfUIz_lZDZtfGB z0|izcXh!~Zh`>08opvxL7m6KHAdo}K%E!_*DCz4o=c*0nWS zzl0duMonUd;v(m`bn@?wt+(7Nt64saJfZs8P`^akqzB!CU5&u@gY}W~GDzME9nw!j zR)ohO-fbAe7EBS0kup-)%xHoeO{PhJBqEi^?Y`#$M^MW!14Y>jY5PKZ$`l9#43X!` z%q!$jsZ`?f`gD&soP5Q@6`mgj7v4b(%w0rN5hEoOguhUJ8L&>Q1tq0f|1N3`aD8rl zcxAuZ#P?|nva&?=iOBd4Z6~Z@jS64@J)W>p|4z^sZI<)&u*EjehR~dT{T&RB%VK7VmANUSAC{hL%EJY>=cwbFX5fJ~NuiiUK6|Gy4=2C@))P zL>9IOoIi#&5M=PHPLmXY=D8-dMil_4*HWp78}_v3p$&G?rZGbx)}A9(5^+?ZBN}H3 zF#KegEMQ9!>5tZQs>wCmX&`i;)aFdM@G=Zl>QCxK>|aG;jLF@6Woi&yp{%A(Twf#P zq63*G#^XQ;T?eha_5;XvIPrr4#uLr&2t6*Tvp1D9aBK)lz2d-7k6C`qDmdNQMxL?i zOT~`774Z9g*=y9iBulP zUS&DZA`Et`)))J;QdqJ)IJ`&;M8(@i^~IpqNv*}WD7nxdB&$gk)XC06re{m!8XEOg zsl{+wjc-?DV%`x+GUeu9ko$pCe9bgziR28*!G_(DS{p<^@kFxr_Lh8|=+&MqwpPsP z%>w*BS&(A~=(tv$*!~^Wh(?7thZyg<++#Vk4+VeOIy-68YlGLb$#lP$)>_1d8re5j~6c|l=PYhtd#K5Xh%QNge*fOU*q>vjcO5m3AvQqv&5_0!tM+TuL z9Sp(6PPf?C&n=9;Dk*f2-85UsTE=tKyj9o zNR#y)(@L^1i_mIMa-l&|Iv{|7Fq!M81R{XNg#i;IlW(?2$P~kdA`)#dTQ)?*rytH^ zxP{RHQ|l&M-yrDcgkY*MG7fvR;=My*Z;!lA1=FPbnOmGnxlqL2?%ELk1RHdK2sh5{ zounFtITn;JkV3{^ctc`B5FA7nDQJ$S280s{G;%A-bBUy-M)#yYm{Nq-(_SPT-P2oO zerr-MAfB58#HIjcPaC4JGH5|Pu&Y)34KfP;+pk$ZfF&}8yJlmh3B*|}!Q}{EfjNx$ zaa>X!^?O40mI&=LQ3`HVo`T15&Biy2YZ7Z6 zGqTis%|8oj@MCPGwQELdYTn5{QC~6Q>|Bli#aMCulIfN zOP*xZjsBzG%)-=IHfkO@dG>x36yFJLr0R}UM9b_qCWyGx-}=xD*Ds2b=?{He`Qs{* z`Kujd3Q~5Bq9R0RxfM6;;~AU4wq3vmS@GW5vg4j4zlHy5Ir z7mw?VTh2$5E(Ov2F%4Mh(jrzFi{DrFXmCdh_CyWxD#LYc*QQ8pE#(cx?h7(#2Mcme zeWajbNY-qjC^x9oOOg}(Dg(ymE6cHKfbluz-eyv8lpbLcAs0rWysP;;4 z3r|8zOO2bg$Aic|^`;r3#QTYcgHlE>PtE;HAF}Z^-sHDo=JNA#u!0=$ zAVx^Ii;ctKNLu%7K+_8MFi*nNB#Yk_twDbD6y@HnMl;n)MLsaraM>Oq$Q2$NpRpP2 za2;ZBX;P}|me&t>TEtIUv_9jK7+kmk8v@WvK}m~3_4@T>EL z|0OAg#J4?qiA@xGt13hE7D~%S#&9+zA(l5AK9D$?xxV{isrG#WaX*4`mJ5tXymT&+Dve21+k0$ju$G8;s6r zh7d9?S!?CojE{BavgKKpl&~ijyMBozS5L2tC9)-9YXM+TKDHp}NFJ8zOY-m1geCGL z8YigNS|=gXyz;}0Bc~;{k;X_fEQ##w$2ho)y?4qIPV6!hO0bvcRO;aaACd;4fB*k7{lgqO05iZl{PSPZ@n=a!39 zYP)o_otBCUbdN2bZ)g?d3udDpmGCFT<9_)nSz-W!=0s&`WM6fs)27ZDVSZ(E$JRvw zy=VXm`;4RK>h99`1MP{r?la3TJy&Hy&nH$f~CSMJc2Pq`Uv!YMz;nAz+sD+m8Twv=@ z->;+>M9%wCA@s_X6+IJ^)t`xId$>)88f())5%Y2YsXUworFA<{B2-ep1&>A8iEKLe z!#YE%5@h9On#3TFj7cHdI+N&#>25cW*qbvz z#+nSq0UihzCZy9ID#-2}bv`kni zY3iux4N++a0(GW(pbS;-_WDuQY+rBK?kCZfF95IkN70XRxAG=jX=k6maAYa$T# zJf!e6YXc8X$;%8X@~8GxM6!5gwQ9^(87)B;8)pYAY78KCMNbFD+U#RM8G}lESvS}` zU6K>3@Q!m0)^cIFzCgmoZzPH7fI&$H<>0E!^#z4#h8*M;mvYBu##u9QBG95%)7mF# zmuySaYrK8i^hSdT>*C&FTx(oupKF1oyknxU`sJ`P!0fApZV%P)uq?w6(d$N=(fsDv z+N=?EtzR)E{m{y3nxg~n;Dt}@_0bA|m|*Xlc6;_PxnX_mAkhyP(0)vw3 zo{%g&#?EpX!sR%wrEbG@@)G)T*LO;XsKrI4{Dk%deaQCHQHg^Wp_kEaj6?bw3d%&z zB+P)Ne<(E}- zRm>D$bs?TTb^TRh$^KJPOPM*1)HAR#{V_vI{4OQC9sMx-S%!-1413#PF-MuC z7zS?`wM2GsxR-=)NRr;7XP757Aud{pm#)@OM@!eGXJm*ZJ6sZMp zbj#3t@ihl0*KvVa({~Z1jAPKQzKt14-t)w=eXQ$i$QP}};&*|$oPxyaJk;LCd8Y-* z3}0*`P6STJQcP1$BAhZ1aJuI5mb_deby8`^e#A)9pcDB38&{JAp*BvV#1N8d;(UW- zU;labP_tygiXnYnXt|druLwTn;|D!PTCvi0nmEOd% zB+WYHVFxZS7mTiN6(%@C*2>PzjvI3D_V+x8rq4aV-iwc%un)g^X^@eLrc$8gaW@EG zVZuQoF)J0anT)~8ha%r)I*JXUs*D^#j?Kc>xt2_}@eJ6Jgwn$5Ca4toi`g98lzkEG zj$m-}dPHK@qh}GKC}Wgk2mI}9yH+*`Ea80k>R zB5b+R$o_&v3$D^9(j6_P|zIxgO?2AQbnaaleqVm*sDnl3(=A1Ofz zMvrWC8y@^=cX^gwtQ1O<5lF_;J$f5dmfQ%sCLrCC)||3ui(K5~bGzVIF~+z7sHPvu zU_C4+kVw9HbCai;itoc2uN8F9*HV#k6qDXx2R5om3^ zH7@72`SM4okm<`%wPIpL?gVGR$Bb|T9m*FX^T6LCM_f5_`q7k5`q{j7F_^iNntShk z;*V3X7(_OQG{{EUD68hl74s`Mk_pScQao=_VhW1J#i?(QO^!0nO zvqiU<0AiUKY$)PauIV=lfW-RDX3e(|y$z9yh9hnXbLgp^%_MBPWG%u!f2wCL)EZKkFBOl6A20 z;5#H=_F`(rZAx~4K*~V9n|fbs$cq~=j!NSp9u>Z>{@a{%HsoPhrdUqh^QrORO7~GCdyM0-Zf_( zx*ay`GRNLH)ndvG59|t)vI*Z~IYq2#&~gsSD{WeDF#mP)_Lvd;DJp|NxY;ZG&S;38 zk?El%xe(q9o>YBCoZ6yCv0AfWBvzVP-1uqPu5(Yq7=dQe@Q2<+9f1Rrbe5SSbdliF zw4O7*oRkj4H_gNi)~W30OfmnXk17m^v|ub!9>rt=!s~&lU0Jkb8z(TzfiqA3pdFX^ z#ZA$nEv2Ipqyxv)DTg>tK#w{xWYb0CG9J-qY9rRI~?-$onm@Q z3=M(LQ^pS4nWURHS$D8#W-xaJVSj$;7Argba(bakqRfgoiN8=kU=KU$G=$kK&Y6vN zK;cpulfac+3T*D@cIEI&&~@Xm=5i;b)p2N$6@+n60Ay#5em6@{vb zkRv}#|3(sKu8U>w?UtfDl>jgT zci=!}C9HxB@IjH^fiqhvU>@wBqCw}?V78?5>20mwW`RapM5C~n^s=4>8I>#O`}G!x z_g!A2%J3{50EqvX60zKQhS#A#31C2g}Gv7`n= zB&MP=74@W9Bmg9CW^=StCvQcCC-5zRceXYVbz9=JAu77t3TbO zVmtiusLYCke)AMn{~r07j_hnYPo*zKiCQ*&_|XapLcgEMZN)4Zlhs(v&^Od^R1w#3 zToEavD$%475-2=~2GS#CtVSzy-Cz%gE^rHH&Vz~sHq3YZmQi%-Fz+D+X*2qLodk8v zTl<8(gCML6prRaDc^kxULlQZ_!K}uzv71w#p2cZNK_l0BTyj)`6^70O7H;#EH7pR$~#gTu0zOUn9PDKyh2A*meNl zB264q!e*7Aj1U-QsDWzqp!M>MBxM{EzXD+cGmy?MQq^JD;UEVCcKfxAbae0 zLT)=x3r$UG&F)IhI>XsHC^(hG(PSD5A_cV*Z0Lh0C_@Y@0c^un$&m7;TT;CA>70|g zi`PBtmq5iX&*}@ds;6Cy>fxhMd;`_3iTB<^|K*NCkKI`{)$mpmQ@NVO(6KS};!B(P zCkDrdF*HfyisD3R47DuzV#P&@EDJ{d zJ>M1D`IPr=+IEy9?j_>~5Hd@TUK}duR@D)JrXpPHBN5+G@dVy=eYPm-;5bVga9**( z;0=~&m+!%;YM9&sH3V@>-Bot^TRQxGmnO6`xi-1l7HgIL4(b!o_OU0_$#3Xoq7;e( zsbaRxeZ;d;q=;7E?9rBmx;Qq)+UD;8`#wT19)O+v7p@D;9%{NZ2&r87y6>KD&TEa2 zTo|SzeRPlpJ8S&{;u?_@&d*xBgHl~b@L^<+bqJ8}p=W)4l$rhHO{lU(mrpPSeBxn~ z8sz|UXTR+rfpr)YO|ozIWS;!uRZA#j{v-~zaH3toTd!f-3TIpMHi;xB=*H!^E%mDh z$&65t$#E=;uAH$rfR@X3vpJ+J*rkEC4gXo|``n-|56S>xRq*>gG5^NjqZl)BrMA-z zLfMczvdy~RI=(|WZ+(G!-@+^r8vwGH?iqjp$@NFp@#h5A=DEBZ-9y#B4K9R)&7)Gy z8BeW}kv9~oY-s~Cf?=}%^$oI7lRFUjsMW|XET(SPMz0~fM^9}Vb)H?RFS;5yRqVJ+ zU=Ys`H1^B1EG=RRD@9-a!E#Dx2~`>iLmIquH{K5_$$bx2Weh(U=7uy#vFSnwcKv)+ zYh{Afdxo6ag?kP0xZ9*luqOu{4mk0%07#0ZMe5qonUnpt2>)1-T;pH&o$?{A6kI5Z z6hJ$VS+(6Gpud0c;FWwbk@7Ttx`Y`8T6E~|GBv#6NdxzkS&nNwf-}gY(1LR~qG2)T z9vWWi;d@UAvWTzIqf1Ei*rc&441_uF&4FMK^O0C=iW`V(wcu8V%cg)3f?9v*Jq=cH zT+IiBXGbitudl9Nq-q%68o%heL(R|UTq1vgl0}Fm6Eg5n$ykW$l$%HL z{QS;pip3Qacj*3$;>dRh`=+_;e6;R$Kc@?BeGmWR{V7!Z2Q@8^T+E2x zlw(pTlCjY&h5fvb?m(}Z3RIa&?*6KFkxFv_&d*a}9D1*vFBuAMk=?fy*A7$+RO7G& zvPsj~wO6=SstK|ws#N+UM)j0wg6KcK;o{{BBzAHj(rG0{tC|qYCUxLGeB<(~ugT+N zu+?%R9|(T7F84?5YPH(ZHS&x~l|{{+^wF3248~d_vZ0hBk4J5B6q-A!5|#(6G!MRe z`&(k-Phfp_h!i&XH6=^!XL^Sr&E(26qUxYO|BKKMP&uknky&>AvH_{?eP>^52gA{r zk-iz~a-JOrI^_Na^QbRx&KeFbyz-g{hw!KVgDDl&L@NJkE{NVK(78daWC_u2fCL5 zQRKpB;MH$++%#d`&rQDHk?=PJs3#&-!<#QdUKng20|SC-PZ-$9NG_)$5-7Pski>HB zhJ7DOpF7NF3wng)GYsvL=0O^by)uOBnXgQADlaxNOn7036|?MJr@pD64dkn8wB?s?I8|lS0^dlH%T6@CnACJCQy5m(>TpydQUK^mf!AN0Z+cyDHxbxj&q; zt8P~J9MW)3hro9N0W5cbr=jOF%AWVPSGy0Vcm4yIkF13&o6hW%+WeiHkC&UL&BxHq zcfjQO)9U2G#QV!l^NJ+iX#tcrYk6%iW<_rsVAUk^fKTRkrv8V|`!`sJwvIax;m>xR zLVo65J^!&;6HJVZ1G{58PeZSlqgOp24usntU*En-AJFPq1pX}FmzS+C@cgfPuahYN zhS&4gKHtobRRpowl^kznU+&{Kk&EBL2nYDT_Us4WZGOSx1!mbnWIO{zeFwWPmo*{y zI-`=|V4*Yo+X2r_(kI`8_BozQcG!I;Ubh}Bs+isUYskq@36Jr-9M6XC=+0-!#f)on z?`dbe`MdmEVmA_A%J#N=7nx2a9hB7W-dKO_5fqeXRK5M^{!q#!abOzK^~D!|@oWzC z{bpnB(iJ#gsgc8f)T9&TYmpr){n;jfx7?e~ z?xaPC`5nK1VUJ0Q-Yw?MD|`RWrp<-AzO?4V#0TfuzKVEOwx;mn1*MYfb_CkkJy1>6 zd$GEY3Cs9bul>SDOBC-Ckx{1;ZRNfN^1DFQ+Z}B7y2*JJIq-t}v>ITQgSMoWTGRGW z?U&|8@`)Q-Fr8h+hu2rN@p0fAkJjV*I~&~)6VB4<2p4|2n)${YDg$!CRO}my-JHj& z3;9ccmkk4|w|`cVyN4DRpT6YwD(#qfNlhvkN!G>!fMrnm==j;ChX*s@#}9!wCR#WX zK{CEdr(AsLK9kxD=&M6$Lp}P2^v%rf0PSkEz(*!&=ESq={K3cpWNS^b5?kw~$=ils zI#tB=G_ixwn-g_3av5VvY-#m0C-E}-SivX^spx$z&G6%hIc4?}o#+1_Z*Lh?XR~b! zqru%R5Zs-GYjAgWcXx;2?(XjH?(S}Z;K3odU-C+wefHT^-*>CtbN{gDs^{rmJ;#(@ zRde)!tL1>&J?-T9EY@SF6;3}0Es;V=4W;l3=xyr6?nF$mKtnY!Lizpi?F+g}K?F~* zTfiPE2od@UdsnbbvSuCo(8*h`S2TL{;QRaL65+ATVdS}BAQq%``a z*1c!IOzeDf)rh61!zzPH1q9aSjEgbAqqU&lcj4*pM%sz80l4Ts5&qPhCW4Zb-Lo<{K zlDrJSDvfgz8Y5GkwttQQ4>fwLf{=sRy45A`EI0$bamj;7?-XEd*Qz!jzvAkMZl_JJCyn z$O^MwZk=1eYr_t)33#9jC1!iFElN3|rFYh20D@DJK;Ec_g6R%`{Hov{{Yk~cF+1$c z!ew*aJ5A;swy>1SNu8~zWe$J9{v!I#@w4EZ8_C2Dd_A>zAPGK87u-3SHW}v?y<4fx3O}TD?%0Q=MIwc|AFa%WBbqCi; zN}|%yFc>kwQ7!7HmDpB((L>(#A(ZU;HNYs3D*nRXv7pzfujF4rWk1 zTqq^Sf&C^(@faby~q|>kcv1lH^O11MHxs@sH_5sJp z_F0({G$pl!l%#c9RnEo?2KoTHgkvB{A=f5K=|nMW#r%5<%|7-1fLd5&3&W;gs-h=A zcMuWPe{^Qa26X5~8=3>Em#tsg?+&sy8@a+#jwLiY!=I`C=WXZ@&Zn{pL+${($inUC z?a=wkAE^V5BFLJntTe{tQP5>=LOV|t@XUH%A`s|$jmoTj>bjrto4X|YH<$f{^h8y7 zb3xOMM0c<`Y66JLLX-t?`wd}CpYUDY$hJ@B9uFc% zS7YBn;h938*TOTmr7KGcb{2z5#cwS8eR&dtkRI@oyi!c0pkTNi*b~R4JX+%}ptV)< zmJh#Or*yQ(JziESOwv0!@9S>l(SWsRu4MndS6?ux!68?bR$<^BEt#X?Lio8v8T~y+IN8>^5r}ysa8M{SgKmH~T7k-j1ls{}6&0(}6pXY=tX> z2n(JjCG}hxCaqt0Z6A$B)#_;zMR0|)d3u=3cv z|3pxQ_lD6L>Zuav^|O2#D#C0YDjC1f6T)=UFlWgL#;7U(7@?WDI55?xLITw|uTPS8 z&5q(#moG(7qTPrWpz@HQdz8TBP~c+;@>Cf{5>@2HpL0f_!)g&5RHt zHH^^#LglcA+SRcwdWeVMfX!*uH7j@X+ITY?q@=qGk8WV4a5#Y27h&YMyhVDkR?5#a zYhv`u(=bbZo4k%hnj^ ztt)^uMCBt@D1U;e(_VSwxTX*@?)MCW^y)Pq&_Jo9M`Fm!I6*O7+kYCc#CesRK$1Z; z-3xD3QrjR<+M7QV0pwT_kYr23KiUC>BuV0bGwX{L&R0euT#2&^P=q*WLQRS_aGeU^ z(X<$?@jGxGEH_TeI+?Gj$mxTLif9IDpx!0?5>1^qj^ojqa6)vpJV}hn;GJ2(oOhsl zrJGCF1mUQ-yNsh5U(m7{N4}TAnB%+$!yvR;7OTOuE6ZcZL(}Vq6c{#8)UNuIQI|+e>1QI ztPw&ivm#YdUOJ0KE9p*=1Pou4@G%r-+dv>Z`We40t?-z|6ks(aah?n;*-<-|@F^r* zl=0P9UX=9gDC9b2$@=xC;`|!iIOgAQpqz2M<3=N|*B^~qI_5?*b>&g?!;-)(IOg1e z5Xx4GQOvnH!$TXv?y3NZv@ANurc+c!vH#hm;J28Se{ZsSR8a@AmH$S~6 zs@q#*ftQauoHFaU>-)7i{fcM*V`OI7ou%)yIij(X487TLCz&brYZUf?*_^Zg*HW4C z-kMcGdK`GMy|P`55M`i{%`32@V=tLYFP4Y{Rd4}Yb7J#%bsS+{d2 z;m^YcEUFcSt^OqaWM;)9mtt>v*AQj)+&AlWeQoTNoMV@zW2I$N2hF(|(B3`R2myU# zo=Dyrnfv9y7^O$%#9dtdWO{1-yJ$%W@7PIxk2FcZ2uIm+x6#kcQ@Yi1creA6M#vL@ z*Gidnj&12f9#Cic=^}RkRl%aE19XOc_SDxfK;jQd2tSP!qX)&5z?#Huq7V@e`dpIt zf}wy@M;R<0^TL)`prju}zJW<#wP4w(zVf(r#DfX+i60clp|5IeJS?3>pE|(mQSn1V z0|&usQM0i**7;C%o{hEKh~^Umwgm$p=s}n(9SG0|kOr7MV-y43sZ|I`p(TO8oQ%fm zeWx~Eko_btAQ4Hgt_31HLCNUpOD-xT!>^}Y6HvFt0aWjryfnRBR>8#WHl-ZD>d2h6 z$7To+5MIpneeTPB7+$eRtsr*k{(Or1W}}}6y1f#%u8vp@8B&?^%L7bSc67xjw%KCh z{F&BHj@^v{nDUT2yfB$SnNJ$&xNi%rO-CqWJZk+4rP?ebkBsN3+ zOnt+19)0#WR(xNNxQ*#TZ&D&W;-o`A%{C^$+I`1KbCo=n`OM9T-9%qisOE_kx%Vt zN;ZvXiy#iSCSI-fok~6xFGCMJrEh8X$%2i-ZJKOZDn7!U9>>$F_hz>uDlFbaP7QKC z8b&6uIU>ghbykvN!mp`y9_p{D<{l!itMXjsZ<3KCu^h@iiO*$E7Ny*gnc>#@_9RaW z@*eO6PHu%2Y0?o%xlV>gAm|)xQMRWZLZx%fXb05Sy`~-t22~*lO1gzBoRl-vL(hxg zT^_z1#tUDl^0YOaW%A_%P&_Q5q~{G>!T7Mw}cLSNY5wZqcoyL$%I_W?XTHdy}&3QRA>TJPQy<%&53ln zrY0O?atAx!lL(6T9twueAC&6GP$}ww6j9I3@=FpEcq!2ql3%8Lhl!d1u&DfHX0azvB0C#HQiO4<>(<4^~Qom z)45FOh(|H?EQ7M%iOjse&`+1Zo{u~zE~uR4k~FMOO7k2iSth|m;#;ZeyftolY>~L7 zsWeq=6FoW0rMg;eH?o?~$IV5b?S&#E5~hFI$)scZ^_%KRvHH#EaNL?trIw&=fACbOo0vS+m+0~b4zk-hX0Lhb z*IP=F8Wr>}<0nx++%VaC)#aE9FbqzviXn^8R?LX~MSCK8_^g}~iR}(GV(b(t$z${! zft1d1ZO`mlA^B#1ibI(9$0E_90v*%r2qEtShy<+J63r8*VGVn(YNs#7s#P(2i>Sc0 z7sJ#WHqDn7rTGusNDM@;?D1g{pp#b#sG85%rwxqDFiPhE?A$ zG(D(51)})CIhgnq`>=-J?R6dqU)DzW+-I0Vrr{yGbcTRNsBdnRen45Gx%;!Tw1}=B zC7I`AA|64KV+w*ZmIxanW^IYo%wKddqv@8D5myeD($>yU<4ZNP#)Omj-a_l1ZbJYw z(|5ZNi9~Hi%2*THduJ}s%OU{@u&6tsn1WzsLIJVU0L?PNfDRmi?=i|RsUXfKPzc0r zcDPptpnP7L<8NyM@EwF&jCFZR*1gasU9&W0RYbP1Vt!eJ+Ubygu6h9@HkNIP>eA2R z%V46S<;(E#Lk*yc2emH?zy-4H1Gd!@+XFv9R!RmEjh$32{A6d=Sdpqej@7EY-F@>7 z+l6k?p7sqC8YlDA8gs2r)6{hv#HA0~vLvkcxZI%q$AWy;%v*&bm-gkzl9-RT3v_kG zQC{_xy=T&d(JpnAinMY9rX<}A~A2#C0QeF z-i5vjq?C;e!O9*JDIMOWAL@>fw z>PD%|{b@di33WpEbQ0x*g{HV{N6nV@b^H)ln`xsIqw9NI`4}3#7`YoL>|UPF*(E6w zt4X%Q{a4l-`3nFTOM8H&HG1!um4aju5=W&B^jgnsuWsrziXZAVHC4*+NJTnkrPzGX zY&!IJ-}i>l^Z|N}+^D0%MX`$P+|>Gb(V|pBh*_;6lF4&zOzH!GRWWWS$r=d+rtQp>y;=Gs^0DlKuFCOSv+q%AJ*RU9|I2_VT3M%0rT$nk@;5jg>aZBRR}KF zb3=~PkhG5>d6eGP0`c{-ePRO@QCAIcx$G@)sf->{Hol}AC@;eY9H{Uh%E94D@+^9w zF>B8kT;R#n`&n4VX=SXhHF{?qXu%cbjdNIyjfBZjP>791m!TCwsK0WOQYx{pqATRYBG&Tq0uSd))4r=14qp1 z1`v!atw7I7b%5ESSgg2ODZQRL z7X!C&irJ&e3OTdF8L|+N6N{W87}(|igHNE#Qw+Ihc`}arbAX_d@lPh&=BZjO8q4UP zyf3i$G7a0!BkEg%nh=|LyQ1Hia@M~YH(Y1Rj-RyRPSO|r9578Z3=w9yIq&T?=)a6@ z5xPQwuU%e6Lihw;+ide0`>x1kyggX(;E)-K??1?*`YlRySY7WhXe%%c*thxgRG1e5PD`uWPfS%IeCWEah$ zT}@$M^|hDNrXPumoVIiD`V&+#%_NF=?ss?qB=-xF0#xv(^THq%+B?$IMnSHjcH(Yl z=79&-9cwzod8>=+R9eb3FgdNrv|aq3-v-Y|8>YeqL@=ZUD!aSpj0C;?5&6~6%2A(6 zZb3q_N-E1`P@GoGP@B$Wv5WE3X9WO(o3C;)C{6UTa+n5I0Z}&!e&s?SIRT#a)ElAZ z)^?{Oae}s!nxt8HKCPCVK}7zA{FG_hqc$RnCL@a-tXYK`%@Y|MNBq2Z8KMzm9lnyZ zMWER^huML$Rv?8-{IR9K;6;uAGPTwq7&VQHk(i}o-z460&_SCS?NM}_Wjly4?N?>a&yaaxN&n;5#(Oh#V zEHx|=lWMul5w14(b~K<^5|FK+Pazu(`j1mWWDGVss`FnW4t(>cI9zHKunA*>ft_Nz zB;#R^Z#>m9AgMz-YmeJGfh}e>sKu}$#VMDjdZf_jmq1rezY>5h8#2g5l|+Jtnss4Y z1ZB2Awja@si)SI5U1y{hN3QoVp|=gnu+%BKD;#q!(bhQW+>=CDQc3+L7#kPLlQ)SP zVh$VhK;9o1>t@;*61@xSFTST8sVs~|Fm|gfGm=mO5%8Q3gdHk`AwAH*Z1lxF&2-2HqPXQXJ^N)PP?m>^r6uc0uwH=}~ z9t=5$pyG@lwM8y^Ux4*_kzvgG^c$1SIW>^(Xe$5_ijMWiOzh(hBIZMLpyi?oLl3NEvu=#Dd6<$foP$ z*RNWXD1RU&8kvvhM2NF8g{ZCjDz%ftRJ?ctGH_rvbi39#zjx6ICO6=V+ZMkb&+uke zLnqpX=wKiml-IZv?*@bOFd1RQXLv9hMpyR&Gkp#zNSTdBxgVo51`p{Zo|q}fB2)#Xhxw^u+fw>dgsavH zB8>0>QD(TuC_M8Bm%iqpkEX*+8G@-hT|}9=>Be9lT_3=eWJd$rtfddz7N91*hpiM6 z5P-{wW>!hRN-6+4G2X^lglw4A3Z=m5aw1oxRz$GkxIJqlHBM@-&#pOh;1`k7a;>J6 z0KSVyOqPf=1jZFB-F=hbv= z@)nS3(9la$a63@1x=!}_446MaFaHr6k0g z3a1b{`QFbAD(tuJPYvZ6UIe@2hyH}kRdsGTle_d`m25HU&{L&`$Co5G#&n2o@B@VO z6|W)5KO}e!cww7<($&Bc7LYoEhzDR13K)vd(NiIoW{dm!rg~8;LZ<|bP(TTGN?<~Fe%z&-OCv6cB3iE+ zB<`O=YLGfMZpEp>^_>c@qA4d2en8Q9P_d$GEcHP#wAA(|N!a5Bb;|1$i{M1*7;oai z71i9G4EkZ!ydD&H(6TdHcSU=oO}XYf{Cl$Qr4`qprQ5Ct+X(krnT{rMSI;~EK55cf z>5)Pvy=%j`9Qo=w3xM;Ix4MSfXm-Icva$g0F>JX4#4iG{iUh4s>vy z^cad(eY{N`OWw17fs(6bNnr(s0HA3HUN{W&nBhBW8tt?OG_i;-IHHtaxess=_c zxxSw7S9UTQfiP+KxE3+DNzQ_#E-XKkl&`BMl}!mx9l-M9oJcPEtN=ClR?eKzZq>`L zNE=eF;Y7hA(A8^}lZoKo_XMEXyQHS1=d4W5`R!Q^tAkn|mi6(YjCgu7mTbIZQEgc7 zv$sPPK#IVj)uFb~vX;(B*v&iJOavAg3^U}oFhFf<`*pNi`9P+~q}2Uklgd;l#cKk| zvUXiqlH2Mg0Rt(MfYo}jbXc>7Fg3mpDk3sWL|_ip0Z}!{+EIVxq%=>Q41b?CUMZtY zd{Ez!pLl#w*k$IWTGOg>PshsXevffJ&1|P$e{asqXJL+Y%iRY3`tlLQS$7%wyPYJW ziKwxYPIS9qOzjyS3(0t~ZPQ8+u#FR%1f~7XobUV-)%7BxqR8+H5I_+lNXm z4e0=1qNf6VPFty9r%Gzpp3i(~)69DAWvRIfUENZjKJo9cs~{T#Faax^YC))h%Uyo%IYBF zVprbQ0<6hT9#E5jJtT3sr8XN=^c8q1N`APIPr}-doy)N;oG%WnUe(T+>P`;Z_AVFd z=B0ZJKa@%YM|gEy4>JOCc#o%1u&n41MtW;Z9+!cyqOJH|3j~4F?HMyp(^yN{+hD&Z zZh_Y~J&8#>4|i7@VjWHYGVwlq%Fx0%yde1TS^~GF!TGDTm19$Cf6L7J?B-%AtLa$8 zN9QQ}sx9!8oVLHiC)80S#Je&x7S(!oBB=;B_gevTt5SejkNpI9B$DcYvqn zGlFa-nKRNiI4x>LtIHp)r=?TEf$+kYS5e(As$93NUvF5JsX7`aWVR>1^TnmZN$BiRS7SF@2PD-6E;`0_9-J|ZWL{KG<9Dd1C(kft6m&fStL5Hax zNHLB6)!X%M>MpY5@t(I7g%7XH4}RAgc8EF$*V+b+kE(sW`htrJrU;5lvDo$%A%`>pEdrqhxkOSfpm zt#ekBwqkQf>h$5j13ai*kFiF%!A)l9dEP4vd3f#&iU_%nZS8#;j4)Y)ZF`^KS(@^S zqH##g&vp??$RE2@_A*9Q29Vr-LAzf&Fxhm1)Uv`zW%ZJ_zV>m zjMxgHl@gAOp^*W%&=xho@Zqhp9%pE9P_~3;9-8CqLJQ1BonS$-?zEVbK;A-+gd<0k zmlrI;6t&~RkdYBL|6H~)O5&*;Y!S|ZFxu@*(brVzvt1n#qP)JlZu z13sdNB7U3BuA*tyh~mxLq)&d&5xITy6{c~nsU zt)&oXA+#geY1p)5zWb@Mvun3YX9C%fY-6-^A{#u!w(_M4Y+qI~)$ZN|9-O@x|71T- z$NNes-M#eAEPJ%{4o&UeYP>6_Q@0DU%_?a0g;Qa?E8aOJ`{Dw9$N164StsrIjL)IA z3P)%%R^OjE2MA2Y=pb%MnIfkne3ogEDzYR_hzH-k2BNlgbnti{lz5 z5cBYiL>j?hsG)~$T^J=O@-&^oc`jjGkO7(+9ZLp=`>vCs&%9S49$NOrP`S#Yb?m%C zqf<2`DxPJ9#iVNdqm}TKJvT6T-hhT*%jgg`e(rwFs+3n$IiTRNW*2d0623U|W@LgM zzVh;V!Nm`^c(*=ZCH3O+Oo(;>=q$ETjNS#p@`{<7dbhPL4zofvUi{nzjha_J>$H+N zXStE=>TwyU7pZvw99cOwFz&wSt502)KRtZ&w5$p?dhsq=@Wl0AnbP(? z+zo!SyUsm-LR&Ma{r*yT{F&H`%j*I+F&ljp6yN{gsK8L$H!1#2% z!;731?a9MkQmcksZFo+uhKk=v-+wXLY=5*P=(s4dDIOMuO9NqUW~mc(RP`yNnk_!U zV;G`ARMa^8@4aCNIeKn7`!DE%9@0?-!mf(hbBJ^r;&~9SB%&JP>7pVwy0nIuyWIFr zY*3*8$P)nu|3SPgZtDd0?k0kOIo+Zr#z{b2dtw^!^$R6{30tW2wMGy^cBl81`2XRQd0p>u~oW z5G^W)_t*Qc+pMa;tlWrSpP@);!tNB5>_!m6yRRxgPlmzJy|}IF|4RN<-WPm`CStd_ zOb8VHKvU?Ar_|W#({Cse!DhRr*r>$@xT!C?F&$uPjh1mlIE)Riyq-*F7#o+SkC|OP z?tA*$ow3_L^mhEYc#}&)79V$|Lp$ae-bQ?jhtk4>x7sjRVlUBBv@s4%Su_y_s8|FI zux~z3L~~~hMq%St<`j`G+mczxT_}jl@a)n)A z^)Cm39HK8n?chbmDhy_mDUe42f}~@`p2)_EBZB6VR4lcQ;=@kbC7^oV<$StJo?jPS)d46Jg=`DFZQ0n z1@tLK*3PYc85gR6ZguJJGOqtRG+y1q_;G?RboyoCPP+qh_L>w6Cf6J`?#kKiYC3~h1)(P8RN)IAT3?G9( z86|WgOdtBXf4%ZCU?O0m|HG2M1@Hf6t`PjiT>1UlUt*shJeJ?@{Y4P^7%>qrvj0W@ z_!u#NjQ#@TW5fc@$o|)IAEOTr%?DZN52DD&=z~PV{$I1OeJuayEdPxg^Cu?15zzQ} z;LoX;=>Oa&6aAl)G133Yg<+!qb2=vaKe;eWA2#{D7!$*v9Hjr^#{99DzhV84tcpK< z?=Sui0iA-AzN4G1(QmujTmAX>k0%%i=mb8 zpV%tE4vLd;3&)^58GPQ=rVEFBwx;<7M;9=1DM|f*3gh2f{@cF)*J1P9|AcL<9sh8? zfAP}aj`^>#`5W!O7x||^WMuzCclyI+{td)GUFshpI5Gb>nvRq-KQssfV*7KLXV0qR znzRNYLYS*Ixoc7$gkE6dI|P-#D8ZMQfQpn_LgUdHeSKhQAqbD!h(842@!G$h zztA$F8g-*Gb&H| z#0gh?cN3qC80E`8yAW3r4M$_}pcpTjW^0h~Ey!~UxDnF)+KV}340~8&>oOdrUe)Cm zeb-a^SUrz}NKfMbA29r5$A6pme+|Rm+5YcE{;@FpP!#%&;lJ|?+5awN_BKwof8+-R z0y;%|J!=PBJ$oZ-12+P?uL>W9@UJQ(M&M}g^pUkC2#obC9gO~{Y=0@XGBEvn7)n6* z$s(?MglYC1d2X6O|JEuFggE#5DNrKo;bSX^2=xUlE(RP0-H;{srgS3{@(E4*8N|D@ONGPdy#((!VeYe-w*=+Et9hU zS-k&|F#Mn85QHE0qa6O$n-(kfA)rOI0sWBJ`Q7h&om5_$S zVH3+Lby&Cj2t8s0^YSeFMS z#@`?^v;12w{Rhu9|IYXQmt1NFSnc-zlkThbkxOY7ynN^hLjnvTCs-%Kps3^vq2-Ej zkpc#)<*Qu3+x7ZyuYjsU%&QW=is8oBJ6jVF~Q$4(AW21 z3%n3keIY6UNoUAVLexb#RsA)2-xkbm$4JN73Cz4kviYA-{C{z%`Qt?VkE6)&XEtU0 zH`X@$KX|D5PZbgI+Xc_yJ&3i5u@B4+Khks{_yw&yBIQCCZ_5XYh#+DkeFFm2Rl3+2 zs0$h33+;-o-&-yX*{Z}fkXVhweUOEhmY#R)QSqVYYF}GpGDWYj@SjTxq|(_JWcUOl z)@Cj%9Tx)*VmX*HI&&8|IcptXZDqV{%U(}!KC#%7?EWVV{~w%c{`?*DPh-gN;TgXp zk%95QMIsaZKX|J7pA`{A4)%|VD7}6UVV4_n;^*&y--alRx%Ju`Mu02;N&JP%xI#3M zvH(pST5b*!DuGIyRr7Md5!aumXCbVJHxw@4BfFFszSbXaJv%%w#ey7iRD|8;$^V-d z$V5dAeCSqKxgj}>Wv?T=H>mS)6pK!#7lOwRLvLqqP)_+reKg-mJW)g|Zx_G2=wc_Kha6qe>8GNGmy+B8-!3d%=?#6P{69o)C zz58afGBPoSC7zP5evcDgC-R&(tf54(n;IDz>CS%Nf4O()?y`KT=B?Ixue(h?f4O!` zOHLl&uTxx+K^uZeHalLvmU%m;==tE>SHB;<_)KBEr8iv}rB9!%%w9gezn;BRzg!l- zzeu>e-Ho@_zk5F(M7o-g!RaoQ2nWxm_IKetnYkXdvq${E_50x5*E%}1b=-hvK4)*w zWgp#K@Fg8FMwCb1aK1YW4mW2{zrXam<-on=r#tX6)_+j$v)^wH^$gK@UtHgc$Bk0D zc;7F(r{8ZO`pcS4=pLJuPl~-xb|36lg92%%+G*c{Ik1+;jh@EuO@=tv?q_*ip17p8 zvfmCLgWul<5Se?!$)^mv21}j4ztlynFQr|!Xwr5L^>1Bm@%8+I1(Am8Tza-$z&N|o#z^(!E=^3@K{W7668(f4YBQ3~MWzEN~FAlN?cpEb|4-U91x7755D ze~J|LtGH%^5!r?5Tge&`NI!xnpy#+xiMZW$@$b3_MqRoL;78a@;6uh`F5$Lzi2b zbOK{!VY=f$6}XPpLZB!&s)#@`x(g%~tCR1*FIR<7_mCC`kw}0Pt;UQIyXRZ#ak8GO z;3PBy&x3Q4m)nqI){_vrb7avquC6Whr(dQ-*qj*%jcZn zjHj#yvT`xZRd zlE*E%98HSkHZbIwYO+mnxZ2mylVSGU*XXsaZXmp(>bvHwueRH{!I`lX$&?S+oX14D zh{VpH7OYq*Y&DYlq!H=L=k$an6~TnU8LEJH_SsK5X-xo2GgB!;5M5?1zQxy+A#86R z*sKT#n`Tk~!R*|NcdvNqGeED135a{XGh%1eW=qLix-M-O?z=AHp?cKJ2B^SzcR0N7uHyUgIPM?WkuxJ^YQqjR)@bn{Ec zVr($6E@ddnX(dxX_8ky$rc`YgMs;&~j?b(MIh-)U59{W#r&meXsJjL`7qZ_Htz055 zUQ{2OC}XMV(SW+s!z$bA?z|P?NExP?T9v=4?guaa`0Qu&i9hYwSEIhHrsC5eIVTIG z2ZU^qOPp68l1W6$5ch?&gL_yyC~){NpVT*rTmtPgTq?pGq>;o?V{miEMGE> z2AEan3dEvG%wah*mGqX2Xy>aa@l(q;;$ulDHh{+5TTSs(En3APSX|qn88=ElUBBd& z!}u5$BuZZ>ePc0}du=Mi&hK+qfNSdDuQ{NcMzgkTboYi}fn2+TE;o-DUer~LYzP~x z8f$D}m+|=Kc81c?`@E>jQl5BqBA8i4ucbuDx~S__Qo^rM-O$;qvY2z_I*%jBS1nY) z_K6b=odpw7%S2YNF2e zG7^=gBw7J-R+t3nA@S1vFlHl`IPH9zGH zGM#5bPFq-*(F;063{t5QaGQ4t@RvbUre?Hqw{~&S>_)#$2lOBf{X!L&_ukk~Cm!Tpc)v6-jZc-6 zV-6@($zAEBF)AQje8xg*V6_A@V6E+XiUpLzp@HOB}PM0$h~!?li515>CG1$l*9z=)~}kqX!_zbP4%h8mIWePrIvsxUGU!o@_}j#BdG0-oUu)VXPb zQ$hhz^iT6?k@CZDQ|$_wf?jTr3`TpVA1q}NaDA!?upWIbtl9xrLfG05BLgx?K^3C1 zjN7Wz7m`y@gaxPtOqqL8Q^!2Raj2!6ekNwE0>14HYHe%uhTSVXEa^6Z)fLI_8YLz? z$b9vUg*2fwln;iQ(1bIfnJgg4m2T$Ci0)Gu+=AJiOfe-uVgwsVvK2cD;a5V`+g6)R zf}Q)BG&sNuZk$2}v%ad_{kaRt5(kY2B+_^(o>`rZ4#FRV_{$PnOx79^030ON`I^Q2 z#7)UqRnh<`4>74xNtn`-YNoKZcoe8MMk&+IPjJC_1zs%>EcOSD>i)#3KIE2VDp-+I zEK=IWw!{sS4V#cZamb_ASF%_Np@=yA&m}8)O^rFCDMekzr-w630V+Yf`Vj{A_OWSm3Yw?Bqi|B&=bkf<^kgVGI_%y zB~T7+s*<0v8sf2T+7v|2)pHqluDnquN$F-TcxF}_k*#5{8j!)da7MG1?~ z=F6x#e+C%sW*twU#+GbY*N&|LNnuM34!q5oCr58tQTXIil{LE)*{iJmjWw8gn8{t( z8)NKTNPE@g3eFRZn+NCX@RhK*tSZG*J8%;B>9?qD)X>EKw$ z8~Yz_Y$xO3|ZHVy~W>w>8-t@ll@d|p!n!<^k5{|uE7Wh#_Pr= z62Njm{8ArH+X=D2-e62MIrOPuao;Fy&h;pONA!3;@gKmHvam~uZDEkO6+}vp8zEb2 zV2oRfqYSyDxUG&@Q<@?f4)MgL$jTRktr^#q`4Yb%_v?QdyUBp|_XXZWp`JC@l+~x& zrX`^GE)ruzTZ$8lbUyz6h|shfKLB<>rJtAB7z*Y0;Yy#rk{=|H$2EtO0F79!Tp_im z$2>H#p0dXIlc9^lS6$^VQJN_r{wD)IE6V#GCT=y=jtzO0m zPL8cJnIUD>JFbNwiO#DT^$+9gpEq4dDWFRhX2*Hwt2u$m#Mu_z;P;{*@dg>Cv#0$O z-IN3pwYX#FrnGuEZRzEwdf_)=uZGl4F^))fp)*=Bn}_{!|N2>XoUZ{&bjkq4V~-HR zdZu{{Hb~o#GKkQ}P{EI-@iZHcLHsUSxF|>0%5NCCf^v{=xZ&Kk4g4ug*ll^^NJBSb zY;D8jT~T!>O#@(M)2t(A#$x;xbO#^CVeFEcAX`U|B?!4OkLvYASJL9UoL-F{kHRH{ zw7=ukCRD9wphu!EzEAqnR;G~KB?=fv%}6-mm-RSB}Ba372I&Zp6YZ|BPX zdh^ffP}p~$75)8q1;bm8CLd&fF=C2|r3~4t&LLwNpEiuYj)Eaa7$;67FG$wtRJntV zb7Lt{-;?==Dbp&7eBV^>SV3^%xD(o4q%K%aBfC`+Mzc41$-V-^Qd>%>`UbvA!QUbf9>dDTudeUqr|h!9nN*dii#A$>jM^0DaAf{M zu4O$)qE(Tuo<#t=4WGd47>q2rw?f4aH{P%+B~w!h78qTGEa^Q1Cv%BLV*1fI$-mH) zFRI^t4@Nb_4dNxpIMDN|cz~b~c}!{Yrg%TI<&=EU)YV3`5|>s#V1d=gngRH9*fzQa zTeH)!$e;An<10iDK^2C8?%)<&jU|^gdyx&82BTfs+ii;#c<(I5DQdB*c1M~XFa{bO zin6|P@ATvuNfg26jzE0t2w$J78J$Gv<76v01UEB}4?9XZdsoLUqhaQ!eIbNtve6CQ zb~nSfl@tZTU?<5j$=E95w{JhynA11#Eyn!?{R=kmp#ng}et%YWE3}B+$Q&{DP?M8{ z$eT+F(AbiQig)ls+Pg~BBs_yo`0M%?RAeEOQz5F4Z8yYy<(DKo65(7|$pTFhVBBmm zQ_2Gj6=D028b_V|q!@pV?NA33MNE$fF_t6Dt|LGfXQYOtV@}+a0(ZH|HjwXY)l-eZ zZMEls6m|>`Vl0JrKrU>2Xqf^vZp%-uQsd_^^{L3C%`20UdyQzT2_qX7kCP4{Il1Ug z*x25(_WB~xPZn8;h#%_(JW6% z;Quvc6s2*5#m~6>>!U5$6R7!E$N`%=)!Sy{LC!9Z5y+tN^ebk)*}52)epV0zdhhH6 zGq%g7v0X^L9JJEDs%)Oi|KaT|quWfjwoNlLGcz-@9WygCGc&VeX0~HyhQyed*)cO? z%oH8~z=a*DVQa$z5tzEUNr28sthlS$t+0K|)L z5SeenTABxl4q3VL7@=lwDYud4361uFRIVYn=yYap!}6omHk#Z?5^NkME5NN{(w^*^ zJvOb9*l8y68=tVv!%BRig7>ykrz}BJb(0y(Q?mImlU=jG`W$4bxQS5hX|>0V5wO z=W!Tyz;e<}iqW<>ZgkK>X1nCy>aEE;ly&5DuQOVO-PSl}Kr@Xc0ed7e(d*6GzpUjo zBx69MMCXS#mYc%$%v<|e)mT&9KTFyb9!*n+CkyV~%?TaWzI`iPVO<}9ZGWt`5-<47 zYQ5QuqaFSH3~X*~nSPhNI^IL~a9BV3s2oLLHbWx)pf>j&@eBv-0D4ntdpC~$jWP9M zpBzKuI{uKnl`fULG3`5QE@wnJ?`%?flgQp7P2%E6iIaPwxq5BZK#hV!U>^|z3Hjolh+B?SsN)UoX;A_1sg%d*wrZ? zoF<73bAdS?PtaMDN{BJ!H*=z-6h$Fc$C9rElKTFV<_ALH+^B&gp{W%?_O!a4m=I&( z55CPaWidFR;V?m;V!37?rVt-Dz#F~1Z*5}6<=w~RW7?kVeu(9m#-1lm%omhio-!Qgf~LIm-e!6A;;+_~6|T64 zzMUBxX*6y8+H4n*!+GDx8X%Zfgv#d6d@6+utK%1|1oU(ED^svSKQEUkN?Qr2c{H_$ zUWgqr85j!!m-tnaFY4&E^<2tuH)y)pYfLhv#h%pA<#e&SB@(#NdYndqt9)mA%_N}T z@g&3a6-=t}qH9=UWq}J;Q!UP07n>KX+$y;6!5=pao=&lWf4B^!hWg7;`L7C5gZrCvG4*fU!&MxasR>3t2*fi3({T zp=>odOSnLE)F(SZw_nK6pTG(h)ES4xYcXgw>@otA94K?>uF25^LFXD!L4dx>99056 z1v&c*VYCl%(jmD*&7Nwo=Mp|0ks&4bB~md7FL=o@R-Vc4b4hU1^BKS5TAn6~6BZL> zSs+Y2iGgi1xrzwo*$?F~&|3WXo{}IU6RP192WK3KYMQ~Ffj>pNH0P_5N5!zGUM{1iQ0F=Hy+3>3Wgf~hjEaRf-}luk0M;igk493vf80zZL_ zAGqfW1uAn-3|z3O)kHB&0@-KJ_Up0Ank9@*I3>Z?9z?(LEr(WgDQxoO=r<-0Xt~gI z`}r+h(uvx{g{XHun<=?Hf-pO^g8l(C=s_pn1jN-KUO#Qq)Zu4;5GbxDo7jZruolyj znAGp8Ox5RTaa&G@Ec*DfDsAzHF8z0%qPEZs}SE)@-;Jly@I zu}7E^Tv6Q&qQ~`9BdQQ2X0QmFrD6jtwQ|KoGSRFUKCDJf@CR0pJ8>rIb&30H|LN*vRO^d zjsH+CWJi$r-)hT$jBbAYV{%DYP2dT;>jk+WEsg>+%5_4wNZ{1Q2Pm zPMpZNwZRe!mDqh*|5PSB-oe^#4JJmkxdM}k7{3{)n>l*FZCq0`(Z~T5S@*}%@dGI1 zMq*c-W3WUZ^cQ1Oa1mRw+~qwivJsoYl&CrV-~hQ~R@Vd&KZ9EzCT~502{YL(J&HpSP*RaQR0W zG}C>pga%^F6~&2RRlWVjN+rb(%=G0!H!x>vs^dUNi;Ku1<;kluUhqU1{l1JsKt+I- zhzBM>GD8LLdS@cxsm8MOXbvXeiBmhj!(rmO&EGVG3WP&P4)YQFyY_bjp=dkhyTW437gpA)Dm#;vajTm*&{!^HACD z2ObVuOSa%M=04V!K!1c@jK6mhv=af@Iq_zt_b#6UV@d9(KPB#nRiw z@tMz}=O9kI+k5nqBvMTrv)_?&xP6%mzYjlD)E;tW)Rk!%P8f_?TTQZn%4NalPPKr~ zWwL%&NFwFKp>^!qlU71za_m+~Ob}v7nryEDHZ>u`CpeJek-%6ttd3-&EEafbPMR8v zK=OW|K7p#MU_OEGJhf^{aG{kZJR>9-P)2ro-rwjYNzyW+yk~`Aq+t6O=Dgq&j67xF zday!Uud~@wGb0ricmi0fDsTsoW8V=+W1(b-dpB+xYKJV@&J|+mT$Evhj*KJ9dP0Nr zN`~?fj3|QdR!}H(xDJ!(%bc;V3X?;B6B0$OY5b77jx2ISODq$v{84WI|6Rs4Gi5=t6R>St) ztT}-uDZ6s>Wm9=dr*AbAM8XbT>JKPs-p%L# z2Yv!v+@vr)YwT_MRERF1N*EA}9{v}Nyy>;KQs)_M){mU_8c$g1)p4!3^^ur6*%QoT z?^2_w(v|FKcVFtq;#QXWiW^}_cgiztR??y33iUixuV$drvFj}9hvdjTUCNMx@8gkQ zu;BYVnk=yb_6Gr{f!h@lg@QtzAUEwyY+Q&QZirx_Mm^5WbKNDo-&AHu7VAPG83|;w zoXxn$_#t$#;bYKKrB&$>>Yx){S&Lblm1$M^C;ON8-sM>V_BeO-HnS}Bs7sj5Xo>9# zw!^%na+$0*Kd;2*Y-2Q^Zdu(+QOR7adn5D>uzKBF#ebeU!>aXq-?!{$^>T77A4x|V zts2xfu)bfGUBjGqxiXX(rt7AwH?UZ@%%?Ynj)d|=_;!pzM$eePn{?U+Zj=EHUjLmW z(1{-}QvgDRtkx?(4b#AOvkV;-g|BBjj#WQ`4E&RG4$oVFk8?JLv*_0oFp#sOMf%lB z9B2lj{BZ+1a#rK#((gkoz!Q9M(nk#|XJeoiKq=1iwMIGk4LZ7hA!caxIwNUh`?`2? zsy^f&BP=fGgg;V5s2iXq)@S#gJ3Ai8qkDzo#lOOIXWI(?n~L zf3;F97Au%q%v@@|cHSM`4l}xK z;;;{wZTr4yyT13^L@~0;O}-za1r~yrxFmGaX2x|ydu3_Vnf~Nbhx3)H<3k`Et7!SI zCo`q1KS!($8IN&#L1~<39n#0jHr)YQ=}AX7ieR-kTJJVrat$ecm52hWymt}=83A#Z zTWV<@`@Uxza&Pk299oAO@t18fAjsoY&u(?fM+P!Z@XuS?z=1EFNS=2)IwFNuH$E-V z4jr`Etb*kV=Q{f7Cc#zFw$Xe@+KJco*?8iCXtkK#w2B=%Zc9w=2o%h~P}(oc$0GXR z#-4+(%W>o{LoulNcJ?$d^wBW+a$Z5i{xo?t15A#V#w%KTMh!3i84g!V7kA~3qb&m! zH_7o>M!slqgO!RJ(z63cyHn3?rFeXT$r6B!>ZUM^pMrP!-M~KF@o06tR(1O;` zn_~l}@w(j~6eBIEn)AA6-JarNTPiK?>bsdLMKPLo586dj{te4S13lNO#X$`7VQXD|_~Z`pe6Du-AJ4CzZ9-M?h6x@Gu;<8EJ(h z(kvk$f-{^q3Njx7U#GAwkaZ;FNUm{O1E=pD?vl{fd`>e1lE(9nQ<=$R+A70`+Se)k zFKIuzaWI=S4PQU>dzFmL;(TuSloFBEbY$TZ2k+u*vY$9RtPTd0o5XrE1hg}s(krOr z!=s-N{igIiEae9sHPEaRP?``(3Bz?k5SfV?l?W<37pDy)Ja)n)p(TcyaiA-w69_t3 z#y8oA5p<49 zBR!4j`%pw(<}RjVRy?WSf3`7ZP5fwOjABFHMd4X1aIPHGFdvGKrh!g8xDP`Wh16%& z^RiAN!e>Ed1gptd$tOaxF9s(Ngf1GGQfX*-x?YeI^YJlTO9_6z7X-X_h5_A@ z7U&4;jzaE`M>fXlqajRhYY|4Yu?TLVR6%M~Xxo{wkqK99V|}aw8Bo6jABn)sHr0=k zEs8-|n3x_jJZZ<_JzcrImvtbSn$du)$n(N{t9=yQ*Q@2qInS|mevU43)T!2=>BZ|AET8UeOWi7dN_S6CozEU2nZ zPHXDQpBWg`G~;(b-rTpN|~DDsqE_y!$LA_K{;(oxt4MLv#L{QuF3eiK!Lx{c!RAfw{ zz!J0YEgfDDn>UHlXL3$rrU*xJ!koHC#29UEv+GFK?W0VDsQKpsU z;O3QaAS6!W%bHX=lJAAbBX@J4ymYul!-(%>augZfJ-K7Jl5!_~V)S+M8&tdNp4DaD zIqcfzw$mme0gcwBYh+vdaRNTpiDCfsJ*3p1SHQos#|C`L2$C0H$wD`s#L1o2+yRrUW{h(<#COv zxR*c<2f`3Jq=x3(Q}K6&FnI;^*W!l(R#b z`%Gf4c7v#WQ|?hu%a2_@h%G!idAWEh+kz27cl8KB~}9TRTc zU9xFfO%fyz8%>cB=&M!4Kek|j(77B9b&#rN4!43HHxDtBfH_d>C<6XIO=SWoxp}(5C+<7NHngfOCQO7-8Xbi z$h{Yuw^1Q|;11x}0yi0^Awn_2QL*|2Q_7~GC^c_s@oKD;#Zitm<>a0Z8CGSHaDIBv z0?tYKQwmsc*fks{Zaf;Y7~(e89P~$EMy&b*nXbmbe|1v0C@ToImn1 zAFDPz84E{CY>?(VQK59ckNeCX5e_OFMhf#>VThuY^3oRjn{0LuxN7LbMah`nG`A5Q z&l!XBJQZd%El85-$q{~HBiQ>=e>iOnMjpf8br%|4>nC4S>oxfJv3GaJLkpdn1CLyJ zHFpyhVy}(gd3;wWw8%o_7K-I^Mf$9WFB!X(vT@z`$)1Gp!0Mu`M$dE!%8MNYvFDRl zT~9rJA0y!>1dl#3C(ILS{%^d|~u(H^%st{y+Q!hn*ASfx8&F1btNdNYKc5Sf$2t1;g=$A;NJj zIs8>Ez4W6pwW;^UR{3GV6>}t$=-BATp!bxw7ggm#Kb%>9z_$g17lWNEn-hkB-#Bq| zjV&PvoNMp%6%YDV=42z%6|yOsofsZz9!-MMS3Ewf9KA zUExFD_#M%G(Qf&I5D=a3-ZUA)qE~VHRM)hsg15YA5d3*U zDf(ivR>gW)0Pf~Z^~@q$z_yjmJf{~2rVso_4Z;avA=&ewT*lS53a|eX>Id#TmvrcN z%5d~7O7zXdQ+8E{w%`I{FdyxNG+r(>zHWZjp~p12>7_+wo0z$@dy}w^7$5NCSLc1f z!n{b6t?b9hYrG5mD3M;+mhz&mVo(${L}C0v5+b zMRtb1_tdU%x!6}M5Ba#Wg^Va8!*i?!rGhxkC1daVVzmG3b(Fy1Jd8?h1)mPGGyisxBN{q6l(S3^CIc{hOI3X z50ZOzLD3CstIve(QZLmXpJ_weuoi?(y2hZPS_?wkR#bk>FMkeg!%=zT4{yWi^Cf)# z=$D5wXpMZ-WG5A+(o*`AQT6QLZ1$%*mzWe{k3?mtHD+^3>@8@R~tOJ{VPnDp$>QLbA_z9 zR7n5e;@$a2L+0GhNxT5NLx0Xh%V!(! zv>M+t;)joq4@?v&HiJKCYaR5^8jho)l^%7w`?K%GYnwg0{%f)R>Z zga%oXxg)is+cN(fk%w1Yu%dcs@=CBQY&A1rY;Lfnu&<4tb_L-FHkR ziMc!)23Yc^N$n?8VA4F`&>3nPPLLRY5kD4K1z*_QjQ#4nTG++I1|wN=?rD%JjDxzE zHnsn>D>C+{RTXxG z6W^c-{4hi-T2gSRsP>d5{%@y+Tt*7UoJ5UY>Hv^Qeq zMV7zb%Z5HYg^l~wX4;I44UCM*X3eW_(0x~=t$GM`NQ*BAr*b{!#r!};CKQKnE={JU zUQr|6;MsyMEsC!?yZR2sS}jaj>4U0vebZitG_gMO{?#>dTO2%gUV<%SCFH5-p7 z^m#sE$+^4)4lT}hUYrXk-tBARJA3@yIURM{UCGJWEuk;#5nR}5RBk>Q zg`BVjnr$i1umy9@Bqcz~TWueYAzEDFLR`|R9PKP`&qb&luc@7`9Y=EL;*YuI&2`_- z<#KgxEV~#86K!m&QakEAC-p?NyWBDFADnC9ADoxeswQLAC^_2}d^|=af0(bF8={dv zR|clOn!C^AabDC0s=2Xv2}@CG*mtT>?n;(w+s9O0>xPk^UmED!sPSp=A?Q=(g?`30 z)ZjbpRON2#ak)=vig6o;;oLFc-t12{RB2puE>T_<7JMR5sH`u&u!wgw7 z$?z9B>pxekny+g&ggC9TM^zzY@mMdo+(Ac{n7UI6GZeAEBRC8*hO>q7FlDaA=CD;A zK@SDV-1EHN;B$Fgom-w5p}t7v6`b6(d_PusCScj9-KHG>d=scxOtD|8%~MB2BW`(A zv{$pj?mwOtk*dh!U|NhpXNc_Mt;V`o-Y$>fcPblP28Bk+diXvZSI2sx9HFHuw4Gr} zMyn{Lod3sVQ7yNTF{gi#*mmu61MMn_cTi40P? z1tZHs^UB-A%};8c;nR}B3+$3PwOHGn47Cp>9aLou(7@@*$&zpzZAaB`aPN7m;pqAp zq$3$XcXw>~(~UGdh@Fz@yUraNOD^>F1oOUYGd6DTw8nXnqg-+)8+vNU+u8XmVw+v zFVA+yo9DLktvluYoapBwREDU1AyDqSnoPJ0X_&gs0b#%Es|t>(z9IpHr*(DNyzW?)SfN@ItE*9RoW7 zLiV)n&2W+$>$|nlaUWJ(32gDqpmIx~^LJ${ciy{%TK12)4Q}x4hlHl~5dEA1r{%;- z0wOvHdMl{w4_&oiBEVY(Zxaxl~Iddw^W7BYZPF-uK z?`-CtpYG?h=G_jOq82GRm;v8&lqFC<72J5n=ZP{rDDpZ+uwNh2!)d!>;~-Jsc10Z& z6Am65p1*u7nA$ndyJl+PATUn0$_igyui0{I?r1Hr=#jQ0FPf^wsY`}Jgo8$Yt-05;u;c+P*=3cxk#@%^Y%{_h3BaeaQ&fk@<$C_{BuiOd_`kB)G)y8m<2+Ie| zVh~z+xvU~{7~EeZkmi2zU~u$P&?nA470gLYcl}%|2T9yTF|gyC4Zpd7TQIw?z+}xX zdts-su_$DdU*p!$BXQr`?qHoTZcZp6+*7YPL}X z4j~rOjdx)|G?^d#BANsd5mLN!+F3COPkrq4ab=(Tp1Ld#6hn(USD-hIBza)a7ffRK zAvnR<6okaVCG@4$BhtZf*~yJ-bVRz7gqjPF6G{!6NdRfwP)#QhGZ}2}QU9v2;;BD+ zKm7>5Q?nkLaYmOVQJDYL|N0Neil113U;ck(GZzOpXA?6Q z04d;459I$KEB-K?{C_}Ju>FBN_+MN6A9er#^2faMbd^x~b&l&#`h$cE2MqIHL=6cS z7NWlzFX6&Q^go_z7jA&-_D|Bo{|QFH2E)qyr#V-Gl^xI%e;El`IRJ$}ZUz9O;3Q%N z*hhbM+dsf4xB>6{45^2m;t3f`x{XDNn`l4s{thd;Q|1i_@xD) z#0Dt+>3;*1*kM=!pZ)7KKwALs{;LFN44|ohl>ndzK=b}80onpMcJt2?8=x(0ziRo} zGQcxdw*RSx4bT?0KWh0mi~;K}1%K)V09>&BQ57rupWq7iKbpkK{s&QmmHm(ESlRys zVX*&EAuIczAPn|j4TJd~(8VA9^w*c+x0yoOIDQ@i`*&wAE8u+FUmYRw8_d~U|ISGG z`ysHlLVQ#^ZS`A_VgQHz%9~&Y3E&V|6GI5|!AR_pVWO-Gb1+iCA+T!oe2#s%eO~aE zv>Dck-yv%>bv9X3`<39=T7Hnz_uDoI(IrZ+v_MmC!i>{hhJV=e* z`I2OF@3)Km);sXLc?DX3LgD-m;s5KV|LWoYzjn0$iGhDdUHtI{|LY>ZO-4ZI{FL!; z-dMo$5`^k$-v8K&Btl6-k|cr^ryCZBh?31h zis@%h!qNB8WisKa1@;41p-=ijr&hgwFH7zs3*l}XK#gwPs!5baEw%9-I^vF+sp$iN zlaTufGEBW0x{sR%WCfHLqh>Purd`5kXYS?V0is5iBK4nC{MSMJKc?c(=>6>~{`B?& zRQ#K_mlXiw`E4rx&1U~^DguZlf2z1%32B76@G8g!@b)Hvp$rEj!zLvP2czHyCsK(N z+x|3Y$83Ls0H6|DB%e@gG&?RbrFY7Iswf4^tV4$+Q=G)%*IVER2t`YL;m@dx2}+*o268}lWe>H9X$3*-&Co@{Uz>=G=kv=Yh5z zbd)acEd5lT@WqtWyxipQ0c!-?8*xuvc;2zQ_cYVYnvLFp}tf z9tmcBY2}j!{7;-0C_KRj>_1pgbjV^NP(ffD;n=uL1_6>+p!OI)(h$h zNQFM@jYK`>JfJj*OANH*?lT4;Nu^ShL1RCAdav>fm!UPyL*~zzmsEf=r7pX;g=Oi1 zr|IIxczgxzi1R6jnGPC|I6n|rW^EZl+{J*Xj z|97PUI_iz2uKD~6$|eOxmH^MnK}IUdt_()%6srne2hPdIoGT$jXju7fCf{n{Temq) zR1wZn!@n%~Z_&&CSS^CR%CCurTZ-r~>zRlPb?kmgs&a8!K|TwTx#_sUjRm9N`zHzi z8_CVDZKdBWA%JHKkdXUtgDGI&>bK2_e_QeY+s4iM1jX{7I4{Uh00^r2F@WhE5_b5| zmtUz(VRB#U60y8>g3w6Agy&Z5_6k@_kkvTO4?|MzGnZ04?u?L*xX-4U8T_W@5-hP1 z?OV!sAgr{~VM`t})X-Thqruw*C}8_hs5Uqqhq)FhnD!+ zGMitUfqz}(cV#vl>_0W+V*2+e1ne*VHVywimiEB(G9mquo~}+%WdE`GhIC0+KoAOJ z_k&OuSuA{ri3zmHupfk-#grT!j8qCLvC$~ku@AP-3-%jshBfkQlWK!oJ}dfu2Hfe& z4`rI4dvCJTQRh!FD$i&cT2nkCPk=zY(|(uDtP2Q4pDjQjvU1;(uArtL1PpOD+EC>F zlZgL~yyn*)?(Y`ykL;A=Z$l~DZ_H}`Pa>|HCjTX(eK}--$m$PB4X{MOxn1U4^jHl< z*w}OB=8;N@lEt=~lxvs0jvHWppeppluVL!8>ld=*fHekSLM#o-pvM4{DJDMqDI#13 z_XoGgpA#bTI{>3}@f(&UA|BV?ao*Y=B6jZLw$f5${*#FRjlAa9*8A@k5wMm3L?YY2 z^PX7&yW_tt68}CQj{SiOMt=mhC}Z`L{d4CHGUb-2y8iA*53(>B8F7LT$M{l03>*y_ za!kJ(HLgCay{9oxe4xM=)#zfuXuzILRt4FDrQy(9x-qf&EJ%Zx(oAg~SBpYWCU^~L z|3yDwc%@l+e^iMLd=>{PQ#(1Z9B+xJo3)v{8To-i_n#E}Z=^Kr|Bs9PKap%4?0`fC z@Pn9(tFxJr9gHXNS?)+2SzBWG#T%Lv#s|yIZ?H_?`fTCH<%EEF;0}mV=SZQ{Sic?J zLmoU&SQfuC-_t&}hN`qDW7$zil3%eGpE)TTyI>I1JJ|KU-t^@zee|B(b$#@uUiHTx za=KV5i<>s0GZSFQ*WM&H3TS(I<4ph27V}~-dFySTZjy`ja2*iP{gNl>d(SASkRC5+ zK=J(JFy1a3KPLX{pRF}yKZ_Cg`?Dx0fXS6X!uq8B%AH$Q7!|| zJq02k?DX4uueVk|oBqf)T><~@mz#*OW-n3yud>$qi`#vNV;+J`cdn0@yZiZrPLF-} z>4*VcFRPG6*0@Tpp8hY}?k`~_6T8NUZEJjcg0~sB4|yXBPh1RVyY0ujeC0hGQ_k17 zyZ7F2)d*%yU&o?%=cXfmwEI3F8Ynr&CbrrwHr<)*FDf6XpyihC^Dqo~Ew?`M#7-T# z^xi$T$Le4UtQ#K=D=ys7eP2sIag~oCzA@cggvY*|PRF*dnCSK{yIqqG5_4S zm5Fqa#<=08_JQD@R%jIW#=z6(olurhV7#FQon#^h;gX?cW{aQ%XKSLE;09{aL0Nh( zZSdKat#CO-lVDE~+wXSmX;vWzb_hf_AOmb^3TVJM%s8kA!2Ot@jig8*z5_sJI0{!V z<3}K^F}uu>JB7LMZ1mtpR$!$QT#QY(Rk~D%w>jci(xet>!%A?_?hw7ZIIEz^k`azz z3*b=w5)R5~r9cObPzR{*qIC67jIn&$+EqjPlX`UTdSV!WYVm>Od629W$sN?frkkso zgE-Voa+Uf_@ZUV82GQ&U@3jWm{A)^|>Nrb7a8<^U2W`521M`-UuqFMYn|DFdnQQ0I zds3}+6(0OgN!!N}KgSDRuhw5gFtx9X`4voj&ZJ;9%vyg@cy?VcV^wH+4oo~kFV!&D zvWRg=?5WKc3|6?k*s^Y_qz^FQbSS%6KpbBQKDl_eJNI@%*cqGGBodC!^38>BmC5IT ze`f9D#@Ks|8mxBHF5ZQjdw6qm;o)(fiJXihq(<4HH29c$H!aievq-4e8e{gX*1)6fsLmsjT^yGW^2e9xB3e=JScKYOXeYAblY^5w}W1K zWoLt)u-YFBOH_C1O&ObT^$1^5w%D-Er~OLJYst>NTqJ`K-67;=bbHt!f|aB3kn*ZRfNo0$8A3b^%+84 zmU%Rh$f}qYTYDP=&ek}pszd#NQ!fwCv}{Xoj%LG=T>_zHrDEq!>7Ow_`GKiRWNXI^ zc8jzTV;mu7o+A;eIvPH5`80t(JEb%*9mO1ExO&_a))Cvz23i;*5}eZtGI;>OPtvp~ z%0`ZaA>%~d1Xyx@_E?uaDPeN7&Z=qAtK%Hk{3&ljpkEs<-Jhs@*$!mpYV91m)L_QE z4)R#}JZui*or$PffSH6@{%wdILUxv&=OgM_CBJ%hRBK}gEXVRG1BdtP^lAov`ozYw zv%v*T{xI*|Bge&M3eme47uYwI!i3$o6t>y1W}4r(YaJ^;4Y7f&8*dz0S;bb^QAob!m?u&d4lI18>X9z` z+?kf+7t8-lBSX6MWTG&2jizz}r*N+>^#u9KKXmf_v(zgJ`7;vf*V@;anIq2Tlm^6f zZ8Ycg(U_Nn?2hh?US9Q$+fKoX^Q@M9PDZEYUiTg$?&!?{Z_H zEV(l`8pl`@%b}=OV*(&Dq2u6}BT?tzV-(-15Pj#y5{i_wY9pxf8;VGa*=myC@#psD z(IVxxObW3}w~3BR(Ku*KI%+NuhAD_3761+>amQw!u`aP`F|sUT%&mG4RB<#yB%&Vp_yHCwkPCB+ z7D*>XxgEY-mauV)+JPNe8Fb|Lox)q*bs=3J9;cG*QlnU4J)K-B(Zw;teGPais$MG7 zeDm*9V;20esxV$#`SgDM2EGp`hPUl?$vn0FrF-O7<{vYQNRY;MNIEhU)$RG0mML21L$xJ4ooTYy&K=n^vDSv$ngi)Ifa5_Pa9e$@N2Q&Y z?XM@ObjEAUp8o_R+`KNSwo6l;&@x?_MMgZN8=I}QcuS>fS(#Y5ptdC9Z}d9e4ztW* z&4)80TZU9gvYvr5lnx%^Cb?9Eers0$$`qpElNN?DQmTzzW9v#hRw+Ujd0=RA<)luG zFb-F(jgPd1#9D8rr9|G8GVui_8}Yi~!#GiB&$?cw4T^HT`9i6-rqKiNkf{;)X|(gD zV`z{mEUxBZXBr;Al0{R!i0`GMBXO1pOGB`4o)JyxgSOCk4%8L8M-i&)5rul>Y@9kv zL+%%#`Ce!jj!^v5>dID>8F0})Z-24ykgFi6T2Vd_)EyEq658nD@DI1#u1?jcXDG0S z=OU3~?2*~aWUq$e>9xc}=H?v)?5wnwoO-YfSiu`Om@z6ruKxaVtR1nJGG_Na=I*^z zT5fT3k_|T%bP3HPG@hZApH&AKQjb)Z50Ab&d{}yu{AxUmo+8W_d8M*cB}PO}Nd1nA zT3Z2M5*=_pC9@h;KqKE5lsdf2d(()+0m~z7x04~3CW7iiy$=E+1nDWUM4PCU&5SAH z@=@~I$FC4{j0b51NvqxFUWs3(>tYXhbuKjXTDy$B>?*9pxm_x%Kb95qv5?ErTGv;VD3)WUCuooigAqs($?OIx)p+nqa6kxk0Et z!c_g(!#W#cFUR7s37)VmcnXoWsUDRw6738N2;;7aLX@iKvMkxt!RWKNU27P=)`|Nh zWJe;P+E7!-WE4DLQ_)Z6YKIGr2=E2tf-|Rv;M0*4_(UMdb4tSv+r=if?!1`{yuBdD zV4*edp+lG1!jRHEIqAa+q;y)y%Q)P+X1NTgGa4p8yhm~u(9mv(q8WwO;&_xsnob9Y zE$YtsLVrs}scZdp-Ed zsSs?vcH=;-Goi{SSC|kr@+w~}ArXUEm7|UmM%O2A9}hC``cJC`c}}l5xE|DST!@UD z#cj+=b~M`iY(63OcNfo%rdx}G9vZpf!)guZE#-{eJ8kBcD3CDua?sh1G z{aCC6&u+aY*4*2bX5T(H#(K5uRwgfHU6S!Ij8g5f(P$zWBDBN<)GpRMjyOY)Q=yUr z7JR_=D9i|P-62a5skfVeg4;Jdp^v5STnoe9Ndm^ynd87845^b+fd&lp_)Q@WE}Hx_ zqiQvYvc%9kmnzN*&!rfI%DD}fHFP|>34GT7yLu&6;C7)hFL6hbPHahohP;^L`CzWy zZE?q1=$!qOQ?^~Pd$VxyQ|T!BMT}U*-YQ1& z7))L&q$$Y={hbvnTtOYQC%Qna5sTbvxg@0Eg0#UNN4|)%=;Jhaz;0K-(_3@HqQgR! zoahIISg7d6Gun&2!^AU0-Nxb0Jr_#hNE!&*nVjf5G;>t8CT)dk0!xzW!5XTdWph>j zKiE5|Cv$Er?(vW78mhAJtP{Pdx{oK{s3Wp;4M#KD_vO!N%f2q}f6uKnT}{qzliEI~ zY*-#3voOZZa8{PM*IM5c;E(8zy?v@aTfPyaQB9y016h>kTgST~?)LNTjL`1yJG0EH zV6p`_wq|m-m0X>tA-WM=S+-`p;CTQi;q_{$bByaMKV^dui-?C~Q8o4z|Ih$W@a;Sz ze{n3}NA+euh3}Rj%$)gsEX!vxaNvgIZ+EY=ik~k?=MABoTH+i=vx^Dh5A#eJD8Ax| zelv^=jiV9O_UP5u+?yhmDg2^B{2=ZolnUD_pk-#oU58Wt#p!!&L9vJ`y{z@EZsIqhPS9zoZ|`k!;pTQZpoCPb)$v@F1zUZ+?B|`- z{DsUpjBDWG5)eicO|Cohjp(qo?O9vmN73doD_?pLVq?vULLAf5sFduE@x(AW_!atW zONnf_xd_+QK|#7GWy6|h7U8h(l&K7$QH_A8_6<96&VTFS_?kXbl zBt7{Gc$9jY!$h>~ky?zx_tmnk#0zpHtH3c(Ge;DwxQPvtajp-=v8T>M%9U$YM5WEA zHhE@+uoNk&aL^SesbC`kA3uXRCC$T@Pebrer%~~?EH6Pq!26A3I)G;OKxa#!ZzoPf zQ_36@`SpxK^qYcQLl$+dgY+rNP1SR1-7x^!!3XQnxs!w``n<)0i8Fmzi6 z*<(^8DkZj^AmFGN#5;oW5I$Bk&Pebp8zcncjLa#9GUv#rpZeltX2z8gpeI8bYDH=E~SdvP$92kU5PoB*!IPd4?G#Z238Nc7>z4s4-f|F;cC83#RRw61VAQ;+a z5C+W*xQ9bRbuLv;<8fH280PmfZjhFWVTjG5+FQg{6|L7oiz!=R(;Hd-SfZr&p0VNeki&WK#YXTOctX9CTmi6GscTLftx1D_x{Gv&|xP+rDNtDSM8_ zS`%~HQDLeiPD!Cf8AW95hSbI(QcQ!_vY2rDo((-d6oQ0MfZzkgbK%w(cB@L7N(M!q z<)ToQ6VRb;)p}zGjr2BHOuKh-&+pIb3@F_((4H0t@8&^v2m@}OaHQWihiG0@7xWJV zR8r7lC$y5fahQ243OqtWH&WX;=~P7Q6tZHaBW3jxj}PN(tQ7N<(;&YPnPxACqoN3N zEMW_Gnt>MIsY=t~mScw`$YFNrsqha&kn#@;bF@qF>j?XWE)%gra=}+v!PTJ~YABW9 zXv_7>kHd%!x#;-1h0HN^uqv+zR3#^!4(+ z6v{><34*Q}C?&~FjzT1`QcRMs^qixspmx{5IE&b7MJcqs^WSbDAl%8s6B$ z%uMFGgSNhbY{{yu$HZ|U^U}JkcSWQ|Nc6({;!ewd>zq;v)EG6)I~KEp&KgkgVZL(Z zZY7aNgw}aq$>*vvex+e`M~b$)Tak}hyfA&;8}izaPpYe};r`LC)4&slHnMZTp@U2v zw1A~_Jdy-_6|3S+Z}h8;U}tKq{zQ;$Y#4&`7iCsN;58@Q-bBzvzX2k(ukc54+5Q{v z5f47C3h^!Aa}rL;=M6&Mufd_a7`LCdopj2ft4=}ln{0@Ca5y!V= zRS`tx!{$Iwnq6b|{KZCmZ!#rOj%`y%JlsC?@S~aO*xrVcxO`zWdtXW{`=MV*5AM5FB`8yWn`4lEvgfC!@T9eG! zK0^?`oa{mjSO-V0vg{wa^)$rYgPGK6wP2oOmJ*tEIGeYo$x)Z`~l=!YkNTKaIw+4p3dY{a_Vm2rm9jMM1b-3^ZUal$d9*tDM;43#=aQW!< zT}Bi7E({>;RELDXhR41N_3BVK)a@PD#br`hSXIQWLf*)<+S zFji(-FuZS!e*;T2?*iJgLEU|m9T*|qz?zc04vfAaQsAFT(%%T-a#@Ry{=e9J3$VJf zWKsBF2^K6!2*C+%!8N$MI|K{v?t$PQg1ZHG2@b(MI0q*LcZcBrCfz;L)BoIe=iZ(- z^QJp%EzUXn+iWXaRkf;iRiiiHYt|g|3z?K|UEV_DO zaLipTh;a4dQjZAOa(AX=U#)zpU~Kds(CO+Zts%b~w8;)=!wqd@t&Fo8@=Q>29k5$C z{Ll~(=T0~HfC52`B|Tav4T#6O`7fw{t`V?LV$ADBOJ2QfdgGe zygBCv#t}hEQrG7BH#}wD&uUiF_iU^j$37o!cV}Nd?+iTWu@Uw4`HBmH6^3N!ea*y~ z@6=%}esDtMieO2J*sHgl7$OjZeAWtwO<$8$*}^^d5jcyArTCGz zDlc1>=i(=3?0Ssx@mXhj-lBpgut2qHN1E9;YNNrE4RB z({2&7<`BD(^0||i&LV}QT_pLI1nowMr}53nE|o*<;LHHmPr$8vkeA02v&$(}mrm_M9x-ABzWm)O zj3rpEX4t|7P0gzb(S%$rzvW46s1)nTMN&&ofJEe>n#z+4bF0n9y4v{e%)5>x+ZpEe zrPGe!qO(|4O%gc0i+){mT)RY-=0UGxHP(j?LJT@dMK@n@#jLc4R-NvUKk48g{GC-N zpycXbqd)(_#4DDcBOU&lc=df*>3@-U#qv|C&aV=$zMuP-CC2}8M8SVoEBM#BRzN*l zMxYkdPpgb}tU%_~Up9bjG)C5+la55}fM}h+l>W7Q!3fXD`pW|Iuky8iQ*QOYPRar@ zrhd-d0-pLe6@r09az>WFBv1kC*o-Vc-vy8e1)LHHTKImuz!s3?0+dX;-}>7`sP7QH zhaZp##rhMT7+HThD%gO^!}lQ-FaEY-C?m@+VEw-kxqTnmg#JA~ z?Lg+%it`5Mr}A14^OpH#pRC`$61uN9c|?FfN-au@MAnJBrH5*o=?@M?NPQAsm|2`2 zZN5pT*E+)?(;Gy{F;#t29q)G%nK6J)m2~zg!}9^jqiViotj&C4e(^kH#C3XpIjgCW zu2F6$o%1}WWK$llCWz1Fq)mT^t-e3>FA)A8lksne>Ay;7`c53bT;!jHM%JGK@L7LT z_>~a|=>DfI$p7uivee&%H%*gBu@K;)A8NvWgSZcknYnvd154CTKR}Os<_AX?O6so{ zZ6NzTGM&$~%dP8?4C1=dh>EN!+;ZB7;A&183gWExlUX1(hF_gp7E?U0q4~@BM~L1x zlNp;KwPwOhbXbVs_zWP-@QJO%U{d(~k~|NW2WSe8bnx$?@m~>D@tv#x>1YIq1K>v1 z-_(9(Wceq?Rs1$e?Y`#ZeYHX%?N27J9qW0%qfzw$BKC|xarl>Vg%<=elFoVqQSbC3 z^@gd}h6w<6#KC*=IVsa3J=$Pd$GLTqLt2dZtx=iTomr~y03lxjxw4~0XZ}y@coT9m z4x5`*@}z{2Uk>Y;ak>4_d_U@GxWuj(5P$DL8us_F_^*hp_%4nA=~x8vcki+IoAR%W zEdRu4(cfTE`d87S_8(_WevXd$b+qVx311*uR8ozBI+4Ve`YEcSc$-=4JuBi3bC7r1 z1CiUqNni>Vn^0`~9k0*lJzP&A!!ixQ%E?<~yz+85{MX8w0{r8?^?J48o=~UZP|O(X z{LFZA__d06oGlP#U{b@shs9rOD*v}c>UV|U7cBmy4*fNen@&MW*Us#xg6hER`txKA z)J~RkurRT-vNN#c;a7+sQ>1Uf6})8(G&j@ zbM*d_wGSvyKMNp!ek*4JjTe9x#zMfr$jVN@%)+KcKqsYZZ)*bVpr`$wdr40~^Ybq@ zrWdsA48VWU(U^{T$i^@YJsZo2V3F70IFbiHR8zV4w)b znVA{o>6w@m>0#hW)+smK))FaeSD<2GAVJfqaFc(BF26s}FPQx;U5Z)g8X58v(0%_F z`1xB5ppL)M{KPB(@0EILe2$+HN$$t$R z{t_?-H#qojW9EKhJ5?DyQ$u}w0y+f;J$n~xpklhPm9523pWpxE1p(c!Z~*98-xaFg z;D7-LcmCJm;BS+Xf58D10u&6&JqqZV7!~Q6ndC)3D-E9yFsoSiJ}iKT1`Wl)CH@^w z`2Iw{mlJ^ZMEq=R{Vf*0v&Szd|E~c4oy`d7R7?!)je%@#V49>8H8e3Ywg;pO15nl8 z%G}CU!CF_}kl-gd0Z+$oVs9sFXe(f4VQpn;XlYLX9P&$5S|(LveS<}!+|LzkA0Tz-0b`Amp z6?E4D!UoO^b$^M!HV7za$cMl#928&|u=B5bK&WVsAt0f2?`A--_s8&njt_pd_y2{T z5Cp&bF5UoVfFOYLfdxWNpi%h#GY3BbaR0opz@wnS5z@yK(*K7($IrJ7>w^kS1Puuw zhDZUL^f8=on`vSUB`_582~h$C2|;f_&_UwPOW}&X@|I;sDTHK@GQR_J9H=7Ns9sX-~W8A7n?YZ zmFuE*eX!e#*`uCncSOaqpus_9*6%y;Y}cbGV9?zA%tH4)#LVNfUT^wu}+qw`LgRB9YQKQ`JQNgK=J@hqCZtUO;5@kBpc(lKx* zthtEu-xL5b6?3#6M-CEqc4+%t2uP=Pk+etJ?!aoZ+3^;5eF6ZejC4r-i3T{UnS*l~ zP|E&@`e`t6Dxh+Oy8<(yjA!U=3U(7m#ifJ6J*?X4?g3@AS6I=kX}b!7TjJtaGE!>7 zIsvGybjZJj_UU!4`SI2S0IFQ28;*PJ0$0msg3Ccl{0|5z%I_L!xNE`ggp6m=ZHk%) zM}_M_?{+&`DPn3e!=?4myo{lH?P?$BahtOfKvAxA$EL?-M@yys{zJ4lT(xG$ONB#z zzrgA6JDmP-cAj{Q(04-z&_X@x^Y$mw#{6ZZvALb~PnROV{xaIw+}Kz7JB5|unn!P- z4^nXtDhn3E@GP_~Jf%`KSuU)nSKD>&xsYzNZLg7fIY1LIkRJbMIxGV3jlBTedxZ%1 zo6*VAd$2!`_LCcDy;FlzgA=2@tcqr(qxEPIneV~AUy6#o@v+IV`H}gN1@LEnPb>c6 z$u!$-p8=BxZuvjeaTD%rHw1rWU04I}c5p9I3h@iEfKFCOmc{CT8*`@8pDGLbNgvP} z$r>yiEbXlUdL_^c2eUHw3fTao4-Iho{I46V2(63Fw2A}nbQ3nWYLn{C{ht~)b^}0$ zfMELz8SdSap;Ri+n}P0W;c0eByHy$BPUidOe|>G>K!DIoD@wLFD_t2}%P-4afqq%x z%IKspt#Ut)-%C|aK&s9^<(g?s;sUyRl6&HH;`Iy%%~nl-CdU`i-*a_e+w~Za7$>>; zq>=X%5fdRmkC=Erl2o7C*Fd#8L=KXHTUtcmDA^cUn^>6!`Yh1FE8w+}5i6xejwLW8 z@9(%gG;thP;Z9+F_|8ITYLRD=HqbqbQbXs*&y=QhXkBGg@hss5=R(Deb%d%c%iQPOu|_ZLB3&*W0= z!gAj)ST2}>US+Q_VTDxd@G0_lJUj&K>Ja4>uOV-5 zaHDstd#e-Z-CMmIgTNeluXg=f>Y3ilJ3#7L9GM-N9UE`d6fEFcZ+jE`j>|)$_NOYH zDb0&GS_#W2^C;5+okv+l*mBE_a;G$oD;eE;)9EuH3 zF4^w;%MGVq-yoP=)gU3{9=7q+ti4B}`!-K$-WT5_rC&(yk&G#wqf4W`QVIzuq2 zRsTp|25QgF?1qeR8z}duWjxiI*bPos--Ba$v{i3h?thM?-TPtKe)hwF5jcuBTC!x) z?xAyG3tsIvihEu9a*&&o$$qD%)G!$UlacZt3qn8R+`w*nh&$PFr?AG5`-<_>(ePxa zce@|IlsdJs!qv8av!BO-JLYKlr^TA~=0exf&3=)4P6DV1ygpqzRH>5oIy?n@x>r-` zknH5pZ9mUSt668e+8_6a`l@H&TTk6%-z%+g;J&K7bOPYizd8MWtdcI5IyJe{X;tJN zPCqYd0dV3d0pKL9&UImWyfd*rT{zSrBfWj;qyru?(h*8_Jc z&fD)xoh#T`j^oMz!2uq<01p=pa7+`s&RE55N+O4o&R9KA^1A+#W_x2lLd4y*etCi; zF){Im`O@qJyjeP?lhY#Q`D61x4;qPCigsJ;X)3r)7>*}Oiz6a{I&dzxSjpqr$9a@n zL)l;pxM1s6e+jVCIt8>L6^EUgT*DjAlI?jb9ib)yPR9Ra4ZK;v zEb_9%<Hm=qT^aK%DX z?DrWk#jWUPo+67-+)9yB$p4eI0%m4r;S!eSqdnvCnTVFCi@m;_0r~@>2cVLd> zO6LW=10ovk!58Q5s0OZVZi;o-+YjIScH-2XRl@x^)1HZm>C)t6Y%_OECMQkmWunKA z&Hq4X7#kahp$=uTpV$E8;8wWa5I#R~wo_VT^z3LkRr45_<$Xb*=v?2!{*rsU^xMvU z_~%;SW3P5Em9xIy{!ciw1DZ_W@CcR&_sEbF*SXD*5!c!M$1m{m27yS#74A)VF5B&U zV5M?$ELWH(#Yz3a6z;#65F7Qh;cmpKpIvss-Pi%)aTM-iH$=|+1_(e*B=NC1SBo}AsfWq^xsR>{B_Nje=M8w z1&}5DOEx7t)BiM?l8F__lm0j6Qi8N$ZGO(BeEL%^<*ySa?{g_(?vp7Afn-WZAkp$y z*_IHG(a?2Kp&+3NU+~HOHKp?68y;Evj|M=X14Q~5KhEZx6FyPClxW_cyX7-uh?A|X zd0LVkt?7ccj}dOYc+{J{kiEX%frbuiw>1LOmJgp^Gk-HX056rc>-e`k^8B&+2ZIJF zPejMI&EsoJ@=JHFJ5XqgOjp+ z6Eb~riZNn8#=i*y;`*ypFTE&EYnF~Ju07oY@U0G4ylB0^@6YZ)hDoQl8T1XSJhP*> zblXD!@^0U)Fn4c}Vt5cePdfkRXLszY0%QGS{JS8KxU{%__z0gZP%B!H(E~tEW7?|c z&FPv)?v+tAO3mR*7WbE_-1q^DLzm!-Tba|_9M40ZQ_Y(U%(fr%+`kh70dl7SHs^tN zpxo^XeDG!e*{w*+>H5uWYPkp5guM5-_+s~dS48*h&}GB%b;2D8tidhZEft=G%fex9 zKebstrl0d;^N$COT%!`B3vQ*WtE)SZ+8xMCMsc7HVq9GRWUE)o??($Pe|%-f04#_6 z{>Jn7y=nJvY5t$Rn~WZKS=#ULrm?&LJaGTMHqEn`K>uU>%OH@fd+!r#NsAWu(g8e`23OaBKQr9u=%uG?`$@!e#T=~btSkFFPzc~} z!S!0c<;gQWBEr6H$@7<49K{%#z-%@DG5%!`Aiej5iJDz_W~y@q`RlBB^5om{+`Gaw zhl;#RN&F)sF1PMLk8e5dK*&c}p6i#oSGT!WuP!}vCm64ye>lSal@N%(>Dy1+^04~m z`Jv&EXEd$l+lm+6ZJmzQX{xC4w>wZt?jhN=BTvLF{~c)D4N=Fdy9g+Je^%frADmqv z{$u>BAfSLxp>cd6Q@n`W9o7OCWxQqZFd6k~N z-#{U!!Xx)6+~gz(1Mu(}8Tn`2tx<-xwKg&;2A>U!Zvr|6m{g-8*a{%!b~* z*w-twQQ`I2S~1wz`=No7x2xAf>n+Jwr-sWsH!i!Eam6k6>-g&?+S;^n{iClIaYC_Z z$Hq(7_fO{)d~UWcbZ(cfTZXW1IW3m^S<=Ae`d^OkZjLW>zP0b)9+%Ev%$BZyzP;M6 z;pnNupS(3pl}_}+l-GX~U*L0Fo&;Vp)XZhNV~4ssy$+!Sdg6vhag&ry;l;zZ5*xsZ~Rq8oQgjQ-)Nv4-r#z>#G$_i2ZC80}pUw z<1AG#IVw}3SdeeBbL;y*MfR69+v9pcj#@#XqZp{uF86lfgUk25E$HHO6Hmt(q}~d2 z9af~O89S-fPp7JV)a5u{xMYx~+Cden*G-Y(opeb~5!UafBYtw81+~^+wpG1rs21Q* z4UR3w85&#tkak5O+5lHJ5GSFs(Q>F95vVmevZxN0qAp7BKVdk(L8M;rRmOhZo<>=e z@kv3#YZE6G^s!&hd9qV;Ew2B8t3@lXzu~Yef)a>&KG>dgMk_K?s7fP}J&P{V=EV^v zDQK#zgvX1MSy^i`PFLTX7lmJ+GoCjO(T49;J<2qW7L%5<6jnlg%P0SwkoD$P6g4JV zVQvrJc4kpy?ySs*%?v?cvOMr6ClgAEg`&cHOCb}SfpO?VF?dt)a?Mcuya}c>NeI%D zu5ZC9Xs^`bh<3NjTDb|iF%r~Vvm0sJvr9b%t2G64OWF#i;9nC3A7GRZg2eJ7wD1__ zk1n2P=Bc%fW+Owq*sT0Oj|o&h)+F|ZHZul|^T|V}kO*~IDCC7&$F`HDTgkbn)x}5djc5cbyqb3O=%WYvZs66?w7iBz)ieT(yrdH>1rU z#X^lwKsZBD`euWVP3T>{{fwb+FT7}cQM%hhx`J?YZP+!AC^q?8^seq}l>|T3w#kns ziDH(BT@I;ul|H4uXSy&UJkI^_u@h?c&S3bLc-7UlrPGBE-kJ(poYJMCBH#&H)F{() zmV%4EY+6u#Go~izCWk;5-XDe+-@&i;8T8j=_p0#`+eu>cv&ee@{h~@01%|wgg(uRf z!zZ*V0;bYtYFl)Zv2|apijEN|Rvk>Ji3TPL8KX zJWNI-&(y|%0uv3MT43@kbD-j~I1sJ|3$IYDDw@j51!}yyLZx~AWCd$G5XP6`S`0!kUEd7>omyQxgxOJyh~m)$j<8Q7h_t_$qb_UYR+=;u`T?r^bAskL0^t5i26^ zMa`0YSu&TV0&%o-4oUBzetdTH z_lAx{REPG~><;?XBavR#+0DYxmQ6!MdI(7{}LGH~~pbOBn&XdLMnhIiF-69J(|Z z3)BtLIKIn34{e;K#Y_tk-&3q9$lmTP*29xU4Q4hKNH>L|VX+g+FJs-!#CD$+vSY`u z2obK_vv^Mhx;ssOdi{rmBQf!(iqtB05m6WLi+pET${ zzV?oGm8+IP+O@t?rk$lbSZpE=9E8UuKh_L!UzuDBv+s}$;}R!$(EfNR>-5f9WSCll zCkm`@I1*~>f=zpqS%B8?X|z03I=M5I5|-AMTiCkikM6*;F0A={S6(E5ZvmY&<# z9Di)yG%SV=ooYmBY=6PT0?RWlPBusT8$3bRnS@}sSf39bgoTBGD1h%*%|gLCslrVizN=b z1ljYZKIRvwceN5%60c81d#I~L;)F;_d(0n@xK@D9x;qaA2b+3P)935 zf{=mc4WwN$e@m1r{$Vye{S(W`P}OG@6k7ohJHtm}sq=Q4W11Y)pghWPU38S%tNQWuRGe5-CCr(@un@z|#N>xr z%K7Ds>JG%*T}Kbrx<;pS)Pa{S8j@w0Y{CYMxeNB&Pdjs_P}sqq4J<6jgcC?nCG7_~ zgN;7v*{FKN71{_)x}#QvqQq>hI5he#{ zLnuEX<+w=pLo@1B0aIwc*y?$Km2x6^*4?IW}?IZSOxPq(;^1r}Iy5Wv>1PlbfdbcH7HXmQYXniY!zC`9L)c1foEWx@!pEN$qrHPb3-B$r_ zsx!#=5xkgn{P_bINfTZxB*;u(Wag}ydigPau99BDt2Im(f=();Rp8}?si3b3B*kbjWD*{IXP8G4wG_KEt_R zIEf^bl+Z$|V?V>Q#N(8Q#!VR&73`EE7NcBGR@0Y#$*kb`e6f-sJ43veA|Q|uyzk;V z?l?n4U(aDuKYO{57^m!y^cs!UpW>Z9_-Ly2o9#vCL{R@k}S2Bn^_MQh#&_Q zO}`w*myfuS8%t2y5@vckoLU8=93_`H%<)!G zqhCb{T~NcYdLR))5Tt*?}la!vx<|Ov`k-A(|X)O`vIe$Vf%msySQe8IKlert^_~}@Pk2OiH_pqS z^YJB4jwn)nlUG>2ycSCY$6I&~AKlhPFE}B-5R67{lCf+R&;m*2XareOfD%9 zE>8KzC@T8ZJ*vJI_Dg`7U}xrYw?BL07))thCZ*b&1D%P9p++f=q7nL)gfo{^RIMU= zF^ZM%$?Q{gAF@CrzIPwI(SlA>pNCKqYet}m^L0?;^mZ_*n)1n^&i7q*tU*&vCnk0p z_l~b~&nP`uX$>hExc(%fM%e#J%=WIWv|ljaqFVBVXHrH=s!vE~(KGpOY{)2x`)(D! zlrebtyvqCfdilCxQK4}AGtZsvZEnAzswc4HvuSvw zF+GkFlw)xP5fg4K5i^a{YmLs+JKWn1*LvXarOiE;@$C>8DjlG#hxr=4Ojz^{gCTE9I+lCQpm~)~Pq7%|tDsYh3(Z2%FtJ<3_nmZJmOh zhCJS51F$j!p`W11#@t8KK6$o>k}BeO8ZMDl>YiSl?8Gx2A)$8hu-0{LJy6$AdLHqR z(j~(}D67{)$x4>B=xhd;D#|vlbG3CO4hoGmd9-pUvRg8;l8?T@-H#%{|#LN+VKgbB|u zXxjCFVf3{~2jP<}2K3G%%d#P+1hibxm(dO+SXS0>oD8xFW z&rz%_B284g-xKs#6hBDVY#%XuyIJLpIX^+#Lr)1)@})VKny9CU6N74HHfWM=-ddTE z8Vfc~g*2W(6H?T^SM=o>1FFfUr#Jx&1g~>p&}vl0Lx~58ictep5EUq2r_IW>UnLWN zR#bca)$y{EY6+Al9VLn&D2Um!iTp|tR#hz;^p*G><@xvpW2?vL?IX2N(MhP z56S3LMCH`Dbt~J1)$#BnZROXxSCIr--hn}f*dLXZA4=LjgG8n0TYKm~eIPTjo-h59!&DVxC#>lgbbTENCl1 zYsWHuARuju^smElgi*@jQ44f$YQAwlwC;B28|+9HRyCHhF?&KrDoGL5*Wx6I!-|xa z!N2dcb=R>~&z6cV?!GubZT>Qim4bg4DBfO> zdwRB_amM-0I>;sW%SxnwrcRE8in0EIPU0h%_NcalTMB=y=;K&?1!Bf}MrK*_S561o z!P!gfx9lfOwDX^JaWb+Y#AL=ipJSskdh|vbFtg*4rP9xW5hdWy-(!m&w^$l%d$KOY zO4_n8V9$Oe>+`p;RC^oBTluV}3;YrKJk&}xffFakcdq=ogqdEcqKFwzw&3Q;4sk8G z^(om|be=|UqXcJFtRz;}D&f;0#+SWVJ9$ymv}khOW^c1I26dlXE=+TBR;=MB;fOLV z4tlZ4@pBQzbZ%Q;C1jIGIO%KXz1F*4Xy7srL`Kw+=%U=_Q&=qKYhCFZcb%FTbs6ly zwbILXu$y2_inMI+EU-OzJNXg5eXDebtz~Rd?p3_#(+LhmJMNa8QcieaVWJuL%LG;4 z5q4&OC)tRt*x-0^+rrxMg}N>2`_(`i>|~VQy7jfRW3xe?TxUY|)J7{Mi-&58s_)l( z_SjcTldfjj$1v%4KY7ip2IxQi+NNG8rm(kQ4ke84;`i#TcjxuXR7K>SPvmUx)2>((uHED3$}8rU z?UxOUM@?xdWmyTzY<(o$raI%5K8OGb%Bw_tY=cRf9C^&8X(BSc4^CN=ISkJ*|;P6zXZw0#_h#QMh zQxM-NKrH1j`(`U4zuuR!$)@;r$@=*L>e=Feoz`}Y1+z8lb6JI#D zHiIBkm^~y+bn8zuH%&g$g<+tzoNIin8c3bpCY5ej)G(4de4$I7^NQ}|L9(c50Gbu` zh23ywVB2%m^Rg&H7#uPeBCiNoD5o@k#O{4tHi!pO)2-jeJd{z8Ct6ASDHkGn&vd`Z zCP|x#ic4Y}1&9r z(|isfv$W!%OJ~E9Ile1UYH0{{&>}dx&7Z+*FQJ-glcmbyL$`?ROuO4Pu+Y2V8Z9Z^ zQ|)^j-LTt`&k&kb*s;ZH?6UIa`65NHlTZcCLxv6C9FP7LuC0^USKMx5-n1k;kF0fB zVFg!r5fz~#L_vewxpel2_+}~bwg{?agIjut z5;Y@t<9d9<078~Iz#bRpIDu!=*4gbrU{kk$>X!Lixr^*7VG+KkV$??&9vuGsM63n3 zkMhMj?I!a(VQp*|=Z0HsL*%vb=o#9c&IMU-kr{+iMZJN}cvIw_o5LrZN5SNM7%YsO zh+wP~h{4&Ov{_*Ov6FCA$mcDzQcsFFb&aXd*r;I9mV|6_ zZg47$%F_;JWV}43)6$ybGs{n=1oDe{*uKb43P@<{?+!PuxJ*ZnGo$N*SPB7_|>gt6ki`|nTk z3|J6FjZ4am0))5f29nyec&IPly&B$2Kxa>EMETUrqX$D*TFCjq0K-uO?Xi@FC}d2& z?-{Ecxhb)(Et%9H>q|LI3LKDn@RZ&uc#J zt;tzg8TJ%6c*auk%UUuh#6WbXeI`+i|7;swX1_t9l}C+ggnO_C*Om9o?IbsUaUAul zETW9c)F7;{<%`Grmw7kp$Z)HN7(1Au0M&nmNJD_z zW>iPer?d>pwFkYPix{9pU+Owx)8(A4c;k^yZab5&Mf8fMZ9@ZOnBm#(+v@XdahpaG z<4Dko(=3|s5 zQWSiYrrgWV4RB^}IJU!IBUVBhO=5ogBu|T&vpfkSz8aJ=TyL!)C+VZ9dpeJ@Qlifl zOh|kZWG4(6s>x}N!Wl*a`Sn4@)4DzCLkH#0geVp7A6PGb1o7#ht}>Ke6ib4>a$yR(i@za)h3?AbTEPGR-nc2v&8c-|yXh)eR*)YsNCH>pnstys1U)U51PS1DiG_Oeb=APvqrrU)r#I%k-5)CzaH8pc>#5U#gB zWncbuW9Y-HemV!GfCW#Wc?1&$70-@L{y1O>Z|VVrnu@dvj=^rNKGx>T`An3zZqT zz)lL3boajUeK9DVJ+^L0Ix)Smy>8AKYQ5@{TJgTd=SePF_Q9ADm5eStOM`CkxjRW9 zA7X5dfSt_&jF|5{7i>aRDAT(%%LK57`cpkV=Ul62qXuPDaOuP&92R4NzI^JJ2hGCb z?iN-aFZiq(`4LQ*7YZd`U|1VzsHzYQfK@eLy>29V$P(?cNkYkHo5BTgj6yEEaga+I zNazS7S1glhf>70I>>%`JJIdQH9;*#Rk@)5uV;AIG&*t&`yi8Ku5FPU|blDs6dh(aM zggGgx{xjSZY*#7J4Wl!pbX<>(=O)y#cU3=g7dz-ReW-RMK2K7oQaR3Zq&kY8E@jYo5`n zA;m`Q!PqAW@#)PWg{`K2VQfNz@w8?N;i06r+*NJlS$n*_S@$_l!s6tH&^S}nH8%=7MNv=*MiITx zY&|hm8=Tu?lIW_ka&!9{_{5S-g2>ZuWkIbb8hY9gF%+E&Y(g;~Zf28++}g%)UvRu? zIzhoOhEUi>Gl{%xTa4Qx+Jfzy(0FAP0;MHEKS)Mald1yxSxrpW%Z;xBvh$%rz88M1 zFme<^hnmgt9xFO|w~nIHQ+%Q&zEHiq9VJWwmc|{i!nQ!O#ty?`SdZs`6ByL% zcPHI(6S=>(gNfbNtn#u#uQ5@({XxU}j8>=M`hCck2xSaidy^hWG=^^aCL zp%VLhi^zk6=b=#er-tPbYDct#dp$U7{|6@JdQY$s%S z$-7a1N-)PN0@Efs;j-Oyr08pFL4sU&Dwwa+ zEM`oL4{kL*?hQGYHm4Y|r$;VeTj_Vx4>FZnYDEOcom+Zl*Go6zJk(7+U!aYGhO^{+ z0@Crfx2t{8DhZWm7oUGH^@&*oe!)5t6A2SeFc|`RVnP%(1YK0lI)otDXFLCEvs9W# z_Cc^k^BU)exNs%sDSwy40TU0Hqx!oCrOuUdOu|<7R%}&Ml=L*WN$>QS2eabHY0w-> zKa4xxx^es6A$duqccV56`=9=u))Dee(%ggF@|q!bzeXMwy{FQ`I@(yd|Gf^!8(iZOG^O;?0SZc&-yE^2%zmR7YQlQ*T3OTn3$kzX*~9cV-GRYGSHli>*9Zu2LdNqBz``{rJVeqxuc6 z`fT6idnTEPlVC1`?KHoeNGvqT}c`2q~CZbTo-A(uq_iIJFCYRe%lhnR7 z6mNGWPB9Oa2lrW#_OidvRluiDe$8kO!y=VC^DGHTo%?QM#m`Mec8jT0Fy^T73Rq29 zU5MY&@g-r-aK2-`aSpz*vJrsuvXV4;QtnO`K@Jxb7M;9;fn6g(EYW^+;27MUkJ-c> zrZ_J|hNyzu+Q=v4G2NQr-}VKZWtprUUB8i&l?!`Hx!z;nKM9+Hb32cfP0aN81FxOi z^3yc8qZq~7F*vzC)`xix2u=Jo(U*n6=pvH4v8lve6LztAYqKhF&&9=#(msqA`pE3` z)*Nn}9K3UWw~`sMke$LdQWl%hY8(%-M8b!1YJ(c_pq}*WWTejvF1@+FUO%V7j9INH zYs5TMtoQ{rqok~SIW(l+^|7-xCFZBHS>6X5uX?4`cdD^*rp-ko)SQm&c6B1NG7_Oz zpb7+aa4R*h@*!R=@hppELt|}M4@fI1f!nx`3qqY#WhCBdq#i-tm15we9J^XXgTpReJjBFpG~gW!ybjz!{Bnb9a{ zvKZmfF{#6!igAp$bYG;xyeZ8oOOUThIXMyf)L}O67=1}1Hra%Q(@-IhAZJd3{qE=% zqY=i#0&S}OgJ*0_*;~;g(HbAJWd-(2Hg+ASwqVVbWXs&`7ZKMI3Pj)t3m!{c8W9&! zWxEuSr0#}^O&~nA;!IkaO!mF(8JhUK(r8Y|dt*(vu;}ZhwjkJSgVkIXHb$Q5fijcL zb)9dy3h8qggNv7Hmflh$*G9L!O|UseVjrjNE<@eQ*H4{VnVVBbNP|jy%A7D7Y8yu9 z=H9n?X{s}q@EnJwJ>8E;+j!km${T>QIu5h8G>jid+T)3_IJ}qd(}h~>R1}t;(as-d zin^QoUOhN1QTu!t|LUP@T1 zo9FOu7-n-7>0^FWX&G=|>5F|-o{_#E@n6KfDBdJwP>SqnHmGScy*#3KNF2*I*g|q6 zE^TRs?mQT!en<{yZ32>{gJtaU2!uHZnlS7HZFqDM z13!N5gYcl{a-y|CcJ!-7cOKGW^e3@HAi;xcAh<)Y!rk579fA~YfdIkX9fA`i!QFzpyGwxJ?haif zC->fS-s#c(dgQz@`Y&qjs=d};^ILQ6Sw(%nvedAf#&6_?BE->!GF1KWTDtAJoR#^0 zUz{zcKhs14B7l1ID+@#Kih3!lEU>C6&tKB#oe9swiA!02tj)-ti)wSuDHvLam9|EO zG!%N`G;kbPw$)o6K6Y+}B`JAv+s~o0Exrj^n7&nZ3MOit`U0GndRI=i%nmu7J=Y)% z=W+-RKsDW_^vNv~>BY%sA{D&$6!-$tk63^N*CndmyN7A%d$HzQYu?=c>*l-kHSh{u zusc2N6Uh%Lg^&A?wYMnWQta*%Ag6+g$l@L|X>A@!TXeys63zCn8i)ft$-%hZ!yF|% zd*p^Yx_Wx%?vkcuJmHxq%+Yeivth!PsKIVg1&89|-#gZ_sEKD!cYSwN4gEBQXWd%+LDm@`)|v|KeRrx|GfbBwNh}(e z!)iFO%&H;~)mQTMIrE%R_4ztReSB=np~GH;h<%fHJ3lv!na{{VK5pGf_5}ag{``CQ z?DECRHd&|f4|)rx-`VY~SiV7UBDwN&R{$>wVFjWjC`JK|YBD-sbeN-EH5}YUbKwWm z>#4SrRi=A4Qu^kvvq7%UsaCQ^X=*KF-E!O z!^E6v{UsInsn3+#Q!xw%HZ2M)RfM(urLU*V`n2)3Uxpwq4_cDW-S3;$Pj^!*raNpJ zyz=PPVvdyjsMUkp zRaWgS`g~V>>VlRwTFn&EQew%3BrC>dKdf`J1^XGgk&+?1Q~P(fc>9OVN2o6OB-_8^ zg#!Ky;XqE`)R=%yPT$Vh%7K81;R%7DKtQKpY;WyoXJ~9sz{JM#^N^sml>_KCPe-1< zdk%V$w6T$yzJRq0tR_9^05dz_4Lb_~8-U>rJEJzJ3u^~`2V>9^bo^FU)}ZqM^b9}F zV7v$`$4HbRz?>2;#^ECdW}KZgW07zr5uI7`$XK*0X5KbK$A1O~K>u@M z0Q#TZ0_cBENBiHBJw5SDvR~*55lc|ig^UfYjX-PZf5)K}v9<#~#nBG<;}swbtpI58 z5NI;95dZ*;1gwk%0A^Ng*gvhkU%|AqcC`5seMM0JcKTNKHct!I@EvG5D1v1ALk)2P z2Rld56-W}8=v&$w|IqE14FaSZC?xg{cErDAr>;y@M&}cm z)_YoEUG#1xo-Wq@@EOdTVdPy;Dru7I`2N1MGu-NA|VF5yrH>z9`f23w(1el3R%csA1e{6La)sm z7mePr`~yfuly~3UyAkN%H)j8hOmlz3G)$g)xH9GvUqF@?)T1~^Cpr#`x_B|O!-%Q|0xlF>=3^O z`E4T7v;Pp05%3ogf9;UJK}6<1izven3&w!da2x!-Wj1NMGS%BfuH#go6-wzT5$}1` zkc9-qz+j9zL(xZj^|kUTgv1e0DA;vawT?O*_PnQBmCCz#%eG@6zz;Zt=92(zE?V!=F3-Kaq$slAuIHn|BM=YMH)F8m10}6V}3f z!PO#%Dd6XHfG7jf5ZcSvsMGgJ!|W*1z~~o&@^+R?uU!mlS@?l^I2B#IFvJ@B?zyGC?YaSu*6 z&kTCWDE>~w|15X@F%h5coWET}5M~`DBB&1di-^DKj(;E#C1Jtj;eUuIGk>}Jp;oTr zoUav}>!Tli8`~umwYS*Y7y-d@gSKD;Be9|`4AQ|!p~<8AHGgvdQ?jjBiCwwt5hsB~ z0jUM(GP5mS_lJF9iL}f{sAC$I)0iLcPFn|H47%&%*iq?J_4EGvT(~NRZkg8vy>W<9M zC@N%}V&l#{M9T`8Bz&s~?u=vwwq`cHB0;F)zjtO*A_kC5K#tEMM7XwxW4xlZjd1NQ z2(LMXQ(q%J`a1>xCu*7>h3~Ir^4qpjz>lqziTTf4DS-Z;t7&BZ8@EGb8j#m48iz#A zuFnr+JR=QSJ2gfz1_`{x@m%II4kLR0JySmj6W2v6(vZp6@ zbz1TM?m#R=t=t0LVcp$|Jm33Ukga+9&T|O!f%OktbN1Tl<8A*BTl3@f^ugWww7u!$ z?YZRscP@uUr=8pw=tSX3H3l7(vgM-r8^+57c6pnjZ_VkC=7O)7gB`bI`&~f4mG*9I zL?o;Re+WH$vt^^e6T8bSXU*l}BR#_YS9y7}7F-A7%zwIo~Dh8~Rwj4hdeb6ZGA;>-AB_tlK%T8ELgW%MZF8_uNYN*BJ-0HE72HY>eTH z?@c}~8n57+S6HsuY}B0_e^l8Jh2QoEa(NY=vT=rVS+Pfq%#W+lZuGP5Ql{w!I5Jz# zy6ii=+urnm?Xvn3Y22h$-{uiXw`rBEGu01^YAMmuM7GDsP~tO#KipOrI{Qin-9l-^ ze7iw}ve_CF%V>={yKaCk0hlX~$I$akk$JTZGxC!rE4ON$Gk<6YAhJzA(l%)tfJiVu zlivLCtrFR8c@zBni%Th3;FA7cIS|`c{F@_T1?$e+xuax`lZ}TqDS#u_C4!)deErt> z*>h4=^31EVV4|xY620^c-Mo?`zRGGHY1w-8B4FZn?+jXJN6NNf!GyV5ml;nItkhP} zAa!ovcXw?Pujm7P&5`GUX*ZJAaFJ0%neA+$JH;0OhfjL$!%5LIGFzIPq| z6tx}Stc?<^M}{MP!4hhS2klO17So@W#E8^kPOnc>OU&gK0|HBW?1jhq*`BS$sW^`ZlCi1rubG<%cKhht;4HVmB?MyS{b*9J|MtW>(i zhm3yL;FThFojfa_0Z#5J6nOGFbj3_zzc%WY;&BEHO*R*c7cA$3jR6`yvsd{iXX%XN z19?;z0$e*06EF+-@I~DOD|ljk4C+#ovfwCs&p8^E6!?15ll(R;Pw0MPPpu`NC>X_* z4D+b|n757ayM|;(afwZdoM@9~Zk!$N9S}UPOR54(u)p}TPw(jR5X1V~9&pdmEGDbBUAP63p)3U0@WjHG*-&X7Dw}K8HI=E zvtJQhD1sbt6PGl;=>|fL)+LepD;fp`_$M)ywp4O!(l>qu8~4YQjNmpOhU&s;Y|Oio zRZt_u=_ID;v>VTZMDRVT8*XVrS$?q}mMbFLF0=`pUog#7)IVVRde$C4#vD%TGxe4s zEeKs|_zV0o0I{bL$^CO!G(Q9bs-l?CjyN7^D1;R8wIFl(b2!4@%6=|!J~8Ui;1Q+k zf*2%}4;r{}xbaBw2z~m;oe0c<4 zpA)>8v|}o=Pf|N!or;V3@L40eo5F^}iv~5P`#lXoJgqsg2@!XmkZNl}q88y02U5RG z(E5-bS@rkQIlu=q^upP3Df9~IzQRG%9`K||@VdH&o|}MvCiDXe(M(bbt2%QD2}osW zarHO)Tb%+~y=Z3 zG!6oG2&Zxx=d?*Arbc7cR#`11Bk{^%GU5p*vc?o)aKh2wlVNq6d?6K7Aw#xG!U)uC z2RgqwX{u`3PQ_4)3>lkDw@3#l&>y)HYFmX?0>WM}4D^B4Vel)=>achW?{10fKt|c7 z&g8cN6cGo7%EV{|B#9rZNG(*$<%;ZGEP_50Jole)P(d<(9!dJu_exJ{S)Gz>BVO$D z=YnBHby*fCW`9-{eErr39H;yc<8}l8NQw4AIV#2JWY)rUzqty8)3?pY7~J2lK~{mY zNhch0Fms~UjRTUz(BM)u_O6?AU*u2>; zT9hQN#l+MuzRX^ozGmvk{`rI1G=^oWp|=tI}ZK+W+;m@BJ-A(;BYlS zO;V6~q|h*QENtIYz03UCQ?1MN;^CCa@$lY5O~kJ`3=Vk;5O$-FZNW#iKfSRbJ#fXX zAwru&XQ(+-YpiAI_8xx`^ij~9rLcnZyffAk1MRY*Jdz~FWJYMBd0yn#(Ik#M$2$0{ zEZ>zdQ{W!5in{VhquHfvxj>8pxJmhRL~V;weGyC00)c8qD7)j6Cuz`XECJ>`3c?x z5asEvN?+pk2_o>ku~YCKs9o2$RrjM}F$l{wqlTJP%8WBE_EzWI%2LrGUjc=r zwa|Yh=!q*>*5Hqf)K8(9QqbXpAhKVgUNx2}T_y1#CLq$PnPCE#&oLx0S@kULA~fH6sYqJ{ZB5eI@EI zVPpHelHbNULP>@yyhQUX4;n9jRUW$ z$uZqcNmqAlEU(EK)gM1maq%*+$&U?*g>R_7MAA+YjNxLsa1O&?oI**hj|j8>CLc%h z=pW)GP-YQG;B)oiSn&7|yICvZD&rWGrZD*mnB(=S(U~^d;w@pvF*x$v(BFcZ{bf_sXwOzA_95_JrYo#%?d1I_kP&?mr1W9+%>JduI??g3~;X+9fM< z1YC1=ZMnh=62WRlanAm(W(+%#1hZCZsjR1ek895g;RN8c`qGEXTnCp;%)56udin{8 zLQp?se6KHODMw32brZuJJtyI68RK%9)#H<%mFZpIOd6{PE%#z5eq9H7a4UWUx#pxH zE#WGD0T$PF*8SMAU;wRM&^xSVQ{raxI|;tWvYrxbUPe5(ONqU7A<9Al)RjO=i)?xi zvWD(1*@fwpz>^3#Dk;axcbxw3b(0)~1V#3HP){w_0K}L!>%c1N~5XQ5*%&8-y6k%HUPPL_pRwVN09WW!Ft6^ez9>9^O4E=K3&ebg zt&Ae&R=yIHWv(M3r08TMg(S^En}`L(MJhP@kVOu(VZbV`M0B#mpP(2pa|b)o(8eR- zP`|@y@ZEE-Ma|r!gDBgTVTMHgI^I_S01Jgsl#^V?f)UB5Uw516>B=%wlIXekRyZLp zCXTDz)M2DLWu`;>oHYKGkDp6&aIwU79DTp>WYXsoxx5M@=JVoOi47Bt=v);<9ZcC0 zy8Lj1;Km+1+0*wWq#hs2Z}t`wSLMG%(~7CZX<2E#bxe(xEb6M=3auEZ)Bzof{t!NeFkep2jtIdt-^viX0 zi>OJrq{ZScM(w9+AjVdGZXSp{`|y>in2kc1`}mSQOR|f!K%Qkbbk3N#g}xMByC^yR zAuB{?6q2M8n2^E!Xmf_y%W{0|m!Av)(8~)Z++T8}u@e*SKd76F#?Cf5(tH4GF*h1= zeYIK0xHme$W>H7>b@&Fuf))=QO^s%ao%(pR2d##-jI<-zLul5{Gbub^zIp31C( z%GVLLO~$NEPz_Zj=}?%rqkkuBPcVT!-=nsc=Mz&l9Gt(!1v$5-PXu*X0bOC5Fpi?z z$Vkx^xuDM3TKKr`!_by+Kt5cE(pAsZKt%(EhI@n{0|)k>gC(l;q7w^4 zQuU@~mSY^yprYomB1n2tz&0hW5alXS8opruI*ur)E&4vhJ3Ul;R!Br+_w521;{@Vt zM>6l7fz)lFw66tegsdulMbK27WtO+kD^t9k`$TCWL-RUW=FIXSs{#^22@z)S73zJ> zLSI;&a*EFb15=wZNkwXM=5FjiZmyGh3*Xb0bViL+wqR#=b%G-1IvnW4`k6*)H_jfu z5|qpc&4iFgc`7tMw9bp{2t&l#P8Ls=PwBO;VY+{xIqusftt(hnWSrNz(nfn$ zsN1{TwgweJUBa_M7(sJ!o3LoA+Xm#6z`)uwHW^EnsNw}OjmFDxwz9bnqk?2jyYdB? zCOq9L9ctvwJ0>$?>;jdwIn$Q)P$95&M4e|qE-OBhg< zw###GHyQh;nOIqQRVYHGpXl4}JF$<&9#t6`wd4AE`I@2ZS&vzb?S3sqK&RwhTg**5 zM==rhz;YcWQ=wbk*|XE|%4rB~>mflCXuQ*PF+I zMi?KAtngxQmn%2FTsUyufoj)RZG)UaEiskj%Q!)YkV2revOu427u9R^VpM!vwwRBl zGe`bLU)I=y59gO8D7YT>31X7Vx*-$RK5(OGdceol5Z8EutCO8re*uQw7eA=P<><_x zuP2;(-e1!cY%YGAB=DI|^?ca9Zq|C!elmW&`N;NonZ6%iJeSR_ z;@L3GJNX9XbNZ~mm9;?OM$mf4@og?$LO($3&6>uN+gPXRxwLiT<$I>$@V;2aQpHy@ zkL8(zyraiCp5fHiiy)KsE~v-rp|V`$3p5QUV)hlm@VSQE2)nB0RrBSF_ln%#jyXG( zwf4@|?Q8owEsnD+iZ49xw?n_58|+TZH$xdROoxPJ-!IKBBNe`76^MUuuXi=sIf?B6 zI*>%TzVw~MAKw&v9Fcb0W+mJvbYq1lpZCv5YJ}&N*EVc^*)#42kq=!&Dd{;!-7k^# zIi`3)j$CCnv~8-H%>7+NTAQ1Q9j(GRpNQM#PC>FCT#3=vB;f8?J1J=%w{OyQWh895 zxROWo^+&krjo?*2u6-?`Y}*g*o(adY290d3Mh8_t9L^CA`oJpHR4p}YL7e| zZwO(D=W`m#1w{LT>O?%`)=gW*1IS;|M{SyQ-VWS_F$M<%YbX7fCikA1hMG%A)gvA3 ztrd%UhXkDn6XFIr`SMfsAhB$}uhy_-vFChySj?s3D z0m&t4>WG?~6)Yr!nSjTjv2ddR}1(=yzq53lJPsy z!e)$26~@T>NJr2wky~;6(rDd)|9R^-KVx}Sti5ppA<|gX@lC}zWN8Y{W$jLbRpwO} zJJO4ERTt6@S19Z{InfH}y znwM!63gTRkL)sH|U^kwSqbI{1i$7DxtUj9)f>~jWOdR5KdC7ldhA8ETK#1!lKA`o% zSM8ACjR}DaKYAzVcc-)U4f@2QrF=SELcXU@^wlX;fp@S&t#T+`Te#QdPKsy5RmP_o zWWkP|&3x%ed9a4tGg8*_kZV6n!=jsa+6(k^J90B&_C^-ZMX>+Ipv!C6H4{EL?9r9_ zc!y6O@`z)WZfK*}GXX^1eQq%FO3^|`tvJ_ZHV~c0KhcwefhUAcA!a+e?d58ZOY|1_ zb{P~54J^mXNI$Q!zqS0k$0>pbcI4JLR%)fNZk$v=1{0#Y0=R*11{<$)MB3c3g7~XP zCEWy9v3Av1&AYfl2pmm zuH5$}nUS`4datRMWO{N>*}^Pdg;;10QRdV(Aj7AJu7fih}jy~SupH>Rg99nM%xjp-|oA_v|Cp2VdQ&DIIoeE0T^nTRW{ z*9^`_5vQ(Z&_D!(-Iqn|1o9RLw9vq!))7lul;&OQt3EYDu2ebp+`)JeHGyGl=5kBQ z3359EA2%mU%1TWlv)+#7N?aTtrFbDlb;j+yISZIipH!x+2m#i}(G_qp9*+UKo2QQt z=Rp&ry^5mma*SqZw1|pa*%389XhkT+ni;VegrRgrXiUINAKvZ3l81tOu2>tlty+V7 zwdF}k5hqwQI@oi1BaX6;8$u8)5KTb)kLU;;D_TCt^&KX9;^|^;i4>!8eqUua<>(b& z*}IzVN@dv$!0G;Yd6;~P79f$sijg~w%6+HV@5oimEu5?Hh}-|#Ri&YZu8fUUSoZdV z%u1y3s756RvWqrkyJ+Tm6F#JWUwP|Pyu0M%P?4m<0f&wZGEJF%*saD{exWuDw*B2Z zT!=hOl(*AMT=|8IMhZAkClv^^$MqsfIH4FN36-wLHsl z<`W7%Vk?#*wD+L#JD@%CAFQglsOAb4BpP?kGfYK8^-IpIe`9EN62fr* zEg#Lln1sfBoIC`fY7`l`ZDfJ|!GFU?j&HwchJyGK#@kq{a8M-w zOLt%^hR#@aKLqTlICNF`ju`SmXdHNwX?8gQgbTMik~>jOHBlS5CUgQg2Qp>U*H#xOMtj#q)8-1I>ZVN4BM$03)qEK6b8Bf%x zxUX#+Y0sKuyb0?ub)hLqFS;hWq8L*ic)G8$H?-EyP4aXgWPQs=*}Ypc95(Zi$e-uv z_6EOGm7$pV)bO^02g}vl5AM|hDAQbVwtItnsdYcR0HOk>yd0>7U~C_}ZDzEbjbKmJ zw`PS&w>D*2q;DoYPJ=3SwTa$WBShjh@bP_o{T3x#mlTgsX+4finb4JA4OJEiIpU)q zl20tMiZ~P_3&8k@|A^(v3@1AZhj+X8{Il&M()chV1Hw@+C+s}KYuKhzfgArJ#omIH z($tUY2=m=Zjxc>>;$}-s{hHQ=c8RDd%|iL!Cr6W>pY6+uw}znSeYV|`!knY?!?Mn_ zaLkF`_|XPW6Gw`Lo!%znetKg!A5SQ?nlKj*vDO+Q=z-siK!u1#T=n%;W#_!YNPJ%9 zXry;*N9BaIt0oQ-P_RGH&ThsvftFuk=ToDW3CY*@bpFR`)k1?j#wXgA#o1d^Eaxd* z3BA41O9qp7;bbsDbmEESW4Ra-#*N+I7c}gc*tNbpSlFc*yk`uERL^4!GFuha2{K}H zR?p{0@F=GW59!s$4O&%{9#8)lxacRNW;>F*1>mzpn2 z7%}>8Da_D&DcAjJ4D&nFP0@-F9;-hhM;gDDjP9pD&ul&&e^9X#Kd!-3xmh3`w$ml0 zeVa5O5WqcbF9M}jluKZnvTWgS+Q{9XxW|6;^8Lh2p;qo4Eftf*SaEm_$@zo|so7|{ zu|_`@(DDrL@NGd~e7WoUhhW=s30#ygOHW<#mzel?iIibsA5%#QJ3Yf_H=Z#UI!Xu) zO6fdXHD4c-CAat#nu1VKs%0xS?u8-aDYKo~Ul50zi5YLYp0{T!`z{|b7Pyly;CuJF z$fHIh$N6Ycu8&^4b+NI>U=ZysB`;Vi#%t$2gi~v{evXLBy=4Uz40MTT#~y=nR`9bE zp%q}&LNY`vV>hf(R*<9)kSt}o_OTW#F4hpodRg$okG7l>{B?nwZ{V)KqH6qAWPvy7s4iq>O)5^iJTM?H;4(u4(gOUJ&SD7 zW_d<^dvU>X!b+{Hgw)0JMxAq~s5{L2jUY#dFf>)c^r%Rnj_8Bfx+Xd*BNC&KD1gvS zc#*eVx@3(2tfX2+W}NT%bq8trwGy+it^Zq_3l__xF8S21=P!m>E#9I@t!}`E>tM;T z7f|@ahIUw=d1iOWRdj^X&p^ynn!QC=)R2YIjT}R!>N|ex3^HMjuTW(sJ56*p=T zL)M_ymS?l5NZF;B%nA)PqSWQ8ikdu*Da^KuRv99CA=#AFj_n^9<S;}KO4_3@wJ}y%tv_C0I6?#MVO_-UQvWelI@@H!2&wHGR zVM2;XFL2%$YbfVs5eW|$qlV4x2x|9-FOwS`7CPa*s=UMuZa=mhhQh*n7@w4fZAuAi zAUU3=SsbG7J!;s*ADkm+z2RSWarx#AAPw(^YPUY2x&6KufwS^T zPP;`HWi4s9d#DsGBBc>dB8dI1bv;kAUTXkNI#~3*IXzfLWBVtUH*FBY7OBHA0Uvs+ zpsmx^%r0HD+#+CV_3U51n?n7r2(9^mdf3RL=q11%eEJR(n@i2tv+~V1rIw0u^`SRq zP!R>VZ0^`0&s8XK#mj4p$;G}fkpazP%=D>(@4R4ECUq_|4Z|%TkKJt0<4Cn#}r9hWZv(nY-cFYl&;M&AQ?*V z_r1N3%*8u>r9wrNNT=cpA}o+aEBPX{#7XSR$tZ!$ z;xBYvtgPrf!ypoWqr?y9wryLRbg6_R_<9zFrzNrT#L_%Z{d=F~PB1C(W+OY&Rw0uv zFm-ftuR`j`qWF%aL=qw|rO!z5eUXaLf;ZL9A43sgbc$O`l$sf9+_`)^2FFq4ZD4h}M(-^%7 zc$Uv{xXqr3p-In8e5*+#0{BDc{o=t5hqBY&l+m=6R?J>C8CGoVY&Fa3xkr)n z{w(CkThOO_xF?LyNt*Tgd}@RG`VO(gMfzMw#gmWcSZZTpRK1uF-dc?;$Jv;ef>CdL zU7ES@*~LqS>_EDh#wcyl0L$;JWY>s5mU;%K(o=_mPAob@9RH9?__0q^oOWx5Exu2YiG0KO(B_^y?j6By zu)6Sr7{4|fM6cmY`8#DVY}7u@y*5}L(e?xtU-$`;FM}NRhyjEh`0IVaX$qvX`n6Ig zYTlB>UyDoeP^Ccs=u%e_(hxXKlF?L=!s&L)=x-SFa~7b88#|KN%+=4_v)b_H z#xU_s*0F0SI5+Z%IdM4dy zu-!f_1_OO>18wz98^#Wpnq86)ek0gPcdre$!J|+TkLE`DY+?d2b3ecrL;6`ii{(qs zg|M#RiNnrNwy#hAWPe5h+FfUvUs{vHkr*JKhtQMD{+^{lFRhDgyr{JV)GTwP0 zNLcu<5@aa5D1y&L!x47n4>!?C$$Z_I7u77Gb!b8jro8f>cN%u<5Daz)qh`6Gx+uFo zpE1S!mXu>by4YsKCerpTYb3b0_Q*>sH`G`quhKU~dmUi_te4en2b1>g!0`@)Oh&QR zmdP`bsKi-FX}n&68P(N+=&k6=;JQQIYXimh0sZad?6JB6S5dTR=#i1l!PN}`6Mg>x zF_u{0j5(ZA-9B{#w~n{ou@k7~k{lgKo~eygua%mxD%MF>N-K3~9x2LKJ|52+x-~p6 zCQ_a+Zok!2e#cmA=B|Div>E3QVDgiTJW@BN_o{s{6DjH9i5i%v1o35Bx3|?r#8_TL z7(bUpy|-7YSVHKE>^%jH%B}Y5Uh^86`nQt?){^Ed`$r?z1qk*YNthW#2=#mJH$8|i z=Ci8_#J?atM4K#{DjjssPWC18*oduX+d2gnvV>q8LI4hfE429oE6(4AL9On2b;j-+ z`3Lw9>oM)@Ya^Sc2Qtq-Crx7wQ$nIM8rioNAR2l>thhE>+dT{3z?Q>3(UZ#Z%sEyJ z-~3~nBcO4}PRjV6&`3DSC0r?UiUReO?DwkY2H3_}sX@%AU@k=)9W8&#Ur z5fw$s+XYvl7uC>^W=i6)HH$sre6NIjd?XMn*Tq^tf+L%&2oSK($^o(uO`CDuOLWPzjSRt*YQT&QtLDz0)q`dnfnQTS>){3<@nL z;(E5FEc3>~XHc(GMsvUAR>DO9WqA(DD$Wuz7ly1!zU!RN zMzt5%v)?Oy>tal*xY`0Ldb=-=m1$qi=vAU{!07ejLXkD7FbwJ2;d^_}Us$$(PuD18 zu5%Dxc>Z&-;$!r~?u_xTFm^?B}#A z@jS#*C6cn=6b`~qv+O!`g+)kw<_e>ZPcu}c)Xl>6;n%GQA|dAtoinC{)QnU8N_E#s z+)(Y0`l^f0rDkXOqe{=C?PdYYi%{bt=iBf1O+Pok+-TIy zuR$p0;kND863m;?Jg)$c(|5|{-^96Vz8O<|b;cU!GUQFC66q$HB(&6lyPC+-r+s}0 z_jq52M_{JpF*Jc|AC9=VtFYm=2Zx7vJ!ghY4aA7 zx2e74mWq^9Tqa_|dMxBP zx{pr@8~B+q#n4q4uTGwQ6EqOwFCKfTdFhNo3^et~vvUxdyCfGARZ1q2r?m{18dCs+ z5Rd+>Z;gk`Hio&c+t9yHJmxn`(C6tFJD{7ibLnaLL#eXxhYs1;@&9xs4_E zzKexBBfVVw>Q4Qo!KDu2G^LLUJ)C6eV4&-MrYiZXh)J+EuPMumc#DcRNzKaH2ZHge zgSGISRd}l5AFUSvgYVy$FKeJ*TBd4!-F8#2!;Ml=ea>lo=k($}oMC;6deOi`D6`G) zvCmSdQdq0$2nR3hqD7D{Yl@jm3+QV9@^ATQkv5nBQiJvDX6}QiShNfA$w_$n9Wx;02 zzn1BENo3`s2JKA~0g}og$I?5~Z%(^L&@kUFg|E_7mqe^gc1hdOin5Bdkzo?BE`o(6RS2 zRa7b3=+|}|u+(E*9A(%=O=;JG2vlb6)Uw{C>BDRm%S@s!rtWe=VwulE+h2G23Xnsy z3fTAsXqeF?Lx-o?-m!&Yh3-)B=qb;Fd9USUNC%d^^bH{lg&NYEykaQOYC^Zq(Cu%$ zZ{!EJG-648&Qyh!^FZnO!4P)gNoUL zDb9<<-+d!hLwj>t6|x+$)b?&`*aeQoPt%K?-i0k*a?Xr{YbuvfC^sVXbgU1$(onNh zDMd5jW2rl#z!yB%FRE9MH)SkMt?ns_S0BR4iGP7`4qb(hVO3qu!~_ z0|~);?gb!jvbMT;a0T~wSIVlD0yEtAS;MPlu_40^KNIAi72=2=IIEOF+@9fDNcutR zUBV*UX-i{UD~)n-vW6;nO;&WznKSR>dn_u2pWZ$m!-+>cUU(M4SNE+&WF=EY@CKXn ztORbbzWFR(-k7#b*i3bFp_Z>(?iO@t!?)!3oOiy0Ff=K?%*W>IWV@ zCy43~VLf(_Pfwm$3&jWEm*0UN6PI&6M6QD#zlvI?G`hxPKd3p;3YeyuAi3my>|2l2 z!p>Zibpn1GBCUx)EKTYF-b@UeGll6ojEl9;#TS%B?e51_8_$&{-A+38b8=$NjZP!8 zUL4_c#cfTfDFp^AF@D~A2fNacbuZo{yv#J22V1v0|8mTE&#?%yLaB`Wj4D9{UB@Y(BHlPikba z%U0X6l*4jyCV%ltN86f;M|DZrzEIUIczZ!&UR#OQtIv2gDnv7g()CTc{Wc|A1>KZf z_U5@w^DJDU>Kp#k`k_&}(uW@5Q&VlgvQ^$je_gv@k@-PQh{4IO+s6GX$?YjK7ItLg z$Cq&A5a-v_=G6C0{Ohk>8<6LYn-3ADvU&LA6W7aEYuxj0kDXZ+D@x$@AGj?R!DN_S znt+^EwNrSvH&lUhbMCj>2Ttx75DU#8wps1+tjF(;AHjE0@`L}*%JJk8|K+myY1aNf zK>z>@fB5D91p)Z!)%bsa05JXZ&ivbs{Il<0*Yn@DmVkHw|KCCYSP1|Oe>iJFW`2+j zp5e)`2ns5w#SUuyVfGUNf}CW4Utj@Hi-7>Z_=g1v)MA7MF#f9-7ADYh|LTPW0BZfa z7iLiFr}^wphH$_SO`a400RotQDh*)z*(HGK4^RNeKmT-T01)ut=ii^*0+{{)1u*^W z_+OxapELU<>))Dr{$D`>pg{cv6ae_et@sCA<}&;sbL&q}-S)tqgEQ=ttIiMd@XZB* z(%V~48zCeZacGiANMejLnU_om=;X{|S^Q-@HtleW?@%idqy$GFhAmsB42G0kWj4OG zJR}q%Rpf!$6Ar$cHu<=d*D?@1M{tqqE9s9ufxXCV487wEZgKGqtr1^7y>_COv*~&8 z3YpR0r16g_|BCN_J8eJ<;6ITT{~J`m&jtBwkl!Za6Dr^d`tWCSE8t&%j^AKzW&M*o zO!`l#fbx|8Km~9^qwhTMV*Nq|=y&;#_Gb2q;jPA^Mfc*Ca9X(-usQSZ>Lp9yJPMGX zVQ?v8vqKGJ-j|pWnhZnk2=rP`t9;xsZ5e>6;y()!3T`EvKyPP$1u~m^#k_NYsUhA0 zPr&iqWUa_2%lbPN|I zg{AY4KE&Q)(BcGMg^8sG07eQ-s^RkdGP3?2oZ%OKtMQ4uP?~RxRsxSZGc83MEPn7gbUEGbpoX#j-;3;is;#f zdv3H^wijM^dWc`5G+Y*p-$z7X=cj|`CNJ|5P@2(IkIm#kx#-^PRsXGnFvZ?>$aI3- zY7$Wvf0~c1@9$Ln&%)@RQt`))`*-Ie(-SU$?Z4mx0F1vdNB>YR!Z+RqUw@dbl%A&v zgc9bWgLuzpi`WL+aL=14j06*t#OI%cj;dlrD*UR3^f*k2(Je@IR*Ff8s%YTP{8U13)VN1sDKe`~&~=J93fjFZad4 zCxnjgAx~%Hhi%IXI>;vsQkyqo=?o|r7cZeyA)^RSNh7_~8T5q#3|B&<&rIEd=nh}xq6;ok(HlLz=?7;&nw;xUJsH3!ZEYK>L#XIrg_Snev27Hs0SY+( zFNd6cq2SEw=}F1&gx-Bqa9!Dk98w{R{yQ1}la2C^$@o;%{#q-)O~xl`07%BaQUe%& zR?fc#z{36)8C#!jjDm+A!XAI3=pa(KBB{*mKl-5alLRF2fvGbX3Om?Az$u}v=DdK3 z#hu4vZKO|a$Z({OD?CP20kI#RcviSvm5-$T9eafBT4IWGRgif%ls~Znntv-&$7|0fEZAMbH~yN-;kKXe2z{)yiK03H5q zM6181p*Wey!QmmtG~d>l;I_+Bcn$*i&-;Jz!|jKECP@~ zM5{q{NzW8~WLd2&xMBQZe=@_rlktC|!uj#$^ta0hqDnlaBjcYjEC9yeSmFFv8UG_4 z%{YG*s{fgekw`s0g^6WE?Cjo0HnwBXFh=3~;jeTOho0zi5>scGWf?VIOzRzl94>Dk zEf`QM0z$VyB3i)7oHK!VNWjP|VUb{d=BI3IC3xbJ4XU52X|g{Rs%wXLFY-Q-(fyr_ z{}Uw+;Qt!qLC*&IJ(W1SHH597;-RtVpOP7n-(&n_s_4J`fkAo}gCMmjv^+suK^z_F= z-J!=e-n(Po$GP<8d)I^gX5D6C(#>N=M7p)|)QJzmMaf`m#$NZChusN|>h^F$*mt|v zrn_@FIv|vWM&5z(e7w4L%EYoh7nH~#y5__Ovose?cM!zGao<67x;~-bfxY|DdeI>_ zU1zN{ZTdifwHxl)cC5tu7#okCSF*yG&tFHZf%X@5c zZl`yd-oT3PsUqIt#r{%wd*t1ET7jugyRMi`k=C0YI=WpitCElW+-22Rn`yYU`3Tq5 zh2j|8+9^w?pd|<=s;bcR8Va+WOC9nwb?Ol)tKay9_Lt`O3)2%=)D*i~xl^w0mSzdB z!Xf)e!5LVaKdTE}bSmErF0bE*gc+prLr-2JoeMKz>7ezxR8A>sKX$mZ`93KaKs9H> zg^18@!Z530@oFRj(N5U_{P8Sx%ACTD*T`TvqGa6T{l57moBC~-{QOdmEu#$ZW1?3! z?^y{yeKBfq89zO-t0IjOsotU&^b*FtvD=;Cz7 ziJzuSU_=l}=+?RyzFk=EDz{-VSmfzj5Uuh<(Zjg9V(Uk?_`Mt+n22-e)}o86O&>uL>Y70@lNg)}AMpB>cDBvO zi7oIkLBh;qu=XQ*CHIu8dW*!XQA?)CeeKxP4AGEl)Z-;?kkU7(VyCtbNh0fzDv@Tc zuwb%8X$Umbb

^rw;=Cx>mZ@Kf)^Z@aKQomM=VxPV;M*HPWp(m&{dbSgQK;{cv)i zKAl_0Cvr`ja^&Gi$EVYID~Kpo22iW?Q>(*N_?Si!LA34lQY_j$ziZ|_s4fgx4SL%X zFIbX{CpM;)nm0D#n8oZ3Y_V)iqfwsl&)qAq!U2OIZN*tZASpo#QG4Z z@^u_E7^CQvqufu1!!D)I(w3v++fBW|U5xKO<`doS0q_GM42V~`kf{TDLD35a+oB%4 zXS<@*y-O|U^RQ0_%x0r2aLWg^aCGUgN36_tuE?LeZdG^TDd^3IPNh zXAQ|^w?TnsiOROs4naW~$9Ws}=pCEA$52tun{>DrXw2m=9GcBe#@D}{neCpJo6o;` zvf#29GdJCT8wKf*sdHE0G9g64RN@3wxf+{B4}w-GiM2e49zZqz>?G%IUFRVPi9_no zqS3kMW2B&_=ibFKhHW1AhqL!qrMSBXRVeugLDy`HZbx~%{BiPwEOvY!uMtp&vo`VE;Qqf^WKBhLnFA_Emg6xs|*aUt`>N-Nw^n%Jle&{t*tR{p+C&yZsadV{W zAwJcoz%w$z9M^rv38I5u^M(YWUXh+uqsx{6mPA`kKpBRIErbg?MR(Jg8@JEOnMM)y zCr5U;Zqy^Te&S)^Iu33cCzI}?8#b2SogY_QCKo5Y(hNf`63BU{g_cW)^@go1}d32dlNxtJ-SO5ivk zkXLtwp`8jcNZm6sKm}HA*qzJ(%b1<)o9sq#dHM89&IiUHw-u0YYQ@0a$&Ctnme4hG zvUH6WjScwYdT3T9tY_nAge!|6Ix#aYFHK>_sCm99V!R!AZmt@&pYYBzfwXqw^6K5o zW^fK%OkcDi%WWdoF`0PY|M%h0(E!yHZ@Ja;<{1+rJCut#a8phpo+1&Ed@e|jOGo!i z73HiPB&#uw$@@*zg+VEwG3$c@yv&Fb?03G9VDse9EvRmsrVVnaAC<;zNC%j^>jv)6Yi*BR2kK9o%*_E6H@_Y3K&$ zE+sT+PU}O4!6ZV1Q^C4-jGkJWM1lTQ=6uxbSpEYY8ME{(K}0(fDz#Xqb(Si+gSO@w zkid3=y0R2lc)2IZ$w*+Q9aIwGg+I!e(j;!iC9do8*q4yDHj`zqr7vSOIZly(xMuzv zjmgcgPCg9QW#S{?XYCnuLXe(h=eYEn(p{X%MFWClOW0+U!8Z~UubU}%;;3|lF`P<) zEak3V<-M9!ZqWs2uFk^k>I_c*yX7oAjO}c6T_-LBcEj%88}?rQR5XUN@f5o|I*WQ| z?PNWh1(*~zlu;D+ylCmGN#9~fUB1+mdOu@yU@$3DafQN33K~mx{L)ZLjgq+WSS%Zb zhB7~eW*8RvM7e(DaOQY(UbRhi>LUDtaWx2!0BvE*1bLfb9{0GWzeiFll@Jg$4_hbr zCQC+~p1b`Z(Rj0N7azpSUI#y}lvD}tx?@=@2X z@eq7qHRAP9M5V?+Uu(mTS;~6bH;|n`*5!2$D{##$rxC2bIDchz^!3dySa0@_f4mDB z<50BEO#9-uUKn%@*P54t^a{zh7suli?%^7{TzCg~Ds@XzdLg6ZczQDlS!T_N;CQ!7 z+ck6(cLpsjMhKkUD2_$2=wTBMR5wX7#3>aJD@P;O**U^|K~O#gYXR&&laDlo znHv&Am0{kYL1t>ogS(rnF;Sb-+ ~>{z)}J6Rtio_V;^ZJ_;S=jR2+VaHGoUe$DC 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

9E|BV8`{znPm0Hl6^ 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
    vl3#Ht{a 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⁢uUbD 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跾@6{iY)Lw`DjQZxe`w^{w2 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�e2d)3;VYkxR4NBCQRL8Jl0Ka+oUQoY!aJ%!~wk zU>gYk`^3cEOf7I85pWYjq`C?`1Y-`){AT;Of(nm~%T?lQR?sJEt}Iep%$3w^#^FsF z5>H*E&h***Q!`pD+T|l#=U@CE9qaSwV{O=GCbGX04LlTz)CkPr5vwn5eMNhknqMRA zboGej??m%Jg6mwre;d3N}nFM><3O==D5A*XR{XI*FIy4>Q&GGz%p6C{cxuQj3qUQA%no`sirVT z+xXDtf84{lVY)$ofoTW(fc^maK>UE(f~*DA1v!G5-6P~*?O*NZ*pu3$zJauX ze1W#Xalw0mf8n};b-}$+-J|O#?=J*R<1gyOzZ(G%KZzX84By&>Pjx*@Qky+O2L zy%F1^umOL8GX>j$@B+z${0Ryb$`+y;8qV*vM^KM>3Zdh}38V{jyB}%~Yy&hW1is;RfaQ$qm^JOAV<4QUy8| zqTG*bgG>*$=2MRr-Z?q&CmKW=!fa6w#)hCCtDP+>KQj~##685dzkAOoJuVicG=wpT zpU|j!1a`PA*k&JoLdbogV8J(opoYBtLd1fe1`!2k;cx#1ww#+r2sT8m2=R?b4X3FCumFXw!b@^2O}5!QB*8b$N^*MI)3$$S*E z)~&Q?tWoHZ$Wz&+O-3BivHQLgZ>5^v-zLuoIoecPLJTi^aad|B4Mqj*zSNBt$qo=&P zIXZ$p!2;yY%Z{4vcE4QD>eE)rY=wb%ox&5CZD6zB(JIqU;>npj6T~+2w{4o@=o}}q($h77WN5GEpvZ~CfrDo}@MvN4fC{ES zOA8eSX(WapW6+O7ytD$xK$?hrQ4tF2wV80e>E=6|I!-1pdIInWs2}77? z-!3E!bg zyH52?&io!7LIhNQTmZ9N$BTXHC04m;d$V-8&~cBqe+`>ntNbrq`66`l?2clwDfv~B z@U^p8Gf?!oS%AS(qWs#0W;5#KE5YO|*5vmDqq~((QDNN%ON8$TyomCx1w*k}0|h!? z5g2SzSeUhpq+S~Sv}ocLB6oJ-U2duhASN;Tu)kqMP7?1KPnq5Dk?1DUlB*QO#^$J( z!YjfdxC!?c*Y8i>>5)|Cs)P|V3Kz{hXLKO*@?~W!=9^ki&R$tnoIZXqLDeJqF`Q~* zlJ^MfTx3*df@gFCU-4Na>77rop^KlqL8_4=!eW|!AS{1=at}9c(^RSO6n@&2NM|m+ z2;OV>EuNj-@VwZ7e0*irJNfM*#`8RSGAYmI`gbK>T+fWrot82sJ?4cgt3g;6Soy$O zz)xMseIrqPO!(3$Uv5xpbWqxS~Z;ml|=;i zPlFOCh_4I|TTX=p+5<&Oymv<;>(QE`0otv;N11_W{+CA|pXZYc@7E~fk}j5MZpKkb zqSePa)@3k_1j`l8Ux1d59I~goAHX5GjX(z{NPn#k=VkT^7DHKb3{W)segy*-FI`KyqrbGq_-%At0mv}noFJE%g zMy>-#;Ju&6{oc%%Sh1P-^na(64ts|H$0zaTU2k5mbu|)Kc{oCBfFm(%E(O-bQQB(|#GbS@7D2LMHWa7@)r#QT^Qske0 z`Du%e2tFfWT4^JG+8*b=Y?TH-iRjMWC}Yf37Y;E~sYW+&i7?SUCw_GvC$GKVl&DKn zUlXN*>S*RMk{GEON&OC0G%S3-XBcgHBCQORzl?W&-&%@iK%D?)vDK10^u0ZPM-o?u zn`gApR^~SA>FBIPFNly3i}Lt+aL7q4!Ds%`yZvm5EPi^YlQPv1KWt9%fvVUfxjAa& zS$q3q@|tEn9cfJ|z4gw<&Ky~C{WqxZC6*LN8geu0a)!je068jjpp6m-QK?70+ZZiD z&=FAPd(GDbekC584^CScwwc7%kTr*l}%sq?{m* zX7OFc?=pGJ)jBFlb4%zaOVvrSsB8~3^OsqT6xmEIy5h9 z>T{5f?%#dmM1|_~adC|dvB2uea%$3+z(N$NSE#NzSUY%RXT9+P$_kKt%*mcS?eZW= z6fXYe?pe;sYw`2xfWmEZyEa9#!iXsln8}rm=c_SewS6dy`Sk5@3=zxzUHr46lHV$d zXo3EcDRshsb&Y#Sm> z)2=q})E3;wL5b<0mt#rH(RZEv{G6_zqPEP6!p$U!EO<)F?Fv}8AEFcJvGNnbmIi!^S(W%<!7Og|E%j0)(R0Bdt#EhsP!`;; zQ2c)PtD-fTSy>_}CM${UY;csWY0{mv8JgKC&N*8N+k~3*F(j7xs1ltc%Hn4c#|u?7be~og{+b<4gdN{%CMLkaFZy(* z(@E2Ug{vMpd~-HG+BA>*0U;Eg$}9j92Jr3sS~e6O?**x++#` zxA%oUJ-k&g|JqP})sVqML29KYm$9nxa_sXGAz*oygmgkB={%oA^_EJ*0-;lfXgQL? z&|jp~vOU>>7!Sdp#unA)e&4;!Q!uxAh6uG(8{b5b@s37b?ZwJj``R4TktvYM(6H#Xdh5B$Cc|LXA;+srW&gJ>^iw zd3RHYUM7uC+8NZ=Ju8cuPVn?AmGvMa@L4J3{lHKDr+dfj*Uks`4-X}{V3G{`m|~lp z)lhYYPK(q1Sm7lC|3Z0)wPi`0uWX0qa^cFL^mc}ItW{yLW~?B`+=f`Qj^@pPww&0# zE7S5Ut1as5NBYSd3nmA91nUa!LkW`_EhjwWH`;yyqRqEgmLs3>vvU$cAFD>FXrZRb z%Q%ecSd=3M@lvh_m@gSUU>4PVL$N+A9VnJ}gTHXnzJV%mVGuP?!5bDo=@|Mnyph^M zrIbQVJOm#9&7s%85g)l`<`F`MQ3oUF?Bw*vHaI7oT8PUW<0`ihyX6_z;M_PnyK7`h z$8c*p=9OWxh?cT+4?A-Sis176-Ui4x6nE|R=_q0awmM~Z93U0OY(8x0Zv2}`xfREH zNcJqnLN+`-Zxtc2 z-+H+lX0_+ee6seY$H(urh01v_UHV&__`kY&o~pEQ4MpepMHmINtLTdhpn%pvWfVDe zb0nl|YKTV?;?s8v3E_e|vc!}wGcN55X@bLsPgJq^i7WC^@GG%YbzW>~U6!#iCEQP~ zNRf!6Yx6gBQMjCkg>g6*h@7{Ffk0$Hl{a@M<+EEgy}4}WcwH3wf}8kH*=^XwXt~;= zHN1kizCO_v7K0a@FyJVy`m4`?h){Du$v36Dsz8a!ZDO8-AVWQSkJI*;n*^PuK_a&R zBQ@~*9mNCYmMm=vWs>3-2*Me4ih{hOw>`fv#122llXqSS@1QCB=^hvy*f^&{6o_$66CEj_}<{R$X+LgpI z{*oMg&vo>gygxo_wKE& zI-3OzDuU4_NP}>>C@{sYmY=MVB(oUNK8Qx6FX*T$&zgmnPOO z>ElESlSJ9~Km+(R#BSPT6Nj@o$fqgwHBAH={Q&!3>WMD8{Zf_hGXsEXWL=1!YOL4b zG=q@2Lc5&uZF*S0Q!)SbwLr-um`dWgzHSZL@?&7#?|7*S&QmG^kFKxfRBhZfJeAbs zh{VToH+8F$*dE|nN+}Z2xD}*y_05Zm$JqN=Gp8U=My}`B#dc;0?yYdf6qp^k@J+GxWWeL8ig4DcYtQbJ`3#2nxc~U;pHpi2;iJL?Dw4=uMa<43 z+M>;s=wbFOlMMGrGo&59kqPR=gKy6;8DsIR;VID;Ii!izRMd0^vutvb z4oA6yMcBfxvnRFHNQ0Pgnw^0&mJV&W2)0H$5}rSl260@NF(ygI08*$OmeiJmXG*II z4w_%P1lUhq$ov``zkuIa#y{dw#`P$AmtMBD!T8R7WQ>kBaF4z|ad$+s*me%x2~PLg zgX6tQOq^h&d9VhDe#D*VsKTSLA`w0n+s5zwai*|MUvTH9Va9@F14uj z$@{u&qu$-ag0`w+8wFT=>Yo&(`dx07wy)m3;YeAb`x3R8HRCZ)7JcgWxRy!fZW7^I%1K<|Y!m_P`&em4>cZWvj zn|rbnfVmcxNFja)Yw|ox<$husZV%2>+1Qym;RILQ<~hEOqb}`FwcBzne}lXk36Zp? zYp7JJjd3^gac>HpS778*pB8I>IU`j~y>z=xflsl{l&9|Z(OwIzGSkK_m;rm1sRZHc z`v1k+TL8zgtZCX}Mq4b4EoNqBW@ct)W@fgSS+W=`W@ct)mc{(H&+h&2ojEgmcOtf< zx}z$q6Dl*SqNDSDzvrR0Ur&q(e7>Tinga=__#g%x7X0jI(S3vyl`0f{W#Zw+?S!y7 zmCha7z`J)yQglwz@|}eGeN6el<5Q6oPAYF3A-PF!u_r_oruKuHhm5pHoUe(Z`b2L$ z@;qx5VTrG;t?q5{cHGJ&E_4=HZbPO!4t!iC4F%x}e%0#Pi z%FV%6Y5cN8t2E@Z6V3}@jz*2I#|6*|*uD(M?GYpQe7DLxc`b3)oFvW?q|0BLOqGtR z9~eIN>6UkxeJiRTO(W6tvw4Kq-AneT?;OHJz+l`>1Imt{_>5r?jD zQ3Z<<=3AS$e1rv)<@{I&EwDt+{8bI#MfbunT3M2OiPFZOu#$fBM;xKI8fLu6vKj_^ zt4^|GX~ zjkUP_Dy|5D)9Xx9DpID?O~@U1cF`S=4JrMFC*HlqqoO%BTx~G>mDxA@`>|c;20A5n z4rk(&Oa4CXC|R!rc_+(*@*U?<=lRDDllGy`J*JCcf8ynVQ@AJjz;5#^&kHB3CIo)q zy0bzDcs!~?hkM$4K-hq)Bq&IL;2WnW&sKD8qb>PjolslsWJM?md1?9Rloi77`Fv_l zMn^x>3kSavmcZ8Bn|6*zu^wjyw?x5`->3FuWWO*2m3ml?bxAUuJu8`#=jC+9$Gd&7 zG>c#yZ6(`Yd!*qBYI}go^u-VQZmBQRMAw`Ax5AEW*B__ji37p)153}7x!uX;BJVST zhT?gtwj+mfQ8g5(4yJ}1B;^#cR`bz(70_UZcWL+?lgoO8lYrrlYuZ{BWSqq*$2TpC zo)SSn!Vb#?EograN(l+2H?Rs4^&7Ivz+f(ev@X8K(|Od|oz9?cgj-#bWuq?|8j%>t zsdZ<^I9Ju?MkKaU-S8*Z|A*{d@*%gb(&Vu`{F-&eE=^9xzk8qTG z9@iE6%@F4Y^JvJH{)HW0>&{OFu7@m7n2Ns0OY2_yb8pB*|2J|IU|&Z~(M`mMlS2Co ziWKJaU&Ofj_LtBkSDXRL=P_gcnlSTa zqgvFArdkU!v6xu7dah5y)dT*+Rztiob6ru<4|Q0X(o|{`lWuQQ$t>iOX&2KaXV$^0 zw0Aw9Eh{nX;pN0uPkqSaEVP7ERO>8)KaAotV0eXq;cc@Xnd8*J-gtDuaafvF1v>~B z+wx}hjqogM`&7M*V7-O|&!)egG(BG}QdQkSgxY+8bMd~#w8ADO*N`qQFp{SA*!oWg+Fc$=0!6 z;OvqC+s~!MIK)7l8N6LpRI9M49yFG$FKscI$G>=O4L%oinT;h%qajq#R z(zn%D&GHpKM@YUeGMST#Sje#WHboh#Kt2^1Hik=v;_)EG(f`D!u~D-w|8>>Us2Ga) za#|4E^=;o~bwj)&QMBk@12c(>;a*_icX(5%tna&Ei*K{%n)?0@)$i*?TK8qtFIDF_ zE8=VCB)T25`MfrCHC#%Bh%uVCc7?E(*0Z}M8&>qkv7Fnoqk=_AkV6;l*M^B+=jhNZ zDK_mmdIpN7DLG7v79vg>8s!TfDx(6_W4&%h`sW3Jmhe2z44Fbw>aK3MUz#ASXSkys zFXMSYZnAl%oE)MNNPB%%ndv`@X$zbAZZNEDj7VSFh!xzkeO7XNvq%YEj;_SRCIm`S zJqrT#5{d#Rv)t2!WW}PwOioT(`2Ky1Q(y%dF61`GPl|Iv-baPkSV~DLM4=&E-e2Oz zuJcuE`xNN$#LB`Ek1{upzar4wEbo=O*6f4lkwv4?_EK?b+&fF1Z~{zK`qXbV$0$t_+=5iF6EDHG z4|-Dhg;x1KQlmKaWH`r^ZZvAGwU$Iy@N1i}l2rC?Gw^Fv0mmq$k~gK|XptvCCZD>J zl*qaTGkdz<$rcW{WY|^A+l&z%Qwk?DXgCx__B5$drqA&Lm`r zIX{%87#cHF|L&)59Y*`aq|7e74QR^?x(UfPD50R59baPB~ zqyq1vUb3H1oh5%LCPaSf4e{T`mpCh^q9VBZn zkfsxi2gaI%4{v1C%e!r=T}<{Llj@jEHh1H1GeiXyp;AA#QL`DW>bNotQdeX}ls{bUiE& zN?(@NRhz6o?cZw>-sA;UtHxSvN7mDwbgiGz0(GtQCxYy~Pbr-A%W9{`EGi-0C|6$L zke6XS;}+CCk)j4Dc$#$<^cRWsi&#-0=p!ELG6D!E_-ELX?9sikdTA)IxzU8m@hcCp zR!o+|=UDd47abc!4Ihc;51=A?#~xjLL%%JPUgr0e@MF5n_(O3O#}6S5EnTf}Q0oTo z*$N8{O>e4IViF4J@1z){;-ZP}aJ%hX1}iqxj!$URm;xJ?D4g@0%<-0RQTrYqFJD?8 zPrf|gHK(pD7uB4O{@*&{N?D-#r6IlhB$!*xXM;CJQ^=a$?r6J!*R)L|*ap`|fU8h!<}aglM& z+T~o9SOAA?uV;<+xNyM-I!hGB4{vs?CLF|}=%lw23RaGGOm zm@={7Y8v|V@FuS(Ti*Xdo7Z`rO5P$pJq_9xDBVK>>q0xV4A0bi42TaPI1V2GE*y(4 zS>#kJ{)9X~Zay+iU!ecUklxYhYF8cf?7Xufl}%`#JE15Psy7%N1M?bB??o--K`Vem zpwoKesiCsTHT^9?hq=W|*kt3nugXw`)%1Z{TgjeZtsy%lX=6^#S`sS}o7-#peCDeH zDYpV+zVk@LtRoekCLJ$#xL09fi5ri{oalv4IJtkgH^|qops!&XQ3;EyeNwAYNx22Z zQCa=~j2#QnsY6bfWG#F;UPFka)Z=neZ+&Dhi^0n2Flot50{0q}f=Dg)7pHmsQN5j4 zA#Int@aUHPFzaaxA3L+;5J_Cr{WW)zd2kmaTWyG!1MBdNjr)t&`emzLkbZ!wOtuos z+x8`{DPNqj;*}&?UGA=5G4K>NU*l@RyXCvXd};jRA-rqRRJN5RnM`p-d3GzOXo-3? ztC}MzoCK{nqBags4THCZw%9O7U`{GW-flKB_1PCDaia9)a-5H;SVHwx=|@6Fb@!D< zh-8gwh0{h16K;dY$1lS9O78CFU5dx_hJ7d=31R7}n}+?7q2o3NaRHOpPB2%PMdp#T z0!SCGF`9jP>)$*4l1G|S3um(L3}mr{*(8WiMsj|&s=`1o@igzae6Q^ocOwNVuql&w03^&czl802$n~3&5 zQsTbuW!AK>pKsqK3rcDXkzA}hD6`GK4^%?`Oip%kd@o*cX`e4y-Zl=yUH#EvS6t(h z^Pod;gZ_;`|Domw5dwK!^_Fqy)pz6HGn(gwW9nfy%Q!CbJD4tI zSLU7dEAd1^J)xU6%}PZ*LTRqICHCpBqcd7+`-WZTdr}v$qDgX2 zOuseWT*xnk6!O~(GRqS0a#S-;USG!?dW+46Na3^8_S*;i=(%QF-BuX;WlE88=N1Oe z``CAlI{XA>eIg4gj@Q}&8QXJN1FvWu+4iI^JInWmttpJ_?Y^p8g%X<|i%(9DrwPA6 zNfECeKX%(R(HD9ZN=zrm8&3mZ!7cW#b4svdD~N zt7agpGE~?t7We1}E4xC&GaHtd8#q8BKuKn7yjv;h`}pL9Wwz&cLW7I*14DyPzlGGTJzul}Ag(FEEbzo}X_f{Wh{Z>XgzE9!%A{5ac zh0FPH7lXK+aSLQ{&8&8{Fac!B+_W)YqM|F;J3oZw$avx4{szH-gO?fipeAZCqGUktxG=p? z0u7_hMWVdD9Id*J{E-x6*7c^@>E41^rJfwM`gd8gyhlMgIlJa8s_fP>;UWVRBF`ZU zH$>pB;>0DUJEhhvtM3(#+x2q6P3F^ufV;@9KDwpWE|t=2uy$YG&Y~7(2tM^9YX^XS1!2NUXdAgE6a~{M zeN|E1DmIp_>_QyNVf)B9A|8d9z zII92ZkpCZJVE^Ts0fuo?M?f@!e>KRnurLD*@_>G2paaxIPshmq-#X;k0e2MbA20qN zyF4`mAb7#QIOJIY(FOkQkY@yV>i=PoX9h$z_@_ah2@tj5p9cBAD*ulT`M(ok8U8CG zEIk_=E1>589Y%zm@&C#o?+NXuB>Zqy*4k0jmU!v(;6&;zNIEeK?GFY8CdGlRDb$2C zC-$8H?28K=ev61G7&gj~{WoKietYbBc^kAJ5SjkSsz^QF>p;M$=wPPnsq2pwYvTAc zKOR5EUJqZ}S&vjp%4MueWU@596;m;gSAaS4!xift(b7L+pkC3+n3IdXmXmBSTruYF zyocr6R%xoW1=%-&JQM7vE>@|L@V1{_OA8G)3WW$eri^Q|y>+_b#dD<$=Z{xeYY2!Z zLAY0#8D9n{J2v@f=t?K~ne{J+tiY=BTwg3E3&raa+E|oUXT9sYAJoU$hIH3Jd}nhY zY7d*@Ae>F1R?||YW$**57Tlet|3J7A_Ds}= z+nW`l8J9tqR(-ue3Wu+mz&B}F*FpR}fwwXH$!|FHp=zaHjPPq3dHP+s1WSK-`Lha^ zu;++a=J|ffS@<3FORQLIOOThAg|7TjtQMIq)p3iT#QEKQN;PeL!OoSqvL(5Q*%kcj zM_QA7PFg03^!}xxHzd?y@>z^8;9FORt0PR9Ghy`>+hLKo{UE{}wLkj!p`=@cb)c#9 zlrciL(O_k`NiORx;tCtjO``e>w@Rmkk1}`UJhBh%LdB=3A#l*qt@bJv!jz=Q;`1WE zXcYO@8ZwMAqt&SJ(lY^Td){*r5GsDV?z&wS{Ul<2)r$D|sA^l9cI^Jl+Iym1DDsUs zd`qQx(xs`i%vYFB&#^=!NrAv5l15*wjO_N1F0$lw4`KdQmw1FCe9Pe;E-|t;ayFST zqexiTdymnLj5|j9QU*m{kGiX`s}S{?Hin{xf?%%>|Dy{96M(M%Bo%AgD#6?{t1;)dBzw zVlb~6iPh)*4Qhq3p&e)krEo&{+1QMEy@JG=i_)*2{!1ER9xT6MJOk|g{9KV(R%x_3 z@+v~CO!4hZFGWMcH|LR3Px@0-q6GfP;77idpG`)mSUvco!9nQX2N|LEM!GU|q`)f00rJ;@V9C-9Ak zWYg|+k93=EIBEZC+9FN$gjJc9JJQNH-Wi`^9Wm7zgb35{(^n_vsuUfevW1#lo|<3c z$2ZaEUe4?jxqYp=`b|@zA}KW{jS?N=9l{-{mjxHIbEmFGc}7t!F%K1ZXP;%A;_75K znyrBd^_qlDyXN);%!0pTr$q7DFbU< zFQ7Qxi*t}?HZdi-&=Xw2$S%&wlaYH=Rhm3@RYD{XPIa15wK}8LX{zHl-$m%JARc!)8okc)fm$70Xy$%P5zbO z&~U9K887Z~hP&`}FmBdfD7rVw?d0)J^aV1qU(9&1|EFgkx=rQb}Uf+t53$mr2Y7O)G(m6s?4vrD28*=sb?K629zXrv-v}%-R`A_jj z%J=&h=a8>B$~dvETw6E6=>+fGkBRAy?!dcwW(8qrCfS8@C}Y_s!c8Z4kSHbVqFue77O(@b>X;stdu& zV)qk6Bnk@s8ZbIEh&G};EAEX1g6+u*6uRyGVT#i@aA$@)S{OR#(tkSKYFol zw+Z6R*Ea1n#Vp3S+*_aHC+I2CI2b~*U{(~NW&098Xgu~z>KdsW)1<-cfuDPsnUG`* zrPL))?>k!&waK2n5}nJNohZA&c*pG1R84_C1C}yKcRPP9-4?x>_`up8RbN*V7Z}A` zDP%J7VG$`y-p?|aCp%>nicLw_ii;La71`QXaMVv$ofX`kdbQHGrnMflaynm~Y|c$h zU(IzH(qW@v{bUV-%fSf6gpEp!N{n6@gdemXOqF7;ndELr{(yl!?_5Sc!77tlm0-Qm z(*EKb!wcz|EnZ&){VipbwZ8F9VsUcro)VtuSjdUbIf>-mA2&Xwj?$cxmWaXEPy>;((~ldfORmRZIWMv%1r-pl`_L0hbLvFqYjgEnnI$i%yxBtyNBR^c=+vl9Tc{ zL9SealL{mS-I&`);hq|-)iyY{AtMT*#l(XSG7;N;Kp@s4KVDpa7 zys?6}DA8RFum)0>d`jQvdah>qYw{(fMl7>0_S=NE8Y`l~L0BU#4VPi*paIP1=Cr~j z@KgBg*_ht(7v?x-5Y1mYS{;cnsz&FRQQ3qOhdT2#K5X|N9Ex4>R%nvdFb^^mS__!T z*dsQmywScNr&&rZ*^Csd3Qk7*Q>qBzpUp2sWF!(+)&Kvg*jzSFALhs1x_g0Q$^KPt zbuXWRN4={3sOXEd=dZP!;=!+mg)-8VU<_P|vh!dzFP>NS)5x6_#APNQ>wTGMblUG9Mu(3RqzZoT z^tBNl!G&f4vK{(e_Lxl12LxoN@gjev74r0i|F%rLl4_EqAGjP@(SpvPP58?V9ka8} z%*EYZbw86phwbr&qrkx`3v)t#Yp!~_ON^XKQ~jc1Rb%L=$PP_Gwn39B#2jppSJBRG z3t64iXQG5@&Y7HbPUKy1);oT!=wY~o5OMY<$+tvElwBcTQK1kx#AgOntIku($oM?i zK3N?8<(WK{bCI1z!d1xH$=c-c_rwgX=zt!2x>al=>6x1t_x!3Y*y{R4>T7h(-bDQ* zW}-!MW?3s#+Y(E5JA)zBN>+E(BGPTMDv6LfmHwbrG}s=iDv6u%S4Q=|nPG`U<-3)n zBn?)g8CU;z#hhx7Uhy2n^CLYTZt-AJSXmL$C=9MJf(j3Ea{ezyc@dNV5=ecEzS9W{5F5bY$^BVDc?^u*JpxWHCw20626uyv?^mLyUEBRaL)NBQ_sz{2qrxX* zBcUeXb$%zQQE zbZZpmcE97=g>v2z-D8e0!KrKD-TAnpoB|m#i>1ABm#y?N@rA4^w|p zN9It$!6!Jgsuc&S^pLh$&A6}O-7=kwlq!9yC`wh zu@la!_I7~xlXKnP!SgKrOmj`8+I(PYypy%+*zL9L9ZzRWL4CjeHQW0m+}o4BkQpbs zl}Rl*P+?`PxBP9a@`38r{lTH_r<{t>Wy-52H#xgKJNW>)SPpUq5Q;I#&Y5osrBgomwseSaHumDA`cobM#0`x>vM*M%*Qgng4~+7(NWTozOm5P9vV}Tq#kj!Ru0S@2z=W)xhGZT zxYk>pSe`hiDXy85Ix-1%>mu%<^*)mgkJz32q5T87FBZ+eH|ocs3I2_HTMdCUlMd6k z93_$qq?AMKh@_D|>%2MUf+Q^_bI%8kK@RQ`2z7^t`Lfn_=603{+je$oI)6$E#~L{W z2L*1^%@Vjgnn@ho&$y(8*6!RDaT)zQTcNy~Ii31?ckh%cJa{5MuMDhOhljf?WqM~C-3DMTs4!Lrx^+V< zdcOsut3Oi2oJ;VVU6hy4AvUUN(0i{5zf)(XDk(iHj@PoZcRLWTe1nK27`&<(LF-a( zB8FkCB{qId*piT0&&f1G2Syd>K-hW9vSvXKq~zYWb%;Jj*EC-EvVm-Ua&(N&$ilM?)ep9dg%eF5ZC?RLNvJBUi{`1m zembmo=P~s11KYrs)wYStVhgi_=mGTBvo=TA$Mlmz#kmL|;VsCIC~3rK=o}hS(~`-m zns>>Pt|N9v6gV?(Fce}2jk0^WwPLB@UfrQfOhUo_nz%zZL}*aInqP&9=2$sk5M$r{ zgBl_a++jtVYpro?K$}3PWdS1k$xyJp*OuJr3CFA0Fg1`T80by!6^TIZcqGSk8XWm=v6#A zaEn8oZ8XL++9!9)sp#E4D7=%5E-1b-ye<~Y*rQ!5JYD1GcbV*;*Ix#B%{>-m>UO=m zgt>b{5D~$=>{9KL*KXR`8>nrAe#vfzkyRd4*%Rfz_D3T{63ca!M>G}fA+Y6Ggke}06gb&VooyxRB^<2 z=G0g^l}fwLZ3Yk->WGotn^(65>jFky@^4#{EMbiv5J9j`V3fi9N~{f68ekI8+$7Cs z)H9R~SOHrCmwb0iX{ZSTDW>Pjqv{GyB>y6)l)znNERg^yEFYaDufnOB#`LSaay~5u zZFp2kO+3pqMIhT?;BZc;RLD|kTO*R%ft~Vn2eP* zEFJ26+dP62#`g7ulS!q?ojgDqi+-l4!N{mDr0l0AdK?-VH!T3pHkpX>3K}!%CNLhndjS zRaIu4DSmD}c}}~15LD7;Nru0loW%AqX95>baWSsC=E>1$DfD)%#AB3HwmM-ffH_M= zQ)h+uvUU)f&{S0^M2HFQ z-+C51Ix%N(dN)e)$t0;{Oz@P9puWpni0CMG6h5VJ?5JwO8V=nnm=^@c=Ts=&#FdPc zj!a%AbZo0cu?UM`mVy?yRIyf%V9mEfPli3j#@80j(JBQ&|JF80xQH94ID zr1kdZnilvnx5b%n%{p`~6o91E4$TTqI!;a{xS z>dSiPV;V)Bw&0VsS@Hl0jb>H~M?qK*^l z#!~Ej#n3{b_@W_~PCCL2{0o97NIIm0%~&{AE?cqUiMz4aR!ZRYsqd%CaV`rRsA=-;ORs4mr)lIQQLx(Wik%9l z&DK$@C*~EJ*p$YypU#939Wh^Pfhb^LMU0^Mla@Z(M+I~x8|n9?B2qe+(a~7U8}m)C zpA%bQFd0$a@&bx@f=S^-i!rz|7_>cU^zws#-(l|M>hMZUkxLk&_MnHBh*I*(pg6k} z<7=Y`!rWo{0O=hx8r3u=mQOy#M_@)2c#R6nkg-%0892uakD{<%36k#*#zzCQne3!M zG+-&L6O`#@u+Dg2%a`%u0Na=OR?rS~XrEFRHN-f*3MQ0HAg3BqjwTqjY+Jz_ZyQXb zP1D51m`IcjH-c6}Fb6jIx%eXlT-zGt4kzl|gSwE99KPBc6S`It z*zxt+hF&XKQJe*d;&v_!F;AIDzIpc*A2npOCRk{Vil>6$NtE~I6Bux}l2$ki#|Sru z)^$_fsx$Z>U&!%evfG1FbO|w;pp`&1Kp6Zy!PhD0;aV}B(8YjzM*Upk#vcQ+!8-&3 z`Fy6o$A#lr2{RJ-?(eAK9bIy+9$;BLeXgbUt5wB+i`G4XRo|A z>!=2$wO$%J&}%2+z1nj?p0ih4G0|D48<{sIBnTtE|H?XjE2nmhP4 z4@)*gbaBt&-1b)&U_?J9>ch~uby7fREs9A z?x=^{1n$yF2r94%unUMk6CJehRqq=%Qv+~4e{gPEZUuh{A4C;r$uz1=q? zT&M8#V4OzMPHmPguR9&-$IQda%cq?ZU~B8Dt%EH`Z4FT`c7p@bVb9i=DL-qHrwqLc^2 z*}PH>$C-*THwIA(<}fTBew-JRB`z4Tq)9;}PWIcc)3Frd-n>EqPIb@a!~>g5h?U&9 zJYkY#!XtG-NPQ!1NWv(~OqHcJIT*d6B*%F9CeY#I_ziX4HA9jm&0dn|b?OqG7kKI+y< z{lw)V9128vtq9}+pi&{!rXYg{8x^cnNF+-024Vk!05Y6*orLD_Jwu_-0lUuu6M!Ce zLgqsVjb&i^6%__0Ei)9PC8_A4ZZ63I!~o3}Q8mIuJZw64KH(y}HyQZKs;n8s`L0{jiK0z9Bk|>3g-PCaY63v(ap91GBgi zi%ZUmUnUk6i`h4m zrGHMLw$+dcH;yja=_1h*(`eF?62|Z*ybz@gOWJ8PG@oP0cQ6Lp{E5ChWE(jXHlIEV zH2b@4mMVpzT?d*JLCByJDXGwgKb}RRP*}(b=3^SIfrmidQ*vwEwTa%BqE8ePSX`XC zdixp*buJI0y?)g{I@!&DX~#EfEZr`tsjPy99wB<^13F^q8N)>pomz8q#QD@f-Lw?d z?00;1nIy6H!gEj^)3j3~97CyM=^Sf8Ihh0&iLoN`!(4*7|BGJq6d zxBh-DBLUIMBt<~_q~uVhtM5xKSB#>E&QBmrt7hnI`~1b$D9Sc6vt z`kIK&#wUn(ugp7S{^8S21rIq3biJ|dnz7UtpDwk|U(gKcV~JI%PoD|H z3-*x)76 zZUzdVm_hR0Ii`@e?ph_VZ=wU;H&`i(&`-Da5xY#Cl^9jo`LIlxVusza`L*36Ofv5n zTR~8n5_|rrNk1Lcz>IgXcOJnWA;@)d#dfR~g%ysXU^uOBffArd>(12=( zJ8IqPDKqz1oi^A`ZUA#bmHB};#O~lfF%Q-rk^)>^bWqN=*9qd51+Wq-+>=eJRfGNP zaZMJrzkFxdhIeA`REL^H?RIt|R#*hx8hpf71-8wv@W(#J+Mehpy0dIWbAx?{dBSd$ z;g)K)cmjlP{$R=E@OJAWd+nTAx&>xc(B^mH)ck_g>ChtjPAXFj`$o9|3peB4ec{Aw z7aGE8&iEvH0(`IRRey_reT8+IAKHCY+y(T>j|hraAnNC77Wo3hEdz56ZP9b`Ov>yP zq0z%DZOvBl3D*evIIFVFvkKvr@&U6ROQc1+Q~Bw#4GfPsi*P+PSI~`qY*pJp4ThUvG9UPqF0zg6A;QgP zJEyZPzY57!ykqZy_Qv@na0=8RIR(5`5P0h7B+&PG;(m=c4f|AgBItqq6dyu*LVS%k zM|oQB6rls2y?Figh4jgH#2c=h4(%G21MKZfOKN9+Uw8Eh)HSvT z_ES~J)(rhU=4tL8U-BmK$L`$ck@pMf=MK+%pU&&uqi=6X*C%L>&n~Igizn~($<;$| z3EtJiN$TD8$&e3Vf6nWr7Vqhe*Wv$E+{pOffSu$i6^%`8jg`fz1#GR1{-eSXK%x21qPD-1 z{v*Z&pOFqA1N*lMNBJ>}emc1JBTBDz+?2{&3s?fVCV;{*u=w4tUnL;VK5FmV@5ki* z3!3?D;8+s~Nr|ZoM@wm>lTckHNdBln3&gWJcW?v0k!2wh0c=zn+Qa$vw(r7@&DFq% zi!qUX1|eW}6{5jcoS{B#%EZl+a!J1jl!$kq`Wn02!|zFFvlOw7_kmKjzyZ|JYD=X0&j~jgY)Fa$C%f1-lg8HXskQr7Jy{ z_Wt)7!Nl;_0RE%r|H~=yf7C|)=W+gjE06?Wc>c^3S|L>!`aeR$zqEe;!u0_(|L+i` zzcT%~qCXHNMtlZ<&<~(8)Wm0^V*(t|<7@wcC28U_voil*y#ZNZwDB1MBqSDmR=|`5 z+(Vjw(TP|YS@D?xl`#Y0W~=}#6D!LfS`sUud?waEfNUs9Cl=~w|O&wq+UnE@(KL47+hV{=n8Cm7a0Bd_RWY^?&A4gVB|{z?5O zIq45aNm}1c)!fL*>`#sVTdxXuei$?01LnzJ=p>kb1TO(`3VO(^`Wv2H z$CL8guCLs{gthQK6)991Yq(xc*K*VK8DSqS4exIUyGtpLNFhupTqWKo?d75wrg;vw z_>J*b`gk`GJOagVenp}#Ce{=aB2zd12a8txztmUBPxXlz>us_5ump>0TpP#wK(r~P) zyyJlLA^e2ws_=>9-BMS{d7Rr#R9#h?)9Pn_IKY>94dP9Zf^bj$CKwHJQu0JGfu0GW zE(aG7l!I@>hd)*Jn9jhBAru|J-}ctZ5v>mA3MCMy77;4>{i>HpOefbbV`&H@G2_25Pm3J-d&Nf`3^pT}paBre?s222s-c&9V#8 zho8vdsjIEd{JRhObe5D!#d1M_a*NP1X*PK${)z8{CJA+-P8|3z5gqcb%0y?Mi>17^ zidPxkGTp$fEjUTICG70i`yBg9`_LO}MgJ4Rxq1n>F88O6d@h5BG+9<#=Fh%2#K^h2 zK8NLW(=6i++xj(*0|F;iTjikNI!j%jC>19Z1Oi$g;;X{WEnD5(IFAAJq{Dv8?dW5??a+5|nf5OkK^H~E1F-1jEWMNsxU-J?o`^N?B zn5=>OEXL~~9xsJan%{W=3;VjKM=2wrx~sa7=rc~~km9-!T%ZoTQGitq0URb!o}*cb z;b#U8$XVT(PI-Rg_g%NFB{Mm&Oeml-K#MO?eb@A~P+J9T7%% zlz#tqQ-44EF&R2HX^Ay2p&p&&*!c3`;0{0Q@Dq%GggrOdkroQq$-+l*`eDK?r!u+s zcIOSJ?0`i!l0G&i0A|uUy9t!QJi=oSg84IfU6&GKX7I%0+NpwXK%h`dd_Yz~ zi35h&tJMh%BegRsN54U-Tva#lwVm0oXbe~~1sE+S5mn7= z^2PDJLZywH9TpAvkQQwG%n9<)*+ye$N+->EXZd^@yrsZ!e6|E7`C|G5PmDLWlnJ6} z4^jP_@{RW_x+kjZ!pA)DNku3KxH7XL)ogQ^bMhUno;XC;tk~N*!GMnPEm*}sMs#%E z+VYPU;inr&g5Mj>4*P3(g~Ofm{-Hilp%vFrM<3gxFlNa4Pxzm?#9Bcwko zkj#6zFQJ>F((PfbFg5E~le?b8T@dJ-k^oES$W1}io0KA0xP6p{XM1}#353m;Nkps{ zNrbGID1>b;r-YoYKL{^aCF3)iVdE{ECF3odM&hm428JJSvb|o{x3%=&s0H>zaGKuE zT*KneT%hnT16!O$cXG=yIhSuam%BQbEbn}-;O#u{UN$W%R;SSFCZCY#e;YTWJm+gh zX~i6+*k~8FjbZ#U;*PXZBNblU(`l2zQ(q#saF5B{8~d3)H$a%Wvl;a|OT%7QCW#I( z-o}E7xOt)C%KjQ+UpI_&A2-G|EE84TMJ~Xlc-W7nub(52(9}y*19dNrmxgdntrx!` z7P z4r{X#BwWlx*5qI2z_%J3YlgVBj;(cJ38jwBv2I$yF)0wIKf8mdCmS&_2v8?|0kB@8 z-CCdiKi2L6IFj$-8-2`8vaz+X?M!TEW81c^jcwbuv$1X4wsZ6QKlRjobl>-?>P$^{ zPtWw}o}Q_h)93R&UE~`QSMfh}ThX#NZElu3(Tew*gg`A#A7W1V7lao;%V5g_7Tgy6 z%yk-zSJkY_S(VSq7>bnG2Gi7LSNPy28pYAeX6ZXwF~gb9kprYh>cj+Rm)XmW5DZjE zx6@H**M>?sD72bnd-^z>4=a+qsM8^BV9rIu73y-W<`#vBMfQ#Rw)W75Tv?1mOv zq0PmTq$MGG8)J2}sal65;NHM5FclS(aegml;ixaM%7oWYx)sp6by(|p+`77I-l}d0 zbTp7e2hHWidSljjzhv0Yjw-E6cK;zy{xXXRg%VKS?OhvH>M5X81I@}9Eu>q;BRY~b zP_Po5oepfbQ=Y{i9CL6j?Fr}59D@`e^m+fq^kFKd*T7VyxExKIBQ6+((lTKv^Po#z z15#<&cWg$)H7x_56Od7wJuGgWBPqz{w(}T6=j30zQ_*}oK@B3huwlM)ERjPDc@#!Qtj$Tp-Dirp6i1lCOM)FXl*zz@_6%J!%5@2weK zEEpVtfgUJfg)MzU3SjvB-?|Km!1-87)7SIe^kGS$VAni3n68|ez?KD=J!X!^r;-sF zG(9H?K&*4)^XN4s#=s`imfNY0Xf?upV40b(I8Cx#wn@SDX4a=n=7sRvYRm|(tP`@h zMXc&T{m&p7`8%5GU@nj}GG1Y|CKR?jnV^B4pyve#r9S%1>cE;pM4XDe)Dn*~bTsIOebcN;Hn^G#E zbomy(8m1nnfYTxizvMaiZB$3C)2oKWDoAZ{ECuyvVcpz1;m zg{xWkHaJ(@4fu|%OQ21@ZfV@S%m(b1@Jp~wF_-UFqIQL==?O=KYqU0WSE>(qSL|!6 zwoGq?jsQHM&m=ss%OXH&^RW!vRbHpt|c>>1*=*FE{QO9O%{?={>j-~y6| zFB%xXU`U}_A?_1wJ%2~r9qBUU80cEho$>+e!|(HlXW%D@XF?XlC1{t#+X?2j!9C8k zojcyMs5{{U41nJU{8PN|yVaxx0Z6B)_}FMW`vi4chnZWfy67`Jt7yq@Y8t!8Ta#64>hqKoee=u0BRmu|Mb6#azcmFv2j*)w%B;0^Uv^tAe((hJBlk_W6y1|N7U zCt87SI{hB{n&y@4+UgbM86H;#ARBVbwB3FWer$D<0(e&p*tqqPR7E^&6?-uEZbp_ z`1^rs(6iUmJ-s9a=AFOOodWjMEG6@i+GXIr{WK2r?uY5e%cyWl@oG~9Bume9O=b+7 zW!N+ie5&W1Q>GWju|1dveaR|3Q*3hLDy|bJ*49N;FQ7-z$zRNbab2bm0RcFgBe zEM7X12VnlFh!i-upYcxq@8z&$%p={m z|Ft=F%Qjqaua)`}Hnoy8exazZ?t7SwpotvvMFnC+a}(B+iD9u=T;uxG9}o@k(hRXf zk*;FSr;L0huT@fiBB@!0YgY)z!q)UcSoB%fWJvfgq|gR*`9+K~$G*dr`G24d=qV2$ zHQudwcaIg2S!^Xj+r>qzXu+%Rd1O^$@-d@gms974P510yypm`-t7!$?oH>k-W zfxrKGs(+u^IrmZ_?H7h`UO2twBdzp~##WA>xV)UekxlR0tx3h9@3joJZ13X_Q>$H* zLpnHYAwd4fL*fj~zZwl}89Aw4;Z_^oO4^&Sj~lzZzLzv~QO|T92#q)o_MJN+t{1jj z?R4e>zeB9{Q6UVE{Ym6tB+#+{$bqwIIa~+eT{|L;o*PI8@}LV@J9JLj7#=nocWT`* ztWDE`@1En&-LBrhI&FWweR|F~dB^4VX-cotr0vR>_2AfWZk~&q*v*!_P+xB;k7$X&SwjoI#S+u0kH`?Z<6DN(%f*4VX;am3+<7VSl zc_cW@K-Z6U7!CqOFBK8!{a9XJDk?ft!rLD(;2$X0Mn?|^GW!qhAKLBsm~IooE8e^u z8IP7WP~fNt!ra7MPOannSM7`>kQB{5N3cPJcU`%ly&MTg2!S#rx##N@8I~sSjJF!W z`}_NGa~I?c2=^|(*xP5Km57lzZ zJ#~A0x3H=*VUJ0ur3@JusIr9Lx0b8^WYs&=*ETld{C$G03W?u?^#ZZi44*U*T@&7Q z9Jz3n%6(u=#So29kL(!N#e0x$*9pWGs)||PciZ~I`BYuCk!t%B!dbkV+to6uFjq&i z6#{MJqb8SbW)mvOKy=WFWijt7a9NoZ%xdQ+M2sNuxEhWl80(gFO~56mQnggt7dk?h z#NstCYJpBkQeEt}=@v<+5d4Ofroa1dOJ-MZnp5JPR$x{fosWz5`Il2gir^QELkV1? z{1udQc&{IlH{Hhsw&kyp?rKxBS!=(s6{z+NZnp~2jmll~6C&OEm`o=kw;x0uGa5c( zH$6Y^-Vq=_`~1Faw|Q}%zbCtQdqgUZG{YCFrAr}e%Ggzp2GisL3*|KS*o&R4J8alg z5f9^&)D3UFNB`F07_Ysu}#=zX1?vsPItef&MRUtsKBUO;hOy zcI_GP?Gxqs>um3H|SaOo3S|a^GGmjTQK)Q zWHDB=yiFu1FvLLu@6tj)KS>)Qx#Av0o{9MGQd0^B(Y&uDy%eEk%YKmfO4E#VY%YOK z(P$-l3tfg#IBcUE${1}t0uIk>_u}?91rMX+_IGBYRC;krW#D_W#ByMH{CH(l2E;L8hOh)l7|yRPH_H8NT1LviI)w zum!fr1nDYVgnjY{8lH#+nx=)D8Id{}#J@5l{tX&&^@yWIxWshNc?sT0jCiTKDPTuAxjjR|)PGt3rc0YKxn&AbXPUG?m6FQ}5jB0Szjc zpi}jEtRYv9k*gQk*=5NNX^o2yaP;G|uGR{iahC2F*$)a7U=V*}e8E4Vj-Au*`qm;e zNQDech_p(GX@i|Cb}dneO;Ad=PK_QCu)(e1r8kRP8v_69yr(7?PMXGPuf_3K5q*=< zyu8jf`8r&r*XDQ#`^HRuhB&vOdyAgBIt(X=4|@YkF&BMHl9`*(ME{b#*9f{RwAoqT zgVn~y!;Y?(i-yZv*L*O?P7YwbbI9^iTYCv@-km4l%ODvt?m>k(?y*V684D|QOas7r zs5xhRb6ASt+|&o@!?Gi1M6l1dc)~u7(~XyLViMyz47f7ccqA&R#l)icS#fk~gx?@Q zU{<}qfs&9hig-JDM#4j5tc$;p}`L5%i)6(HV5f@*ldWPV}uTJ#c%V} z$vE65Y1LDgd2t8*j~?KrRz%6<03ihaD-wuVk4ws+}XurOf>%GBu|-BRd~|TJWcwv(7}Q zbL1>tEf)=u<5v|}dAIYZ$*#+IQoQeAWVpuWkQpsdGgkHtJ?%d9)|e-Fh@giKx?FK) z5ornHO3w&M^=MNdcTfWj|7o7%$~k7y8rtO%Y_9KAz2Z_oA>WWE_q}_8HTJ4Ubpo9~ zNW*_v0=Xtuv%`10>2|OQc9Jz?j{_aa_5|eubUDHfr100)<4*L|xo))k$I^z&Z||;o zXdeeh3eN5zyVLny@vGmC!YjxFx3%@Q4@l1#dW*y7j>V#uHXGA!x1qbCvX-%>Op9|s ziJqAMECU;c5_@_7TytH8bvLxy76`mRRK3WeZ?{~{VsE#69Y>3>ZG5XOL+hw$HLC6j zthH(k1%UqCtmB0;5W7Qdp?lhw_kRz@M{Q!goSGre+nVwioOjoltH zrJdw8^>(J&%=%TC!yeT$zCl(fxZBAgcFk1q!D{M_;fxdt=wCr)8?h5y$6$j+Bdmc` z3}Afb9;{IuKPF_Vuj#=n0ExWb9AZ6Z7z91R!2U^;C8ppB@jasaRLaV2OlpjjAd2D` z9rFT2gDBA}(r8NJ_}(k}p%UY<56`sK(J5ytAMbh7SNz%Epr7%8p!2%HBn3>iDVa9x zG-L2M>c3M*+5>oKk1%UBvHOu!Kgbjh2&nWx!kakD^H97>8v=ty1$#HMo&xDTo&g0Z znVjR=#)Yb{4+E72l9RuZZ~o?}{({kOcpzU8l91f@&%510tz}%!;ylb)ZEdkz^$%LH zdO$XAj>=vRqg*V6moypnsC~c4QRNox4!Qz@3NvkPAJ^FRw_Hu_IZSdg0V&UALA+fM zqR)7X_AjWPG6#f#_``E4j{@ua_2E%DEC+FBfIrd$-jqL1&yurvQ)oKImFp(}L8pzU z1GDV_fVr>N*z*Wwh9=tHt%0gK{19#h7cE8v8>x^b0NNN3#kx43gJPo8#y7u-Xs;^V znV+X0h@q1G7;Tfmu%G9mu|Fg;FUiyqAgG<13PFt@?pbUgyb#O@ms9loa}Y$MLb-PM zAdkilDODIHKqOzOpV3P>$w1|oB%R*@IXbvV59oZ1!Te4|nSDP-bQ zyTC!8C@hgk_(5NIFE|0YauS&?li0L|@S{iWh2clRL3)|RBp&j)X2;j&P`Bpm+nt5T z#2J=O90uE;lX+yxNw@3Ufml81xgt@M?8ZzZExE?y*TvTMMH*@v3@&5lW1UFWnSf6a zb>!*?s<62btbMD{Ge^*xZa=RdNK))er70*4QF(#fgoqabq0-pMkr6?4Rx-v&nKIEs zT}(SOCZ_`yzmdbU7O?EtOGnWc@Jyv#i_3?~-R9*{D=BF(cZS0f^>`Fe;FE{^5BiuE z#&4I6WYG-8VNff&UVFgPueyxqgvXyA7m~HU-nY6Hc)JKoyUHKmiAFVHxir=|yWP(J zDw9fiAEG^6yRJMO7ai3aQg4sLisP#0H|`cl8*%H-VWxPxt?MmdrfS)Avk-DrxOYyL z%{_?oMKp{3C>YfDZtz0}V-y`n4(1CS6%8kvCRUbTclr7_g#@TbZ+R>!8Jz}LinN#= zTDpB-jEye2s>{Py-+J3Uj*CC4zZ$e`+XuORmbhL9r}Sjz;#t?Xvza-0Z=#d3>rIN- zKw%CQnc1g5m(o2GyD?sdtztTyP_AGjMbTt}y+$6Otg>dt&ZkXCoc#H5^V=c`P) z3`3!9v47LDXfCU!TT>={pLXa46yA0spK6pQ!=^eNroGs3_UDw9;h*wweFILIEGOSp z%$Pp}G9Tlv7>v`n{xZ>2q+@|{&Vn1Z$^(Dv&-&2vBb72AuV24)(1t@7M1MIIdOvRFd8HSRzi&jd zU77T4ssrRc?Cy^pY_i)~y4;^$LIR32wSV)pTg$aT+)7%-M7T>c1`h&mlUn>Yyu192 znpDTxNU6<2k5Sjii5JukLSXbc<8u&{o`Vp#YZSMf`^reWU&SWRVVl?<#?ilXOkO%) z%iP7hINaFEd!ho{!>Lpdj}my2N&SlTGUCj0NN&vAOGZSOsTodk8q;mK7g- z#0MUCb?rKyPxV)b(a>cvuZ=Re?WtMK6}w1$uBAiYEyteIkocnXQd$xH1 zCnaTJ_5f`oUUSF++A7|#oK(?(Y)zNrd$(Up1RcOIOq#U#+7T}0+phy21})w@&xJ=z zTCO%j?{BnN&3eKgdC;JwR^FZibwg~j#<3lv6eI%*lmYJ?mgYvbra3L7+`5j;+tG_Z z$jdO3CcG6o&(9%r20CHWs#0{6SgJi%-`lA?;jE}cCc3=M9)?MlvQ;=6f3a2Tn~NKo zEAe|TDC$YfEYD_S)UD?ExgI7(9dx=<64ybjkM%(}6g^LS;&9i|3pc0+BV0cAKe)>> zwABTLrDAf&e|$H5A$xbSroC&T%y==w;fEJ_z->kkP8V787sI0en7^O?<7aC>B2`~b z-N-$k)YV=;kYXG z`@#9WE_b^L-&RdTT;A9zWZejTnQOnB(hwDG!wFXH?OH6*lR#?5Ly zH}Ls6!+6n>wpNl*v;qKO;aUvpH6)1h7>Gn9VL6m)uS%SQSJZsvuUHy@dB9!9q%voF zW1}28{B8_%(Cnzxk)44YHsOYYL-gw(cZ&98X`hSJ@~6)0J@hGVI|oa~v)(LI*!FHs zFYjRY<3#*xwXmLU=vbRsb>J=00f*rhfFDJYo`-+v>}pPs8nw(`8vzgKPbf5Wvaob5 zO}K=lew;Kl6eQf#Tt_x8iVVdm<*Rj{H47bFFUidXh2l&3WXUzzDsH#qLOPCQxva;` zIDx&r04H*3$c;fM@+pepHDujne#U|^qVUOvswIK>dsho;v;*ps1p&G1LK4E`{>^M5 zGM8{7B~TBANT`)t+K29i;(6rLE~$~-kdo3^nQ(MdBWQ@uxt=DnA9=(^VTxcIZ8=>+ zbjR}YJdOoxK;XA}U>#Rf67O;gwJHlGuYv3mt5ustS;ua;trqqK(f&Aw2J4YGxyn5) z)llxnNuHY*(AiT)KQ)(fUK*3SA!x21+|R=V&bYI_d!*r4&Yst99?DW_Rkn3JOqr83 zc$N692@c#g9Yw^5b{6pzZx&YRBGe0KbK5T69C`3~n=i0G2a(51TdLt$_6j#nVv*vS=5M)gDFlf)iHU7KY1g;=Ry_1ZXA z^s=P(NcV-gfs>`E_C!d{?0@af@85*rv{9_iRRMTChSS{C8D;Aq-?s@#?wF0TL@wM2 ztXbeweCPN}WQ~z}3)`=TS%**JX>R&Q-sE606nJSykg*F) z;ENR!-aB|&X~Vq)r{#Bl;>6@r(u#>1C=DYc1$J?za0EyDI_nWa(8M3?R1Vg4)WTr6 zyJx;8ti)U>$Dc-@dM$e93wuT5>Idny)5Z+JtVr&Tk6oQ`UKo}>-}kI-wOkM{yWaY} zz%DlYiR`R=1~PS+8FqCIOodYvAqR=Kk{K}+Vq(OubYbTXvsA@rPQm~;z;{#XAk3v; zfq|^gMpjmYuXX41sxX<=PBdKnT-96ale?r@Af|Xz-MZcekF3% z>-PjwNfUi5*CKUpWy!S<%f7G?UV-Du`TkFLkdM8 z^9eWMe(6*>nMCZ{KN3^fjV|dVN;tY(2x6c)uhl?I9z?lDb_< z$O^-W5h%!@lbtj#IR=fbKf`nuJ;pofz*d%=ka3=AMfI9PJe8G4F`Rl86k%0mNBf@v zebsbwUy+phEbf``Rzb|I3g|JDGL5Y%+Ni+ZrP((i&z z`eIhh?MF5_pS{5kcVuqFb2X=JF=D4-r}9i+!z3_h{>(U5YBDPQ$VK)(tpp+|-t_VH zfEE9Jhc~c+!3gD_=R>BV98xow;kcj$6&O)k2RiA)y+chUHS&hPrP^2#9bP^LKo>bx zZ&q_+F(ZlG+wogA+~+?bva`)7H$Q(ceOdeBTz zSA(t(W87|Phu51XNk8>5=?Z~zOJ%}8OX;r0=;I=JThfK{RC?yP5y$?rH9Wf`rS z?byrxZ^_sqblBDyfiSE5O_Xemz6w})#eQ3g=y;+-wd}B3y5+m?0UUJlMv>u6kt1?l z%!E%Vp?d?R)`G&IWC6+LXtS^tOVgZ{$y(CN;#yVRhB;Fc1kx(sqzZ8lUW0WYP$fxW z1cGg@oEwI+oqTI&O^oc+7=sxs=f1s{2*aO{dA34uy7On;F4s}_{TVKcFE=y~A+NVu zEx4Qh+l!~I_Cz=e+76SGTK^sMzQ3H=9@4@a!X1n01XBpxh8eh9jq?MLq0=I)Q&E95 zlIZjh&cqSUq2t&AT}av6cL%UCS}I%a3aQ3FZLKYeR3RiKVfye&pdhowI04R5X7qD@ zmgeQK;GB;Q1$c%Fv!^auZfE`FvecYxwT2V3ZYI@Q^&&j84m*OUH$)V_b$;%`9(^8O zW}a2I#WjC`HH<4)8d2`KrFFIt5gM97^hE{!tum}Yt@bjgE?l1ay=}oo0Mn6wtFs!s zyEs6HBmXs7mU4+Occ|^UQpsk?X(PO2n)HO&)rqH^=goDpNJZOjhjfH&8k1!73`W`S z`{Qz0ZQS62d>cKgCoW({q?~1|8L@KmfPQc&hS{b8QbkssC@&ewc%2?2wW%P%Ou#JF zT~7V>)Q>LZ`jkn5M7gr7rp#%_?P$`XUH43D{E;p(QH!D>dtUnFxb5zAV(ENTE)jN; zoxZMNP&8)znj;gFY*rZOpq*r=5v!wFik#uk64?(mi&uku(CS|yqYY`&VJXt_wM@q+ics0c~O2S zN!26HyI8KiC&;>!4>Dt`B`{u#vI^toGu-5M2YBH^QboFZ1^MMfF{<0Dn~!`kj=i?F z^w(pJ8^F(R!@=yOj1Zv zjsKo7Qy$%HU+Zdpa2|A&&E+x)UcL~$U?R#mcka8}i%6w?Sd~-Q|4UWoM8AZ@2wHF@-n-R z_g;hB9ack^$Iyz?p2;K*uim4qiFk)J+jr`K$QFHH6%@mYfdC>R6Sb#E5lCUg)NX}w zz`WC_BJCd2%rcWv6eX0VG#na`u7Oz}Ym%;@)M|zG@26r^@X5+5`R3aAGGcrVjyT-k zcXK3l#d3LKYIaO_J^ELtxa_S0yDNUD#q5oL3gt^Y@GH|r?{<|EET&LVaG5x{Wi+B1 zh+++%+HY(SoQXZ17g5Q||LRpZt+h|*O6T?29EV}w1q@d4lbj@;+)KD(YM*btwp#V0 zQ!#+T@l+A>J`4u2^p=3*74vf9&F|M z8YWJ;J!@Wfc3cAfw0s^fow;9?_o!Dj#<{19H7F7vHYuuqD3o)$-0WWlhIl58 zU$)Arbv~}eB)mi;u2#$N^yMM;fDPg}Ro#J%)@t>8h6?zuQixX^z4No9CA^Jb%acBiGzvBUQv{x@9_dA6a#RX!U0T398wr$Z-*0Rjjz8gQWqO@vY1<^ zS95=)m73rBE2%RvzZX)AKC^$lZk1?^a2``zbEs8f)m)3b2 zs!B~2Eu>5IE-p->+VwRbl2+dl1wBD!u<@%>dF{4OuzlFxHi7a@?d+Is1PxBEXvAJXcBm$F%m7fI$|IGQ1g;bDgk5K{&wLRD7#JrO&XgqKJ( zX+yMqbz#&<<2TFtmQ>r$kla08bwl+N>W@(ZDyhh8Sn5*|ocsHawQJEcc7EtLUiM(CgIBC#JU2OL@LpIggq& zWr()=%=}p$e_mzc%~0o8534y-Pnm7ZIZ6;Pulbrkdj?~BbQ=2^SL8LojMEm9KA5>Z z@IR2U-hMJ2*2l7a_yNeNPggulCp`6#Bn0_?Gx6oRdQS7jDnVO<8Ps%vNB>$4>xYrY zkWwPvMsAD{QzvG4MOtd3)5`-Z)EHdg&gR0%wGpJXYP*O_TZlY`JB43tU_;QEH~{#g z5+^Lw8`&ihWLuo0RMYPF zm{z!`mit&bd->C%0Lt01X^vCS3i-}Qb(1E;yDK0Qld|Y~hpG`4$;Te}P(_a^yF+*- z1PXaxlQM!5d}X+ZL5$>*d2vrv1WzUw0tY|HDXjlV?=7>oCcVy5$cvUj%dTC<} zeKkU5*$d}-uD)aH75%|S%wp64KcdA|7&4oOh?+N@UYtI}J~{B)RG@$Y9M)H;ikAD| zn-xu3#a&JIzb6V{B`N1wofqR};tlTsBr~!IB~)zU3nO z|6P5sF#X3&B z#pzfC(4!1&eW19VZq~7%ZKVGT`Wffo(82an z>SaA~toFHMybx>BXWEc&)Wt4bQG91wmuKj%`1uN6L~2&gozm`f!`x_`qNZgMaghDD z&b7I2B0kH*{m=P^nSDM-{lrr#=n3uO=d{pZz1AYL)ZEX}PKh^CGJTGUHRX_pnd-Ie zwyS4#n%Wq0_AnIji8M4SR1UMrgoXBN<_AgFw1|k$X3anQry+07n?lG9>ntU5!2Dy3 zgwS9#2+(kds39eVAe78M6C`tf>*7*|1wQi8!(_#@DML5*BmN25f~w6CAPbDaQ7afxOV~m)Y|0#^$CW!f4;;<92e}kNF*78qb{pV%>@jm}7Vq$<{VPyUWK>xs@Zzl9z zIKE}dzkwk7?~Sv6Kb`d(?R-NXmTxP>#PDs0{+a%MWyWvR^9_Uk;Xusaw&!~mhW#H_ z^!?C3wCJCw{}M?S^dA`jjr>+qwHb2kv54sqrU7Y_&U)9a(yuc~ zq1Q{bqbb!A_;4@2fv&8|)ye*aDZb3!X#9?`W$xiE0H2&RUtB@D%z@6IBq-saZ zFBCyH+Ny(f@Ug@D6a1Fcl1r9?+6n1QAG7^?k1JC9Em^}_cnsE@8`t?*TqG-Z20hE%v7KX}1vkM`N7&Yg69e{$-hz*2I~XuOgkm zD8lwtuP_tx@2pyOr(wa_c~v6B$%-wcS!j`Q;xi?=-D#=R>rEagBoe>IZm>?ad5&oy zC|go{e-R|h1s-GXh};A;0F{^0!4>T=#|=)qrisNLJHFygZ;so+z-2j_RKUvamkUFL7Ww3nbS1z;jay=YbA+$r=uYgOY> zzBAi=J{iFAZiH=VB~c_vC*es(KQ#J$t`x0oHbmFhxMUo+44HBI?5rQHA8~Fpj%pot z&3-hRA;#5C^F-W<9F0%W`vAll@) zWndS=&he~}GX2sw?(C|2E;y<%UWQM)sWSTRKT-72^A9XPhWZUoHIjcnT+mzW9@jVh zI$Fvq9%6}4G7Bi__U70a16NI!KWT<}MMp@>o}9bZIoyHr?%z;0EF;Dm`H>+Q! zJBXeSnC)Jv3t_c@TACFL_so!SgMTrZ(>%}%Bf1oMaJoI7l2`4_mRNWi$=~ExS|{d= zFI2A|Yo$(nf{nN?b?XNCjGTB=8g|d_(BUGDl+h~~O*Dvo=ZQ3)Yjq^Nb{u}gv_+rM zkN5+70+KKz*2o-qdSY5uB86T^!MOEX-M6;(xTSbc;R}RhK>-&oPw#seg_HW2BY}Ab z!iiiGC~UZ`U-wLVKLYnptA)qK=4*g1Q35k19T1yUc_xC#tU57L1gP@&2f2rz*aOFf z#x2L~ky2k2p=8H$?%0bkdO`Kb|n-%gRHEULS>Vg>A`!ucpMTu z{Yqelp)kqAJH%cZa>A7~sKT-4Qou@Vq!yl3bDab*B-8P0A4;Imv;tY_T?!-es02$3 zUC9pIjntvhhP-(AkMn92rAQy;qmElmrVB__2?sUEV|HOQGJc`u?favk9&dX}PKUV- zw_<2+VAiVjkw1VmLNvBy5l7~y-217NCBEQ~_! z6(8Mq24w{s-H2D9?{Fzyo73bE2*w%wf>@g6) z7NvM8F{+{g^*VZ*%phlGP&IzRAdqu4=gAme(mjOCIP3{&etpEOGodTpdIK21+b5*)j$4J&4Q@%L0{r$j>SfxwSp=j!3r5k)ZkyW1m6lW+1lIjli;b@qT-z`p)>o zJBr(2Y2R@OBR%nc9t`%yK(e`|Jqjm|1c$cUhOgR>un|Gd+hz%1GKEa_*#<=^5ZnQi zAl}iF5KWR&vm7f^^w|?YGV!ix6QkY|a}?m*>BgW_xg0C9B>|J*0{Xs8B$IhB*Tu&j z=R+|?cYY4XAOwf>+nVYrA58mazqUQq!MLN*K+&gX&+&$@26|wLwZ)QqqG#Ycpq>#6 zoWX5tzq7C~-zCkA9tFqg%YBol&9@7C5a`vr5j1J-z$=5k7~7Cq;;Ke3i4CmbQaMFP{C=qlegQYdWq<1O&;<;}}B z-YQx%MYbjS_~FWB1@W2Uo#hqoEui7+GEL{}GV9gT?rSr?^Fx@u4DH%0(I9Y}VB=P*}nC+g@maG%vou(7sGir1AGVkbHF~ELjKL~$^Js^EB zydhoW@dEph-8|jXzSGTlte~HuuEM>8e*1;QZ@(adZ={p6WQOp~ESRpPUooE1yyCpF zHj8BadFKxZquMIj4P8ReSG54p6KHmBH#F*VVSjZX#MhF* z6pyqIy7D$#FT{ID4JZPX=;P8oZ!a`Axn_@GFB~^@#|rK|(GOh_edXtEvhfKaT$$oT z7Kg>ZJM^Yy#yjEo_WTvQst3yc3hXtVzsd*niHfCqb^VkrW-62usmnIPBQMY1Ehc|EW3||6uXOYX8k}eZ&B;c>=1pj0o zrcM28>FD6(oIXLA*rEx?+P+{tcflH2k+x>syyg^cUC&4o{ABvlD#Q08rki{LQ199k zdyyNcg;}$bp>7DG(&^G7NsXY{1&UL%)f9OsRl?b}Xx&13kG32<7l_u=QtTdTB01z&2-m)l%oUz!ZLFx)Z+ z_H{W}nB+b)7fx!KVj1TR+g*VW_6sTT8mN2q9(m2Wc&BvhJ(M{7RsxXXjX2D8X<&h& zwoDlW*3_V}6Z@77WvH!2a@RkWFI?2q z1hE>mX0^}C&X_v3ci&=#7agRTlmnSOp?BBfDU;0f+dpD)T`u-OBLl5CnJ!fxf%UDV$6if|C}@d#%uP9D)^Ubi)ZUCXq_j@)B$8f&C>N_lwWq#_r7IX z-mP*AdyaI}NgTS>t}E3|E898c=J7#er{Ag&?8Aa<=H_I+Kbq2`z_h}-Oyl3Yc!9q9 zhri_h65hP5#~$z;sc4mlkV*EZ;hxkj-#wKO$h9Xg3Zha)B8P63?1hKnbPtl0km&H1 zZ7KOBhf)$5u=y?*`|IkO>s?GP4moO_9JF{WPZJGc_j7%~XvY=>#(IY`3XDikwqRa- zVA8uVR;-_#Q9@AZuUrie;=vA4D`7E^Ni35uSZs#vz6fT*g~Z4Yv;aT)8F}G?2COjq z9ZCv1S~`}|F-^tYu;j$#S_#B?(QU8~f05;;IC8g7? z0V@!DN892le-c+H{I|~G2=s6qbUaG~B^B^A8ZIG;7LpWATdE%X7DyU~FtpL2r)jin zcVQrLOi9t!MiW!H{!#FVFyE=6uejDdabdyO-Z<6F8J^Z;;$rHvfmUj5j(M`!B~pgn zQ0?pF_FiszSG<-XqOgIy>&RVcjH1wNb*!{I(WktnDV=T5ZoI3#Jh2ugqD|~-MAu`Yv1uTo(gPY*c&fZ z?HR)^dCm3vfq04ck;p%&7R{T7z7F3%#WEde**c**ai6Tj8tek1^qqNclk?=}q|cNd z)2pgMbBj8$8=l>#$AKr+cH)XS>ia9PTV#lrr`vVrYI0HV+gLSLX!`r85}$WmaBeR2 z15G!>Aigh`SDr7-(;#W6xeKeyeYN~gD4KeE>w3xKvN z&jMUtQ?s=ZxgkHR&IuJ&ddb=RX0kEr*~xSWH97owR7u?v^<8RWI5o%mP#v)w;%T9! zy1&!7679?K;;TaGuoBg4DQtLJ*Hw&u8RH%S-W}V&>NUqpZu&R6A~Js&T+}%c=^s|9 zsrdepnCKvV5MtvNcHlThDdt$wABchssT>3JoWS2f1n71aP?-KPgv@ZwVMJj&!zL?b z##Exp&>_C0B$mBV?`VFgF_Xxw37245zU^>N1})t^UQo^84Dbp2IcK)zz52@eIXqr~ zk5_l>5Lc{VSIB+3~nq8z>gGc$? zr+zOMh8ESqT!EMQ-B!6bich?EbL&`k(eQYGdTZF01z<}eE2Yum<-iS%48!-KIrJT9 zxkWsudEV3dcx@e-y*UXzcHwN&E{4`AqJo%cHSvS zAoi+;GJCYb+aa1^n}an5XvP&3RuoB{*dLTmZAw2%yNezRd1OB*9){*MN>vovf72Ce zivhCTX&adyEKg77qvnxILw;+OLMoj7UMl2NSSng9S}dTIt(2&gnvjx~h?I2u{Uy}@ zg#`rsGDYV_SHAKp;*XWw=Rf(Ewh0}IY}7lg^O4+GX5>D^OE!zw2=BmE_0YxW>BJ>o z12g$UK)Q|xR%4k##W{NssM8*~;@8q&N=NZSKLO(MKb}Y5!@j&+54b&Xx1i6MFZX;t zJU~#xeZ3?GPZ)dgtf4hj*w%hIFVDd&A?O9{mLsE4cUk*gnVMtX)9JBY6t$a1yZ*k0 z-e|5afA&O5N-^n)hOU8@S=^f0;#cLe)VL@ycwiXuq5F_JD6AQx3DL6Uus^7x(mff| zO75K;T9W?L4(-_$?oF;81nvM`5v*Y^jzPn)>~=^*lMOi@aBze--xxM2`1O{cy{`c6 zJWHjk(s68>^|kB*TCvkS8#TU{N+<6D)6_qfU_*dE-PEX|ca#ZpcIMgeZg|!)PO$25 z?+6oD6YiPRPQd?Wi{n98p$jYb)>-3A<2!N2+f|p4y5QhFHL!AJvUHq%f^Q~k?y-=d z3}SJ7aJ;gn*KM%nZhMA-_c65a&erF{ajgUYo(%eR(DOa{6%A@p6Se6-S5H-su&r3v zT?l0&V_;@kq;=KPx{~;uNusiuy~kaFTTJD$o#2262vis{sKz(w`~<=h$9C*c_%l9N zEhWvx#NjkrS}eugYSsH}M;3_-FfUkP-0eR^4mSAWF0iu|{K#n&y68!J_Wk^LeLUHq zQr1GPtRSZgPe=+37yO&&yJg}Euuet}b}AQMQWTbpgevaKU(+}$mK1T}1I0&X$}?M{ zcq1d7-H%or@SF)2ve)HNQjadCm`5VX@w2~5F|7AG*%q(qw)Xw#` zLk~7vQ$}nn;n9|Now7e`Uw|_=d?BafjI%VZAXGeaK#2(;l@`|8f2Eh^mud3BfCo*V z`=~)Yx9TC2%okEe@k&MWYk-mg6W^-xufM>1#N{@Xo``NNI`qpgjmqcV$lfzmYG7LB zDBM{3Sy~nsIrwQ}?~y#mz{%>~1gfaZ6bf`|&yKje59B!3OS^+bSRiWG2!Hi^_z>dl zeSKZ|JO6v)jB`6Q5_sz;GCLM%`#_sPKGceRDAY)S>@eqC(u|o!72=GWnS)4LRk-uQ z`LX7b)%18&3l*y51baE4a*{8&r6%Q1)G|i@ifFTrRwI!=oa@^{rI`-*g^2UhEda5xo`sukG&(a= zMRd+Z+M1WODQu1psu$EEFSC+iKDbx?D0&x966b`KB63fm&SCt_SZJ=?WD;`fn$19q z|FfJkvf(V9@*e&blEclBKHx>hY24)ZAyF{|*{a)yrT8hQIMzPPDyPqntqjCj*T#i$aT7m%H3ZFKQytz;=| zT!#T$N5-)=)nz!4_+q=Kh{(xIzn|}o{bj+zWuD}m$q-CKE}}<6n8bMYQ+pM2%dlZu zDY3t1YPmZd4V3>BMCx%%&BV?9AFRD)R3uHCppCmrLF4Z3PUG&46xKM6ySux)d*klz z?(XjH($K*2yfd>i-_Cb-_s9N-Ja%P{RkxcT!ml7c&kyCvVVPY`Y zSKFPo%-o>F$`p$*u(O{jjzyFtRWW1o&fDbD!$Ka;MlV~BsU{;W$yre)ww-JzqJ?E| z9HW6cq1^GEq`_Tq^?#(s2D;)OE! z))zzjq;^zDXx{Mb=wK&L_gW@K_84Cm;~xFd$!ac=f9{7fVqQvd|2r2;{06+S1-#}s_-%t9Tcc4PJRHb zXBE$C^n=tLP2KRSZoXDG#k%0ftz2aBjBbhv0TsXmGpD^{SJk+Bi?UK<8;87)Os z+J~y`}agu(kC=5Cqy!g*=CL@kIUPfXRTPN9zm4^ls!mv1fmaR35 zEC}QBEYyf8m%l|gt$uGhQd^VH1*sJn!?Qgw-3*gIloy|{MZU-lLqsE1Xi{A!SX-0jd2G$O!%{BDiGcJ@nHaz^1Ebg6m;t8`` zG5ec#-0OytP_?y}E_EpZpY5*JR$?{Q@HLkKI=?Qb?3$`v-$U7M?Q23yhh|aoO!l02 zjEgo~ySY+DnKV6O`vT0#W)y;_+CU5OR%t`_szVOKqz1@Tv?&l4+12=r#0Hm`{}A(P zS?niOx72Fb!IDYWO8zu2bv2PW+MHluR(w#`^`g4}qf$TRrm=GEp)Hz|wz#jN%zy4d z0FL~GLS20tvsY5G;n-feKz$<+XR9Tas;Q}{A0Te52S^}PsTwR246ec8oYP`-@E2(Co7d22EONO9 zvN#5onZGNXVXL_;JyQ&8UTe*IpF`4nDResCU9h9mCSf7{T)wVAgqKe<6>s>O$1EW( zV=>uvI!nnu(P8&`nl+AvM94{*hUa}RWm>7#c($PLa5N#(uAa-;RIvGO7RSxvXl0h0 zVqRX=G~4)l8Miqp5zeO6wydaV_wHuMh_U0(?sh5y1m58iF^3RGKcKPH8S`5DG}^OU zYHo_#;aZe)na3$`Yk{s^vZ(wYU)L z@f+tb2Kh4V`m)1Srn1jbSput1cExIN(|!V;cSsH!G}%%B_z0>=5Y2;pgqiD2v_`F5 zzXdsNg7faZYbOBW5VCiBVW#IRtM{LbbWcRYB5{Rx`GwZ4kj;{H42kF~Zt-arko;2IRIrd)Rj8VUddkI zr`9_dipyLttPvt)9POxK@ek7oI)|)6kc$cFy(WQ?D9nOA;HANUx53o%KMwH ze}REWW&N;36f((GVR* z$9}wmwmj@1Z(epP!R@C|#%hBl=!X1)yS1LqPbyaUL!zKCfs^+QsF`B3Y)z)ljr;`yfY< zvtM%0`RzisEK90!Kd3eAN!3;653W1{XMb2x1ojyERO0<9i7SdA$%ZVwoXySc4+Yh- zYCp3ockK$5u2I?XjX!I+`9Bb@-88mW=F{D%9J;FT+Ef?9bLX%+Va7zIs}zR%8>C^n z{Ri8`$OK~N-2)`8R{b^7rs`n2VEE0UQc}Xd=ru|vvRpd2uviSo*fexU>O7HFUXda& z#&4Q`1-gF@(k96Q?n6=q8_E*Fr5T4=@PeTkX^7wo4tJ_iXve@;l2ZpmVOnD1piSay z$Ck6+2rE(RFkZVxcU+B3H(ope3b5U0TOiqG@~c0O8+-q7T(C#X>tH&x{)Zd@zL(!uYbxE{>hGtOA`a*~c9af^W>% z><1V@w$|+UKcLSB9~@lm%T*2SQE8~)H0UF0S#Aw@S`=j0Z#O>5P)XO(va|-?O}ASe z7kcKCqpue=QmC#^*XHfFsM&G7iL7y)&AsfV@n45ThY|6uXib}-*a|*t641`f_@Q4j z9jjVj;1uiW-b!Byj{3!41HM^WV4#~1u51~|mSW>#1oWpOK-?jK@!>B0T!y|`1`zdSPp zmox|+uD-3AlvEMCk$C2Jr<#YMUQ!V-SZ0xAym&m3A$aq&jx(igr@a2m8=PHhz5cLl zqW!U+hn2}(_*pn;h0c4N?Yf5CcKoCGNS?5(KEGPzQe%01o5boP1Cc?af-?AKNTNSdgNRIDFW%y7vc+duuHBwqbNL2i+%1S? z22Fgwo(yB;3B(p9-gU9stW{F^;p!#y#i`1FAcE3NGgpFVjK_k#MQk6IkqC4Zk-xt<;Ew4 z;I<4^F*3G)bFo8~2cg-Py4J=@aNPz<@b#H39%{U3!#D_YbNvF4_MJA`lh9Ju*^`{p zAX@l`{c+6yO{~Z}_dWZ@KA=0OnXJ`r+P%BlPt}KO?VSJm*|T1Z4)xetY3RXHS#$9o zc{`3hV_+OD@DT`ixvYl%%8sqL5!~91y0Yv zH^o`@wH=t4w{gLNf5T;2k?0#&Q8*)td+m(TdZ-^ZF#d!d=2Rf*^7JM3UES=Qq~BDS z^i`2{TqIt=6pN*elyJOoFkx4~8SKaIM2nEC8lY98ff@Wm4xribuFrI%b+pM{*|RN+ z&Ih45Flg`B!V}YqHF)M|8L3^T6PD?aOrF3L|yw~y%;KzF!`=T(jEJq zWUoUf@v8Yd61r?lYok~dv&2&JUmU~Bk<90eiFHu9dJN+&PYQ=6XJ#tj7zydYFqa6P z{@-SU`ORIoJ9zYbuM4n-$X*pTd=H8iTKjC52O`g$a(ELzX=z`oE>)bO07LB)NsiUr zgZ`hQdRW0Gac8-#t`>8nJPGr_BP^jtS;qC)1rgmE@66@%r*=-Vcku-+=*Cr`TL*R( zCY-%NezH6KMtAC9EFW=M2f2l%tAc%g6jpYi+zJ!bUJg5+jw=pMO#%azK6f)YXDCsu z^7TLy`Hwv+E{YAcj*|EuBFeB*kM1IKCOw%X6nl-HSHi{qzZnNS z`}L>xoyytWQGYFP=MjkX`S(pa$nr&7iRUHUdm;8gE#6AQ%eANDK#O!Hr#n}vhm_%C zZQsiu(JH+kE*>+yekf%7>`j$3$Y+v`37(-MK59{T-HeDZQnq3VMVTCU+&Vj?F8k}! zC4g0mIzHqQpb06=gb6s|=-#!)s8cM%;ZFt+5bRV1wr}J4F2O5(JBmhdkO*!i?YFSx zY$z-S*8nm?i24kBPfLOJkIQnAx2(wE(37}}|Il!dl;@&KyfjGs- z5p6zh*+qW3?60UPyM97gn8WpH{WyEx5+LfB7W^!x-#e2@*+56J*?K<7k75Z)jAzph8_l()%R)D1#V$}Od zUp`De-$w*aS-H@pJ@M)WBtwBjLx4{+m2m+=@z@gtA z;;3&Pq>S)qAyq|VeWsyXl08FX2iLsSb-5UDrhx853Gi@&6X3C;C&Z~S6D7J`P`}8` z>QYPgvy9!%ZyK0CGui6Jmc`oHtVDjPpp=u@uOE0<|H4VY_`&ay-SLqkh&tX_^po## zHBazEAV}z@9#gRG({$PK!(Mt?W}m|;Gy@<&>q!W&gRtf4HGS>V^4HJB$78$76bQ%B z&*2K<;2UGj{ze_#lam*g%YV`*2+*G$miR8a&+I<0$-Rf_JTW4ur{=3k490+4+{7$# zlZ3BVnU%uHBzIM@YU~ilkIFTca-BYKf6sY)g$kb{c7@|c5c9eKp7CK%J=E%aOE{P| zM%}m3)pcwqyLz89l?iUvf@(B5yB+*ECR3csTsM&}PEfrrpyJfNkha>kzg*a;SZuVu za@f=>takvBoa9`RM~D*WK-qSr;h_d{KGvI#N@@<()G)wdHP?8wwuY`yQTfg8rbc|& zeo3r3W5_Z8bijA>{99|4l7WryxtlSbeaX!y^l04LyNdJRL^27)^`^Q3noB6oSoXN z4AcYCW}c}u94e3Cg=-$+banvT#>73MGmXUSdKYl(K9rMy!3-LoKWB>$558smj?@|( z8K^BO4wq*k@h$A^eklr856edlVzpj&u%)ulg^=JHZJ%8U6pc_ns8+hfI2AaFV=D%$ zZ&(d2f;x#GOrc6J1nq;g`{}ZH%|6}(z1u6G_aiQ5{nXIpPb#ph(Oc~qdUy4@w_ecx zubL};mzWqJ1U3kpy>;PNlA)E3HGTLnVlrHIszZjs$nZxdmh#-p%v>MG>K;_9sNrKe zgPd2_hC8GFi%ze9aULI@wt-g_W1}G`kWtYhH{Lgbctp~;-EAQ2h zDZ7jU_7QNG!A&B&(VQmBFE3l|x=+uK&9{g3_PezaGQ|P4V~a_Ru+twD@jfE)!hi}f z!2XM_CiwktZTrtdZ_{bPWW3ZV_T8y4g3{T5{>KZ=L(yhad zH}zrAeC7>#MpltOFDn}!oqm5>>7Gq>>2kTb+-Bg*XMVPv+4el)Wi!#ucpGm_JKfUb zI9iZFRl0|xaF%d`oR4w{_eoy)9ELNo>vh*rWCb4f{B;q{d5u2A#4W7$eoxD7{;=g> ztVr3m|2$&n+)6pE)_%vsn5e)GBzIa4Rz>c(U#~j$Nx)4T+fOIt&)SIg`FUTun(`=W zF%uk9haWz?BbD_R3H~`V$YZLH-xO$ZIpuBaj`GV`BtTUn_c7Ev)R4L)sQv65oi9R~ zow}JUzkn$QgEnTEa{3K4SnXnnOyC=Dz4@^h|MstkGk;?)4Ky~aHvnT{b@CO5Oodk< z4qDkJBxzF5XEbX=ORwBOL(8_MQH~*Y!Pc}^9ws6k12xTREFDX%qG%9YeJYRQW-J~y z4a1dsEmThWvsOTmY4bPXfCBfdsuOqoTQ1Vs!W&J$wqXX@$nEjbL{$^gO38N zEwty3W9lTBF|B#DUDx&pR~zE;lKB)Y#BPQiOHLJ0#6{+jzyXabh}$sk_1si1n* z4EjtkBdbCWDBKAn%^mI6lY`iP{YQ!;-78T>7Xxd5AiPB! zTYP^|BPuOx)4e6BVY`yhd!+)I{Tkzfpswqo87*O3zTuyffn&o-mlEXTGJ&lMB-JWx zZ~3EgNB0CpmbBUg2?R$`u_*hewt%QK^`%EXCu1(> zo2e${o{61R%c+%Qx)Ou%M|Lf6WkK-WKZ*?lG`9lglo!Zw=8$C0RU!v_>|BAu3cxZ^I!B6KMr} zkf|N}46UXgUvIZ3o4KE%N$&2OC|;tes@McDWy6qp{*VG~Jq_PdCO`_MoPckR3}*Aj z*R!r(coeD&PhC5nc4fQEa;Q*9p{}1+sdv?$NLVc-;ZtrziFE_DejPOew`;(d;KpfT zCt0xh;LDSjicZzy&QpKBrLL3y`}MPf`o8bInwu@-Y}4c10tq{)laaL`(FL0A$^5L; zUl84*tW^E09 zHT3g~6i(y?q^?jwNi|V5`CBNk)uaeVM|uHzY~H^Jtmw*W>gwq9egHV-v}OZjDDd`82+wdbewP} zb-kFZ+u5J*rN5C^zPy#$tFH@Fii+rTy3niuJA324Xi~A;sJ)Sm`Q~m{U$>*tA0^cR zreZ5rTpMCw)eJxkP~ugqCENMU)?HM{B>M;n-IV261HGOyliJcIM5)FJ5(yZKLHoZj z5h_l3ksG_$R)Obu#F!37_|I5pk*#$)$5KcW<#T2j%ENE6d=C>MqAbt6c<9>DPun|(%CvNpdrme$$lj>u z#x8e9-RQ-b(n)`sU;1rVBC+0MOG)I6HiS@XIX7DS*#`vv^d0-Z^J?s0s-yp;2mhZC zjsI#lsSaWQPst4Q%A0J zk<>m%iR(=Q6Z00C9v@^EZ#ZsQbAx>E-n;>s*W-5~)tMZI5l!rI!`fFC&7S8~mePd+ zIR?5pO~VdTuc0rG8Y@N;-2J6R`q7?RZGOuPIxSple;bAw|Cqtc-*y|rr7y-1?yAyC zDb~@`EPRKaU8BbF&3zP_r5YiwCGgFJhRe_P1zQqfJQ1@9q9TMA>lEc?^eEL7ra$H- zQqsCqir?cyE0;$fjJv-Ps|fWIr5DQ;_v9`qQi^MFA%3QjfF#mzGUu`(>GF3JUUaX- z#352zzfiK*!?L|FiSbwE=jf$btScycWD?qf_16^crfQapEvdZaJrUa|Uo)4e!(zAn znOD9r8eNvW6X6b2Z^ZOeV(b=KRQtvDXfLj+bqF{r{liJX@}1@4x}SSvnSGkv8bVx6 z+)nzhw^_1V9GL4TSnk{IpZ`82zlgj4L5oP<~;9{|Bua+ke-p{p(Br z4Ca5dYF{8B`xi0!g-?EwiT_0GUufUIA{OQ^4)NdW{!xGZgBKn(e#NZ+ zz>;4`;#UmE`p@gH@~`?YUl{9G`B(ghwR=XtKuoMrPKgaLiwpyZ`A) zWBbR9_Me`#ua5mE9QjW-|D|^O4^7$^vijdnV*gbAN8kS^8_CW5wI%;28_CYW@_(aA z>x6avA@<6k>m+|IGneHUFE1=fDTg*9oIEA$8#^VfQ6B;UMrK6(y?%s-2#m&G2tpeL z6Y`s=SfD%@Hozs&P9H-I-!yo3WQPULzaaEG&vT`U7fCMb^!sPFTQ={fM=`HW_jc*! z!rh|!`YBRgAPQlfe`sM<3m>!bK*!lLOkT#W<}y>gx4h`bjo|((OBEvO^8>F8 ztP&NB5`bemji=sK?=&V5Vp}GZ+1dQPgPSaJ1@%d*hi$R3WtE5O6j!*e99AlAYwpMP zON0`6Bq$1x;W}B-EMh>Np+f zbB?Fd`l)5mo)t>N3(A0W9voO}>CkYwODX0$giSjI)U@yXge}92y!S4 z>?4pqVc{liepF%Ne@f>3GC~{x3h^d>zZ(2?i!dRAsHoIXxO4dSQtdOMxWXn)_S{sK z;e_$?v;^O=LAzChNfPD4d#?thfAvyIgQ>-K`@Z%5^lOe1jn^-XjU*y3jF%-sA2ni$ zqN9)*WvPqevti9c0&2z;3SM#gM^YGXDLxtvJ?6Pj!BoUaPM=@Mz0G60gVvIi`ki^; zNNO!>oPN;JH{1*Q%pN*I>d^8@Se%e)%3#6B2}dx=r7}#QX!ptLCo^fKicrqn3Ww|f zo?wls0^&<%>TvSK%FJ1^lYaCbh%28bQEPfNr~_uugWZhdMA6ID)wHq1Vb#@a=()p6E zU)P7m`8ULm5=nN;#}#v?ObEF+FDgRg2b`<^dgDJ(y#usI+GD*gmz|y zQ)MmWH6g*zKp{isl_Li5v!Qf}!onSzwO=;xxrK+KeyQs$MheY zJkx)&{6#mSU3-$M%ewd;At>UUm(}`pCwe+=(}>Y5;LVwOg5ZvLOJ_i&s*l1)fe2nPgF!-rNfC;K^}jk)0TGi0z~%WvoT9*lS-prSX2FTuJ8QW}z4L z1KPf_7OnoyTAV>cp76U)&D~wcr@a0CBk?lY{UN!2mjdyW&0>nS8uvu~0rwuoWg)m> zALt#JbQiR-&G4f4h(bYdwitfx*L^kt>jgOE_MdQ*X9`d2Z?xO;_Mvzb5+e~OQdtK? zWKY!Xoubk1)xgjclq08>4x#9{{R4b^F!m4T!tI3SQK>tDKi}Iv0zKuY5@-)p?#S16 z+13u|{`h-}b@gg^5-?zmh}pwhIU-s)A@Zj*s(@+IV0&@FRVMwpJ{|4ejQg0Z%J9z0 zW(w*e)xLTv@u0PSo_-Z(B5;R~RVDpJ=~@|JiQW6M_whVwaT6%|x` zkNTww5c@t&&Jr#A$LW=`ZDeU^9)W+Oj}D_^{;~SofrF;#bul5V_nb#X&lY?T{2tS- z(yhg<#UR;Wv2;P*#pl>Fq3UWGHU_b8qC` zpIx8m<~t4BW99+Qe<9OAcy?fO0jaPZu$e6k6IbU4)w?MObYLu?X3j8MkP}d4zG?O^pLagah`E(& zpz9z@9~GBaAhMJ-EGZjBO(C8jD~OTLZLB)_w?+UUK%*$ls)cYJ0U#f7+nc*OpNY=x?EV+8W7`_(V&T*n@M zt_?ll42yVt|NBQlx{ro2(nSY(y zMy6cL;}!PzE@)ov0dDWbzitjTX{;VgvdfXD^P0aoIN9aX_{rs8QQV zewXs}>#UhNimq~?&A${AgS}YOMGkpA$2;5L;KJO(9k)#yn*v6O}72)}M ztdn3x^(`I6hPGyXgYxdONuH;x0q3sG(<5rqOFn*BvW`TvjcJdB1dQ1daw*v}BV%b5 zZX*a@OB4R=4t>uoLpQ~A+G37;Ab}%`AfF(zY1fBOUJ>%_EOa z43D~4s)?r(eSAPvkMdEubK^83n-StMEY#k+x~6%l-#dMs`3>nm*GCd(ocClS%kAKu zCXO*zDRblhRK$9@7c8$T)k8k{^IUKD0m?lFF|>sFG}T@s>}m6NY#btHom6l%v6nd; z*Y1^s7syLXoO$nwxxRb_z?tO4(3?jmssT1N#G=J3(Ko#2!R&DhTqH@dGCfVVMvS0# zKnuN_bta>`VJkX33Kos>%ot9vacq$>W2Jy39)C__(V8$X9$C^tjb{t^{S4JCWaVPi zf@!GW%zb%jXmn!BSZBN^t>rN=HQR_Hs^V)OCf6S7eEhF8@ z$c2WGlaNu>C&m#OLCZT#jLhX0Z zw0fF8$3dy1BGC1k3u~HVK~uI4NprAxxYY0%@bgg!HyC16Rj+Cy4zjiuK3Vx21Do>8 zOn|(wnq(K;s8E~rNuj9yzTb|xlt^*UrmS*H)2~x;d6FK9Uaw4hIJg$GmUTFSwr$~#X?MQCCWz&NGT#PpE#MoF zL=^lg5fUpKVQ>FMFe4~a||esy$ET1EKCYG;dmrU&W* zagq(&U>+`Hm+D_7rhkZ%YOE))qkfeLJ*S|H#-du&E6=#Ad=C|-MmqNkT>#Mu5SG4G z|K}ha(m@}#*5r>mgoy!fk&5$TO3W!PjWpqut}uJ7FRtl|%(d28Fc;T6h)Ps002wQ+U=;%eN4(7o%$LCRw-kJU;t(1t)uP&FifmlH55U=Ujv0-PK_U{^tr@kaJe$ryb zsgadwR_!nz zBwY`zg#rDI)*Rhnn2Mf{&Gd*m>qTN2#ZHG&r%kfT@+Jr$NahY+>!&5%vB(xUsj`Ck zw}@7Ir+Sh9acDewYh2hB%fKC*9VPZ7f0oITES2EQS%`I)9#Ws)z@jnjBH;1@Tnuv- z*O#Y3#irT!RpeZw7&xm}o(*O!@rbe12x!`)XbN^0HRL(zOz=?KK$Ob=srVrB1Ew7E zIUG$(C#n)DK~+-|9~Cux3#N&ExjpO2odY9r=i`O8mk6@V#+XLl+;(2E8An9b!7G6u zOax`aywE*q4cg^+GdQrRX-#W0o|sBhkBo3~2v7Va1KqUR#vs9bV_I#SY>-~mxoA!Q z4?KNM0V5}IbH$bt18(FK#?$PKxr90T`JN*Bky^K!mI;r$%&Sxu(Oh%+8RF{r=$1%*p{JA-9|4#;?vCR2V)T^saa;p#f7!+jp_E4G z$42H`NNYeR4FA@2xhbiG%_~`f5Vp7MOCS?k38qY_3%bN!)r}Kq)_vxN?n)%9Q_zR+ z6A-5flIV>gik3rpHmh_bGgpm;q=6rxogo0;j0iW=X(t8I*4@<8X(tEe812T>{iT8z z9O)A@+VudoP{Csv?eYS-7~zkNcC~;n;(!kZ_@Co_>UB3obe_cUrpCKAb++OFfs`Ny z;EOCkAStMOtj`Si5<&MD2>2j_&l%|>G~P7?zDNQD5`$FgZv5yv7~v_6clm*?>VOX- zcuJ#Pe4wiqU@Ja|(|Gr}&Q==`J=%v`XZr)7n-a8aw5tkq6$9ud2c;P8iUGMu;6sde zW9je`gXDp(LI9+ZK5yU(B|LuJ3WHv5|fX9Um?H^hn=)U5yGL zJ3a`%u0{utofu?QSEC9bNC~2^yGf_pmw8Od7uV0{J8P1Gf;y9zIn7y8K^-A-#pew z0@R>_zc<#;rkh9#TCHP}0ho;We=SD(9D%76@bq;|s(^IkJShN97XqIypIc55+5WDEQt+b0a7Iep#iCqgKF!T!~x=CeK0_(#2{_p zNE~D_ozb{(G95x(kSq|J4E|ePECak*T`Ube5>PTO$OtGIA0!IIUg?D@%|zI>o};Sh zYZ1GV3gWeM!m8Tpr^Ma8BB}T51j#Qj* zLO~bE>cRVtk=)36^urmhx%v1ZkPssouDOvj`0Z!_zFEJp6Vas&(PcGaS^*UB%u&b( z)bKwiZ^@>k3vR%kbLp$RStatCN*0j2P|*l|W9)mEduf1;$b=7UWux?LN<|lt8G+47 zo>Asz&ugut&a15>)|WQ+lGZUc&~eUU;x<+`etAh5hIbh9;m|FSE~%KPD#V06Oj)Q6MUOaLBH<|x?NSys#ZodwrI)2DnNS!hpO70Vb##WSUu*0N zg1$YuiF``5)t-*6^3X+1=WPh?dq#r4kM%0Hm65O)C+@H@yGB=9p$@(DBJF3k*b!at zf87t46!qY8<8pFn8#*=j$Z5HecMqDM&SY?S4Vx#I7qoxP<7Y!f{pdaQkjLWI*?GV( z{t_J6y(Z6dW`0baTFC#jdySvR%AB%)#Vuyd6tF@57TE4$_Zm50ocS?!%2wQM`^s7@ zX!ja8Psr^xaY`yrXwNfv8t}A3+%o%?DR1u{GvA*1(Q^t>?84PKc}g#DWBSxBwy{|9yMQ{sk{5YQk=roIdb|16lNmX@r;z#Z>9%KboZQs6u)Oa*`4hyOqE6@ zWX$WzdvNhjn{gH&b6xH|&=s3<@lTpj78i3}?mY0yuXFQ{n&B2#W@hg^a23;M66`-v z6-#hg9X&7=%ViSmJrET`b8SwWkrpFnE;+Qt%=5@U+iQ-OHuC@CGQS~^x8SNga^x&l z&Ai%kq%7v;syt}$pSPE9cF-I;<&c-*rr&Kyov+LU*lCWKffoPCJhDq4KLyA;a7`Yu zMa;{}Gsv@Y$sMyrslXSPW~Otq+nFCM^q9dFyUROeQaGd!n2{7~%A<2d9slSrZR4*& zYvheq!7P@R$IKk#PO_sp{LxpMIVV8PKQpu*I*i5D*LnxX7PAHHFM>9dHy8t`AebP?CrB4G0~nU?weNio_m0*M?#^}3 za*ujXN)J{KaL15f7VWe=fWj9-i|ve#Ij0w^KKH8`c; zv#*PvAPA+ei*K`EvoELLHu$igVGnMP(vH&(`;KZ)>mN+dE`$z<4j4R8B=8X5fbWzy zV74GD$QR%|zRtOmT;v;w7m!aN)8OrX$C2c_?LE_A(;y1qyne;L_&wLYmputR9D1}j z5I0;kkgfP#mDhpvYjzUzufa{SbTHcLcmFUU+tNdoYBL z11n%qk07dH0BDt~O9tiG1c}&*_+-|IYq(@w0mA+8>S2t^6R9^@w9=fh;Vnv8XW4a1 z)^ei|oI3l_G^ROIbGO!uIF=95If|R&r(W!Hr@reGNP>s^?2_H5*D-HFsyucI!D-inY~y=@4pxQk08Gwjc?>)NK*t z+uWmomeS1}9@f@X(|dlh0PiAF?aK zPqEMY`WL}b;xg}SPJ(nJ0ZnkE`(wt?4CJ#%e~_Q2?1Xt~$hvel9bDdj6X!`oH4I@u zAaAS$*TDZ70yMUeFW*`a{z7PjeF=s^K0rN@wILWlwn2~m9D162ID5AJs{N{c8T}Z2 z>wC6+S$mGZW8Hkap}tYyVY|WFneNH)Rqz!ABLpV|B?K$>MfQF6OX%_FY40KQMepJ5 zS?|&6$>_QE+wWoCLENFb;km)Np}B#(VYxxOA+d$vLcjw<0?X=w?*Y{ltU*2jS@YxQ z`P%c@(9Yn~pzXeBmY@XS1ds%v9N@^{8NMOD(0oBSB{nSm~ClmU^HMR zppQTu{8oGD^eA?~OhD%S%)Y}jVg73sM|8+r^%jZ_k>Wi=zJ>%PUeYi zpoT&roz|Bi`_bNB`B%GqEE=LMvC?9-a{X3n=Fi`x%nanztrUF>;-SuGH&|j~mlo)4 zg5~^@>pms?Ug^PZQ&b|={M2|?3`8q`dO67l#;KCh9>~E%Ba+JLxn7yvyTe~*@!z6o zvgE~hPLYbawJ|LauEN8Wfzu@p`O_te$quW>ilGi^3lFoU3=SswKTT3j_i#s=<_#j@ zuI!0x*4&4Rrj*2T?1=r@c^P=WU>TM;3G-Xj3)CZ+jMaSQXUxF`KmSc@=RySZzsAfu z9eiIo%;5RjPlVgL&8*iB@>i-WL^6h*n@rgeV!|Tm)6^YzMo2SG&ZKa0Rg&_umw($t z&yh!2=WV`+@V>hL4lYb_{)|lC{X)cRB5Pr#YMeZzRL~z%C5MAJ$H>LU5h>Lb3G$M~%MpXz@?KwwM_YggV3;G5 zvJSm?u)TXm3Lyf&rV|>xMd-BVpFa|~M)}gS_G}M$} z`|{7wz1`}O;1<8W%l>Cq6>d; zvpX$*0#lvoK_1^I8b+h|PNfLhcx8N)2oBC4l)7cB zw_Yq%N79qw##kAML(ZnYrdFt1rJ9Hsf_0#5Zua)2Y}&x@Zt4i9vp6Q04pB@q9e{76 zqdgN5YO(yQe(f{S5x(2 ziKbc+8ty@=*{qvM^qafWw>g<$>pX#5xpz|y_bH|Vp@P|S&-aP^&>u-%T_1p=zOp7b zSGtkr`s0`>y`Po2YN0rdLPc|LX;Hy=S@H_hvjy?^x*o@RfN4f5hp)@z32!!5c=2g> zHu8jTg5{&MHLoyAANLP>_tw%gz2W*;VvWDB3`J+Ju5XaXZd|D5o&rzmb#>O#ieTJ_ z{`m2-?(a|fID&%z~XYn#4il$-ZAu;Aoh_i^zeJfKsdze5mfQ2A` zQvK#2npHC2lX|H1w@$=a+PR68)d9F?r6DvsP&H76;Xt8IOc4J7B^Hgkq<}h1x zT7mz_nSs9-RL$oywdR&Q)#5lrtyp>y2OiY$qx->8 zLi(rB&XsaXGIW? zTC`UyntO5S#ok=NRgfaTQ3ZYtZQ=9nK?DFRWcPzOhxdw77^*UAeo-$t>Cnu2Ox5a^ z{P99_H3Rp{LIAY0z-?wr)4}cfkn3Jzo}E($)`qvsGgjruCc`f`DowuB2hs>~{$;q{ zLg8 zvO(bBR%Zna)X81f-_&jR62H@clSuayVYuY3XhnlyNaJH;ll{KC%Viec_T;zK({z>< zXN3DZ4b0j+gLxU?9X^IjDk` z44iWGaGrL%rF)=^it(_T#ome*&OlR?*2#G|5m`tX&`Yvnf(8r@c&F`DM~(!YB5f2u z|KXjd;rN^PYm;!0`I2YN=`7!<@o#}4i9xsH?T&lV^meCta{Q?9aM45bonljJL(li$ zT4tr-s%CRcE9yJ@ximd<>g3t@okxdmr7D!_qR~7ZCFZx-Z?SDfw8=||-x_Xq!b6z{ z4M~RhG#^Hws!6k0Znwg~*`X4gT?n;)t(_b+D2c?Y)Q=rUjYet3{2n?-?i)dCPN3*E$n)_wv z=SVOprt7@2jrWKLv(!_luZ)&lD9oSX=8#DGUAM_jGC*C;;~wQK6r%-(uN}5H>w((` z>6M08(t?rf9i}F%TGMRlPO>MlK~95?l6y%NLDQ4Ebr$0G9vW8-v(J^*#lt!tDM#E` z7r)R73w7{6Ci)!o7AB6O&-h+4E?TqxVpP3?7knkgmH|M!&_8p*4|+{sMoZ)$QyNKScG z8mg7g2FgM4^-pIlvFBf}CX&j!mKtjy=b;8_SnKZI-^(lflO+;pN+%z8Luy|KpErMn z%p1)PU?=u&c9E~$jUcm0V{F>VpUwQrS4ka|hO_3N@(O6zp^Ig?1IL1g(juUI+}?Wn zAFRD&aAn`WuiJ4tww;b`+qP{d9UC2XtQFg~ZQJVD$%@TB`JH|Kckg@mK6lrtI#uJ% z)S6?~cg(qFtu;Q+6A>fiT;|YNXw95u`j^EO8J^ ziGPxs&FW(AS)Z%*ILt>%QUD<3lR;!l!rb)yDRrZlI1id26Xq32Cp5=~SWECOI`gz= ze*@zeTM?2}w3z~47euXQkRxC2YMt_?Y|xYQK$aRptopdgq&hshA7kcUB+{dk0a)be^(kKetg!pvv~;uLm= zx#sj)ey7;J$_4>px3#9KBqKUKgIATSs^RtY=uZi~^H#7oJN8ECbBdaLG1?!2i_&z) zvn)%C!NO_WndT^EOw?5xvSzQ!dY;d*<0!>3e@3N0Ak#+|X9@FUzqCpO^4OmRu*7Lc zjtvoRH&5~nbM$UCpyrx|J{fC+I&2L;4?owWP*ET4m7-Ud6kU&7pC7SRoCqnSZ5;o! zB)L^_`px_diofivzb`tS5_5N>=bNqj$?r=@J#%jjBJBv`8&#EJUZ?DW1qV_(1ctv0 z0)}RZW+5nO`yBoNQ?5Ap$b+qH{63r8ZJMARRFhI@HYg_hv6>K`G+GWVuq%8L=SMM@ z0ym7P2buVa0z=sXrNb=sTC6Nl8wiKW40;eVq>hHwzwm-ojllpd?EZLpakFGrU^~Eb zrcR&@NNX}ou~~myOM4U3(KoR_Dty;0Lc&Z!c|K9G4ytkMB5VD*R3TH`)7nkqesgE$ z*&u_mCv$XASHBm6>_qw+7xIUsDHWw+&ds7UR^LG}QBWix_BLTlqk!rBy#{4Bp-osL z;ukXcVAPkUg>j4xpT+kcN*C|&yr0Ow4_Kh2?{w-rg%cf<8Y1)cC^oeq>)8D*BV?bt`B;#L5_-ekcFnXTvwEZ`dLm`jX_Y9!#FUSEV*GhaEo>M&Kn0IOshC zu#jD_Hk@8eDSbDv@s%8IpU^PSle?-;HLw`0=cS107SXKF7Q!-dbamg{yrdq-_|@hs zX)@5UOaW_&qdU=pcM?OT4N@2en+Sn)`;N%8Ia! zm?IN`s0$<2m9D|suZ6)9CD7c&^ITS%TUDs@CNSg{F{y`)_mMI%ij*ncS8VQhULNF zOV?Lrky@#mP8`KOm1+huSr&h@U0>PPZ-;6c4oIGEp%Kxw8EXL{FIX9+8B4aSFmOn* zU*FBvGvoN@s|^xtxvj0VehUajhwq-B;bbBmH#BD1WePuzhhDpg)*?1XH>K_g>443q zG%-j9w%Smr5RKCkk-nsK&HQNVGH1%NEw4PT7;v&;7`FwQa7C{+ct8l1JXF~_*{$#( z^}J<$r!pBj-p~mWZn4_}*e~e}aj}5mfRH{%eUg)QumG;@VHyN2Y1hF^s-N(F^+#IF zB#cZr4D@g5?|1c@9lPr)xE$0{f-X*)Ie?RZfD-_}(bybFWi?_i&R}k}t51kaoaIRi zzBb)lS1`OI8?w^P>V7_E7J2!sO(aB?wkqWW`c`__Uc)IOuFm!|9KPNe=rC?j-MYnY z;d+U3(|$`O8q>Dt-V-pd#(x)^DA>h6PuJBB)^{UFjM~64M>M<9XUJEvT&tnQ+*Nrh z0ddHwEK*-1Y2Ia6C!XYGHUvo-v!m{)x`t|~=s^P>cP&&@l9RptUZ zvdV+aYUyzYi^Lz&G?icrnRN^>6sTeAzLlqJT$?f>Da^M8zO-fgupKE8+ufO333#l& z?B^rd3!6$#1|n@;Hf`+0aSu&I`4+xYNT%qLie=r4E^2zhx!tzF$9 zvxGp##F_qF(NCvktzQT7Ef-9#KG@u=COS{5u?=R2F;eTKejR*GM9c5O7Eg5j;~_2A z@+0Eq+LdvxqZ_U?rm}a8whu#-fmLz-k92hg<_o-6FljUW@ZEg^CSE0t25wT$Jo-Id zcR#PV4>itB^e*i#T3WMp0Cdi80dp*O!_x!=Oooj#IZO|<9=>$yq&2iU*VG<|H12Y` zJWNa#o)40hx>%$$8@y9{=m%@U`5v)njAyo322aiB`Am7eQIvuvQS8Ak8Pae=>(Xyf zyljH5TLEPqfN+X@Bsa5^y5Fg7fYdWlZesZtR<(1rv)d^M0LZ|DcpdI(r<~&uLRQtr`Z4$#z z;ddE$4JFX(OWSehp#C?n0ZMoct;@8K&|#TA%}-An@bZh(`r)27HLW|Jhhz#h`?}6S zejin_1fBQCov8MfnC&J?&I0NR?=sUcCNRFJ%%XU+$xpl=H;pF#mOZn6+?G?H2o3a` z)7=>>v2-UNfswC6y38XLc4U?iMJg?7JsJ!rzVsD`haiA~j%o{?XDrJf13-r>i^#r3 z*@#k&H(fVkP}u`H8E=RTH%Xc|7g}Hl7W>-HLev(WJ?&jxn}6$eZGE^3N=6P%#gnkMVOKbQ43RR$nklN=@e?-itXJR4-dQ|uAD#{oIE%@iH4p~{^2b{1&PGy zcPrCqW0tEE)@E$O={WX+mvvzu=g|u;27+53sURkG&-$Y&sdS#nk(FoN48ztOZ4_RH z?JHzm7N47sFXhsy=MATy6=Pgf(k+dlggFE4FXXnzIf(B+a#t0B-VjOC#dP&lLui6$ zc(sL-1{dBTY%)|UH1<-YKqh`oO;Z0=kvMgjRbkFt`ddRuG8V5~ zmDO3_x0Kp^t!HX@rzF@cM3HJ%Q@jau_5n4{wfR!V$3h(v<+_Grz7lm+8)-FaGL=^V zKos~3p+7T4+Pf9_?OYV*yqi1z9x{>LcI~sI@P2-ow&|Fl1CV?(Fp(Y7gV}Rozt*kd zah(pq^;;OhX^nv~VWkjnkP@9bsV`TDfWh$OWfHrP1KVecJ7oRKJI6Le?OG-%^HIoa!h+#&-+%6&UxaVj4H6x3m*{qL zfN#ZF%hA%Pp5vd)ym9zJX4Om~x8}#X0XTY_t2~JK^Cqy0g;Do7IIM^6=lI0n&D-Z* z`Fz0!JYw(QRZ&D&%g_+=yj8D4eXPfz67_`>^gS7yNyuJh%i=TOdRxB;oRSY$QpIZI zcDvQARIi9|T-Au+bGL-E!Tgj!#SceVs6%_-r5Sz$FP{(Z<^)Xu$LGH=TSRMFKQ6Ue zv!0s6Vg4PWtem9YCoC0+k;4&cY{V)$H6RJ<2c=`jK-wcMrLg$!mykPf9G#b1{k)aw zyJ+h0sT7UuCVg{k=pO-M;6?A{camShd(J=9mhfC>!KQbqB~@2+)t0rjYqY^*`nyDa z-h@Vr)GB^%&w-3xfDRrG4&nO=@WobOS=O&;brU_So7)6YPFYbcsb|Re!Mcf*hs8P0 zeZ@IWqoYc~2&C1EFfRYR@Yy^?-VEqSMR_VGr0fCpYC^stcN5dCdX{|4ZV5SUp2i*Q z=~lGq^wb<0x4P52SX+1-|H3{4G$9z-amYn)*><*lQ55nJR(%|^$D4i~OSbC|qTKeJ zq2K+H%>+#zr1gS;5=jIc>3rWb+?K~#DGr3pl;I7#kTst`1W$C=>!UtexD3RsY;DXy zLL0^Oy|u4w6z9Au#YHAuW|&0Vt=(`=7^ug%>Uju8!aBx7%D~A%!DVDz$6V-Fx^Mmyl5(f(m0Qo9^EfQcEO{@5bjx zlQ?hs#L*z-puM2`5^cLMc`a1e*H;(RZ--r{Zeu$vKowTM*Urd}0c8;6-+0{lQyAyN zEEsOGUg9=V(tEiV$&CZvS0gjHMt$dL zX>D_zNfK{RA!65twsr2i8)+1d>cUa};P_K5qisZDyZd*wd%esmCFUB7fW|;fslY`I z*Wd_H9)041Rw<^2@T5vVR$PQtS8gp|y_eWL(ub^;LUc^~Jav&wtFz0;UTo z_Db9iXKo#POmSSy^bK3+(d?b-kI zd2Hf?lgS^raW%mVy-}w;^JlxZ-yl#Az0oH{MqG95JWSv-LKt6I4dTP_hB>Ajd8^eu z<*T)jek4f>q(@oM&0(yyBvw0Wzvl+W zuRDdO(1XUryX~e~70dUh!UMgdkSz2>(D}BpP}o2=2H*l+ZO#+J#|ro!C!))ByF~g6 z8x>}6Pkgah`&D6;)9xUyhX46Gk~sV5Bdd|yQ&u~tY58ET?3h|z!R^n+!vo?j$Y!>l zg;Hn(1;d)#lI{4 z%L?8vKF3o_OW}%6kO~3;dlfI)3_;6KUhVZ|1J3yYq1r1@3$wyAJjQeRA|A^nXS0D} zgnHK`RkuJd&r@@Cm^~|X*8RV3zkeiHE%+%R`2$n|8>t_v?{gI?z?fM{u{*W*;k*)0 zut&&JqV^&2MUdjcACW@>fqMBhMfeppSss-#1#0CJR2x6I<9&tK0jIB$IGkw>D(g5f zzYt|`oZFxS{MIcbQW+r#SFa-r2$^g3py`hAmsYQ6`u(R@XRcIZpl}-`iK<-AE(Rnp z%w$s;12M?l=3z?oENbw%e#IbFi1(x!0BS0|Y<^k~@Az~E`EJ&s`vz{H2o6Ehltws z+0p-qB=CX51>16|+r9iPQeGKMt#-vlw}GGzo?2)DDBOn>ih4|RO9lM^eI^NF2vH8B zT2+z5wmz*RhhWbu3JJ5Eg&F1t@l`ese2vyqPweqAmuvoDbN>==nehxiy;IJv?&&NG zuz1dGwPCZ`1A*^#1qBsha_OdU3fOZeQPU54o`SebB@W7}wOV%3tePTrpDqmzBxC-g z^Q1H!KA)nVef3=>eytOC3C9m0VCv!$3mc~iVOG5%9Lq6f{(a6?U-J=KqA14*S$sB+ zqBc?(N~N9_La!K~M=+LU(`Rd{g)x(HV53WiyW?XM__UCJu`G0u>6nR87>qm_F1u>F zNO2-VhY&~R`(~Qk6b|7;w=iFJI*6=#nkBXz%fJWg`J?i%@+}=Qy4EpO(BYK0Ia zJV7*JLS|;k-cn>Yx_)rj-257f+LW$)Gui&db!hd{Ff#0R)i221>z>;%*+(DZn&D?% z!LYTv)^N)FOf}Oz%9~L_)x^D#?LAUqGY}RsCxM5q72oFG9YN57!?R+Mgq*4(eH@KX zJ#OB?!1bUBdj?eb!&qcQ16ma}tZWsNW$(+kUns3Rba+^<1o?NjCuo7< zh3-*hfd?AM8QBdz=EedM*`YG*I1l;vS!baWZwO)F>sX=LRrv_Kl5a!OFZhR>Q+|Mv zUHrt7!`K(l<)t(-V$!=i`rS0ZlugPF$Ag1q_|qPL;AwJ|RjVoni9z=bpN_@>+xELu z4UTpTzI)&-W1s-r1yJ)V`G!|Nc<(}bc(zOBZ5G2+lhx(5Jc zUj9p1fOmReq#x6L?^nXaL`GR>plEEYD4-PivL) zyTlI=N;LKpT`fPHCR67glPQWzW^7zo(I^&N)eyH63KneVaDi=!Uw;f2hE*dH>Zb8m z(f=@Q=-V!pFKu;Q%$)k3UZ^xRSv_ooo*6|!>yo-QW&Uuuh@)!VC0({+Z0wT5();^( z9zb27^wuRDi%!%`S^V45(<&`C%s6dx@BlPOQv=3eQYQA~nHX};@2Z_2;S0HBVx0!W zQq~@niNz{X8Z2NHj(@lEe$po19WTjV%a--Z6!+jSLXQ3Yu+j_z)e$BlvN2bGMN)%o zO7F17@3QwR7pe2Xa(+O*pogFN+9!uUJ`b}>rB)VtScJXHj*3ry0yiET+)w^wgW|dq z7P&GHQ*W8d3*#69lc1%o`?S+na;q&lB@Gx4i@H ziIvmnK4P|;blEeNwb=OBH1qyIJv?6DriuU zeCN`TOl6@xN|lK?IQ|O1afqe)ymNPqN@EyvJ0|L>dX&hVWe|2=XPZ+?PFKyyyIy3n zaGF}~i#SwidtL=@-i2AAttl+A@h-+W5!tRD{5h#BxP80F-Ac&eY9k8eXZj3>@Ps)3 zd#|`3pH&5qodLz>P>PL|#OQGr`kMFPsl?yM-jg)bGAMyAXZGO^0sz`9hDHe7-GTZ6 z68G*SwVHj$sX$r65KggY3Rb0!MTB^im}frdFDKNQ-ZK#bdp035-4a)lNf3pau z5Sq(Alhe@&rp*e_(v79Ew)&g)8Wt#FKgbD+JTi!=|1>6t%WAB92xSegHHMjf+IbOY z^f@dzD`hm%?&ql9mSiP5!_^QBVt#wg19B+GbX-CQ=Ez7$ObqA*JiRyo0~;**!13g3 zDSGQ-siq>C&cZQoQ-GB@Hyv6*m)-6|{fkx#la^kEWUeoPebJ;)ogKhru8CK3h4D7C z#%Lo~6p6Cv4G zr8cXJaS0uk7A7AmEl1w-P;&Gqgvn|txN5xA0<7(p<<~b8+0J(887dj<@}|~X_1(t( zsIa$L=YPfD#NZvqCdwzyk4?DAZGo zc25@HQI;UBOf^<@AWBe?r+2yOgJXVW;rN904fBTKGqetz#0!jOjrv}2pz;m#wk4y~ z%%6rBvMPm+>I)>BuSuSS*Qtbpo|k#?_4tMhH!FHRj^u)rvEFEu~m+lt3GWx;q3_lcd#{V-bfQ|iMf?{6Y zFRFy+PqTlEWq)P6U5#D-=i)yrzrxyL_9hPhWW0$Oq)g51U94O@=_LOZ4>vWkclifY z;Y_6S6w2Sc0U`|9 z)w{t38o8i3ovlQ&-t8HdCnV36CWsiX%0~(~udr$qZD*D#DFp zgMyjUr2-cz`P+1!w3uPn&JDX)`O=M{wWDfwqI&GZPE!b@dOKjE^tm*ea}Z<;TgoMV zt6#0YJnmLCa8cVAW?R+i5Uu3}^Pfxlzbf#r;QW7C)Bj)m!+$8$|7H5ae{0bGf;0Rl z3c$Yx=okHg^Pk4S%uK}j)&5~9uoHbD8UCR%e0iAvBQ@dwSR?%(uKB;xNVBuEeL)kL z*@&1Kzs|(O$inr%r6zDOeht)r_zYh+2@xIh7p8(i#OSA_nU#g53lRs?7p*|W#mr9q z>pH(62LDD)VEN)KX#TG~*uH2M{|-%H{i0X=J2c^cp8Wq!P5947Y1V&M{j2!@q9!nL za&r8;QJRb83sUjl-b@$X|3DKSugcoHiaHW6T^?O1d_^dx=D+^}hX$AB#?=vRMp}^k zK@5)K21nE?E&+~t^i0D(F zJ}2Ie-a0vsHA>3m?MmdcbbM7(u#ne4xbwqR8k{lGKVzWZFv{4HicrhRH<_tL(Ier2vqg z6_#d~fojgpe%c0dfB?(E)zCFq4gTwkQTF4)qPNbc` zX9Rh>jCSjj!V&MNM3qVAlj$^dHE0Bq_``okzDr;(SL+(5;?zNS(hnYrHNl=s`0@F2 zK(-Jt8!%}7X_UnmY$5gsj2bveeIy7pWj_auhCNoT4N8)rrctHemrJt`hL^vnk0%O?;uCkCM*6WLyu)S4Zn(tk`qE8?1MJM-mKzignec4hTWZwTkI~r^{2r z`l1oQ%JY$5Hdx0MHUZ6}1`D@KXT**(cNM*|kA8+p&Co&OV`AFwS1SKjm8Fc&i$u{b z@~<;to?yeMRTp4l1<~_<;2|ba!MpCcTbKAt%JHTf@%dTRu`=u2`!{R; zh5FfmzS1UNc{V-A27^2q5}Q;GbGb6I*GsO*hQ~9Mt*t)s7)|Vs+cR8xY-8+vI$=(Q zq_F=1s}~u4j%-n~sWE{3%gC$Dwcd1=pr*<50Pt7mN-HKZ zqoV~{$b?ljb|M01o#;QCUs<&zGy7`1 zs1u1Z;EM;nM$*{%Z5OR@O63gxg9S}Km!v>8c80kkV!l0Kp0SMQx_e02Q zlRk#|v(kc>tonT=lc3^@I!lM<;yN*HhY)(4raI`UPY?g2+{Rf?rXLo0_;WII*_P)( zrqFX_-q;(843sQYis%Bd8Ifes zo9>lv-wP-AtA?RSM=N1ne(j#3GEQL5Z&Y7WV-6w0BK+*lg{>-CU$ktgHkZG)P3q(( z8tCK7HI+NiZeY|r6DFQqYu+T?CDkR?m2z2dF~4x;ZklHr)f)3yL3sYRtXoQp@7HgS|>K+Z>l;9DuThn3b_~hetVlm|!4_|g+c0-`xpaTf& zhkjX6MB!SnWc-}4bZ?Vq=M}hRK1Q1%XPVS0U@&)Tm_xt^g65bMQ?mJdkU4?p~%RWo2Oiu#ijd)=ukcSY~!ey|S5HP?J*>RAkKJ)xudfbyy?E-VS+$=JN6fZeN zQni6Sr!eGt1o6rBG*&bWq|E*%+K4>e0esLsihWM2DGAajJ>S#;6!--Ob3UI6 z+~KaB$$lf|=STB$fQjndrxU-*h|gECP>@j0M>vN?2v0a0ifZp~1-O0lX@#*x=bBB8 zb3Y?`APsy3Es90v4QAiK-jS^WFB|<}Y=c^7cWl7u^c;4CTuzK)7d)N)0_u3fLpl^ukIMvgMNjJQ^TG)RR;BvC5*EvabZ` zeJzMKQjb#dz~4W)I^}Okmo(b3Z2q|KQ+k>lh{lJ%n;7VMO-hH2Vg7E-Do=wvhtHo+ z7@nZ8#j%0vwCU@1CBkT!0xzSoNv4kU7wP>tA3nKNdg5&{WNKg@<*9X-u#<4d?9m0H z{XfsLR9mxIs5z8fOb=!>5W@eqypmFqOWW4`KbvB6IeGlpp7!b=go|Yc*ZH(Cq+K}M z6K1f*b68p|%uSyRs}7=~FVbF6>$apqU^m*KaK)%@ZUmG}W)A*l5bj&35=c4a|3nq= z59i?S>dNm(vMOjSEYwFo*JJ2c6LVK6i)Pl{Q=6SJn9jjGP5ynZZq5oHcX)a4%v5$f z{;sbt+`_zXnLBdV^@lLF_`~BiwwRp4os2>;2D4_x%dzO`t6K+A#(=69P$<*FLcAD%o0!Ilw4rHL{`=lUa|X%>xs=yWY~x(^KOh zlUSeg>6N>{$u z64nJ*Dvky550QD__>H2+(Gn8G`5SK8FUmhZ!o1*1+7TbfVh*8UUcpK|1ID z>q8}{#;ac{2N8H|$j>JgLIJBFP7#I0`K&8r5ry{W$vdH8r5y`-4w{i_qsR!@pLHp>v?P32!aMb%oB| zJ@fTpI_4=TcJCM@shq;a*A>D8Hhxf*iD6?8g_IP2!FX^GdYGKNSpTP#cIbeme0>a4 z6q_0jXmMMpc%s#BzU_EI0oJ-n{Y%PN2ARyf9Au^;{fp9=oP<`z9!BG4-#ineci^Cm zmTs^Rp=Z2mUJavxsUFeN`S}!V$wG}cAErg0?jtmoQmp#R;&6|2H8Vl$yB@h=K~ zRPg6TQr)S%zv+*hqkA1%pLC`|zn$3Twcb2;L2rvQtEuuhUv1ow;Z<8mr5%@!rE;c@ z52aIV5lC!o>tVt@`p@cJRW@sM(m2#?}w;7;mfjhr{d6%I) zN}9q3javv|?t9=jBoRlh=CR>Nv1}yKb+CO*^k!)DJzLezZnk%!!{marxWUH;bh8)Fa+5{2dJTrS#kU+8kT_o1Za<0|0~$GH&Sz z_cl0j^WW}bT9njfVM1hCW{OhQDMD@3iSvl*X`4WfmDG$WZY>rXEfywcN#7L*WD)6A)CPe(bokM)JrEQM`ZZgA3L_ln(=&fBaZk5CVz0bCx3@HIf+f#WX?>$w z>c`%{8?o52Tk7c`)#=InsE!Q3GPZ3W9qqA^@1JY(7=pQ=#abKcH3+Nd#|y#KdZLa2 zN()(Dl$S3cHfd-x`EH1P&}F8ms=la9*0Fc?I+3m6K}He}U)7Fb^r$tH!LZbknY|@! zOUwVs$uz|TK^N{q*nQ8kW5*1l;X80}iax>AvDz?BevkLVZ5jK3gs+2T)F#Edi4TwI zPVQdrjvuHTAPE!SM7BFUKEY&R=ih-I1mDBKk7kN?tbn5-(GWAh@YecsHfnh9HS(H@ zYwW<`(9CPSjon512zKXPmm}t9@t0cNwTRmor650|qzS9Bdt^jYS3aw1(Jf1^p3D_d z_}r|~M3fCI>gVg7Eqevu`YvN401X#4ahGv~#JFKSzX}_}xpK%j#<4e*4l)nIX-$uJ zqiJGDk66ET2{QWGM5MFdfy(6>->29lC5T73(jz1KA&f-9WA^tz)cN1Z`Vp7;BsY5vE;zSQGBv2LZEh{j@fh!D zzuXy@q7TR5@NP=R;P}e$`dAz@uTI_YbnWUN^4ZnbC_@5PUQ6=zd%itle0`yah~Pdy zQ+_6G+;nm^(m4dTDQx|wtURo8B+Y*tj7EwiQ|v;^cC~6kb55EER!@_Ot$RD|A!_%3Dl~Ob%<)&)>VAB4Gzda0CE8Mw$hVT>qZ#ttc0T z9M-k0^gSnX3NmuTsbS9ii{?_viXl8BW}JKOaF%h}yQu1Tbcg8tJFnrGDHKNqIuz>} z=~5-rAJLao1*7@8boE}6uf$x(-U*+zg*`e6Yllj#)HEveccbH<%CUIH3lti^dg>NY zmRh z;gQ@}8w^^^#G6Ok6Ou@UBBGkWS7aug041gr4Ny|&(Me-%E3aHkOU4)-SJjltvPc%r zHXb@!5G@t85oZEWidSK`DfL-eX8lQM<7wqLEzx4*KewF$u4Ai3s77*+11t&G>C{l@ zd9ppoBgXN`)NH1wU8Vc#2gS9Zp@M8o539%2ERtM{!*M`C7Jt?Anz+dQWKGwPO{31C zE@12CRxGMrvQ)+(MJ|Aet=Uo`SGGPHlMXIfT|mmz2r838pk_5w)3$M{_wVouPMA0_ z6icFzqjK>AZ7Qlx)`XGQT1q}hN%T50HEUii7>KY7uXkl$9&JeTqU6ggaZGRB8830M zNe(CQ9H#QqRLzRYR`p~o-UU4iQ>nG*B>$!nkOyGKWtlG(1uTMJypZ6Fm`3mqT*e3G zAk+3b-xg$3HDytS!o6AiU=GQ0$w=?F?(i5oR)K^=A~&Y(%gm33(Dt!ZKZ-zl@i za~MpUOwyY}SHoeCBk+ByE^P37W_BIwQE$g?a9k z$r<#10$sp-Aj=SUSl+=KHxJHbGjqK}r^HjGP+2D^eOQWyEF$C-->sqbu71opoZ*eC zQWALzB`Z7)3z+}vHXR;bHS7!G6Cf>GFIgoEjWer{IV0yfX)MAr zxQ&SQ9c`@b6L`zr$g@cwnc20Q(ZKhzuXo3!xpS~tO|XfX@!+rmslFW`MgsF}`Sw~r zD|wBno?zMutOr1gUm?AuoSX#x+ z#ySFw?sT+bogVe2NfoGV9U+#F6fYJ$j;*>dE|=cv+>ukNHL+y%UAvQhP*MgKmN;5T z?|0Y&FkLrN!)7#g(@#$lbNa@8DOV(&Dsvex`ErHIPB=#I07%5^C^>;P4hOD{)CW0{ zc|7wJdyjc7j1c|1P`wZs0F)HBgIJ~J(NUxj4>&-wvBy4jw_mY_p|~)dibJ!SDy>zC zN<`wRAZf%TcxDC9B28uQDz6Gq>#)kp0boNmU*FpSuRSx?7mW3Bwr$aw@OI@Hrf#)PzbvPO1rG05~g6(IE{W0 zO)=fVb&OlDHk?I?CZeA>WRX4Pns~EHZ)<6t%um8!^L-B2)eVaLo zclWUl9hw6t6FC#XTUJF`bRg?PkaZk=)>=@(e#HwkESgO&rSGtSHtJ=MiU_1a(0=5X)cnoeo3) zSjeopMxrr~hZ_gQm?M#i5lGI6VK-Jxb(c9F7@%NkL(*hCDO7pkQ`cJ;5YH{H2u~nt z0yt{djuK%qjjFgKGU7!!DAzKEbk)DfMaV~PtHu}#P7V=3pCmDerQSuw(nX_2(N;{S z7-IuzgX9mE3+>`G6N^>MR;hUAYwCB96@Ggjs8&D8{o*H@Nu@@sF!kq5l~p}K=R~nq zGRVE<$8z7t6suDmz(MlW61y;&um&r2X)t+=gn#pw@yTBIs%sGOcCzbYuPB()W8$#N zXSYbBp!hvpuOh>7V(Er zz)2Ki@n$gVdD9!_2jAXf@8{|Z$j(qno1ph$hLuRr2*{(kx)l@Yp^3oUWBYwGJZv(p zZAvVkevXg8jwtXM7n7%CuP8EhjTak7XVA{H43vae#Jc}_)9~WaTT{hYTRs+cv z)EwaU3nB2@!8ms`Nhne%Lr_8xl1j{}Y24mh$$;v+S>g_ioib<^Xc^J>4_U#A@2tqI zsEr_v-%V!^M8}P1mvZ%T7l^=Kih`GQoaUZ_mtD1I*&T#pFsk4sEL3ggnqk3qfA$~z z)a0h8O(w*^<^7S#Tg!>}I0Y9L6P0PMx@8_Sxu%E4Fk}*UbMlNrv>%%o&6Fw8Dic8p zF-Yd3CUYYb)9m6fU96W7lR8KidM9G<+A^q3THqWpse4#*-90`fa6~b{^=_)8>M~uN zfAdah2XX-_^-g)&^0MK=Ch&y?rUkbHy#U4kmIaFajQl6ek#H|;ba*@8R*~3}+!ECi z^8{^lbQ^U2C8IQ&70rkE_Z`PCw@=8>2guoB1E?o%f4$8q1KTOw_y#=_pS7$go`OWF zpKi=C&zVU6c@GtzwUi9zI2cVTXCe>)ng^>XEVw%vTl}RHgc}pP`Wau1IigP#Dx#R| z&fsJN5^UD*s$kln%mLmIe`prr+Ob_QB|-Ye1Ki>!p8~TXx`cxS{bql}g%jF}u@L*^ zF6jX2BSxe$OMX&MPdzz1CQMJ|94c7v@_z=c?-hK@`Hnp&cUg+m-8i-}h^MH+W8vEeM+4@7L4WQ1Sup zud+WuJ5gzRL4@C@dy1c2kL5CF4oGl&(6rnCtpQv(PeL-f`<3)K{`#H=fXuFn_tgCT z=FalS9$SAzRrzAStUHrlV?4D|d!$tPV!RAAnWA6L98dqK^rXN=P-ETKbB#TL_9wB~ znn))!pOULwn@DHTbmq26*2)$bT+kjdS|X-g2y7;)JMqxo@PxSLXU~R=F77*8*g{^gskEznMIe6{FNW6(-^ZBu$C)4D;gJb)ki14 zP;|rUAF*lnv^FA*d#z2MBqyt;^2M3{d*CjbkuO5)w1F9K;D;=QEQb6}-YwK>pJ@ae zhO6BZcy8X(;^p2Rxwm>nsRlJ+LOMFZjD%1^PR9?>C6DJ1)_o@q=BlceMr&yDV%g-; z1W-180kF?o-+Vi{!MyvM7Cy@H=Ihj-CL}#AGv3Hn;4dxeMaTMq&jl5 zpkG-;EY0px=p>L~5<$@7t)o$#uWZ!T9WjfYj$shzJ#Ba+>dS7$>62nI$y$uPIgD1Y zfMw&93M{5fTry=(lZ8y29(4S}$X-Zr^9KF3sdphK9>jb~vgF3?8Jj#49;pXX7LTG4 zfK`^6qCjVUIDW}ZokK>Gqwr;K!M?h>&o&OFph?m|qZ#l$Brf0<8@o%Q8J5CSYhrX$ z`BnyF5Sc@du0~uOQMe?36Jf@~gwgdXUIP7A)y;&IJNS$q5*`v0c!FFY;}34#IG8?v z$>GayV2sFLq}f*GW36^R3q>ePg+R%LQ&YY(k+l6=gK5Jt>dr;$)a@}G8dPng2=uY0 zo{B_|ni3v-T%=Mtku=R0lq(ehbTsW6fZ_BbLwUdncfbjo60yw%Sr8#CmYKCJ>Nm8U z{7A5_jEa|*l??Yc=I@*lRb#AVqZSjusQ_8XZ_GDSjT(t-xZAX*0MII&6j+k7Z@(Ec z;g>{pX|+)2yteYgP2D5@%+fgpEhnH|Mw63%TM{KWO$g@&O>4OKv~TXl`paa8i(Q(b z6uP3xmR;|q7+r5KCX&AzKSAdT68{Unw#8gsF9^Dh0^Z|HCW%|2><_at%~KZ;o5Z`Y zq!Hq;R!ymO+HMVl9sVhy)=?Q9d}DMP>yH`<9S)ZkHq-goMm8x`cF{&Q@vnoLZ$%%m z=G3z-X%rgSh6TiJB3V^(RF{nN_rB>jSsLNCq#8A|t&U)hY^0!Bvhy;3nJJGEZ1va^ zA!<@8J&3Wtqa0sxkLQ93tm_FQ(6bo4@Utr%h(=)c;O_ zAZpx=1Sqr@if5ND6ccrU`JBaQdT*|~;BU&w>(Y*_yl zo#bK6y6c}ck^U3VTvox(gb=;*`8{Ig1*|uoM3TW>r zhwoJ~u8DDO*_)R^=>|0gl>Qy9&*)|?+lypr0+XO6y+#j6n_O@ChC%cxhcGBm{YwdF zof4)q%eL2Yr)70b9L!`CB&rC@5bqi{^CA|4ToI2E`I&7xkRm{#_{X)pG-NxgEHTBi zs#BSPkw2YcF`6Nc+nm8}a24GBx1K^5X)tp|!d%Q}hzBynTEZf*w?s@%K@q|SHGvVU zPrqJTc&Pbr*J}r02>oq4Ggge(ETs-aj4AcML@bd$S2$D$j99UJ2o6ER7LXpcpN|9$ z`QagA7Js6_gZUF2g1}mG*2anNl>W-O{UyeVqA6PtK-Q~peKG9W%S`<(W|(Skfi?8K zw@wutPhzO|1}9nN`}3V+#2#yRC012-J}hgdq)D$reqHYvtNaJnb})3N^!_h&)#~iQ z7DUv5BpiK7%z&Ew@G}XtT&dpE-b5GVX)^!dhGCUoOR6B9ngeO9avyQlr6`&*n4lIQ z0=e8U-z@fRAE2JQ_epl}(tp*+9a*mmF74o+8o&RwAy^8?sUhx$0*!UB`+8W12Sl>z z3OC%iPAZo}=?gpmlEc}9C3w)w^tA`C&h_k-`E|83_~f%gtqt7?cig_+S7!A~W7c>l zsS(@*T|Sj?gv;sI)FOCiXfjAm(P25~emAH`R%pek@&o0xW(|0CpL>#ot`Kp_)qps z9s${&f~L_fd=D&&A%}1Fg}GkPC2cDpe+AEf`7d6}w|{>pU;ow_X%G4N{TX9Zt_N~U zq~+UH(e}5i0-YPz>5qGz2Y8=-C)}Sb9|+F@p@{PrJB0n;pE*t#?!9*gaQKD&zx9NC zLaUz08^T_@W|nS)+ZJ>LT)4En;&eN;N_c8S<*{OUmN*4@ zQ1fZHBf7rAxy%piy(;ec_E!iIjIcl=z}qtN6^2h9=K8yJ-{}hln@@yxpMablXUSi< zCa|Y@^&S3o$p69GTL8zgG+4S~W@ct)28+pJi`Avg`)kDdw}C@juzZXaW9q)W+e7@$(BZ+rV zpJ%I&Z0~28uE$$F?`OuB+mAh;XTM7Mk6%8|i~?^VFM#USrDDOi>@N8aL2e@Ij(;lQ zxBybDe`%rqOCj9EUabwBO+-xql1mdJ0Rb2%XGaqQ8yI(Bow!ke!VyjM;T?v4R?L1^ z4TmW>PU$ia@%SDT?}!J=Qe$YM*KeatG3^UD!R7Rrx;8g|<75SUxTN4~0gqM2yuoP43pU+r`YV*tS;7{V@1Ob8|T~Yl3YfAwe48BkUffK#9T>Q&ak!V z#$KGI#(55w{nB%1ht_zr)7oct!8yNghbA^}v=R>7g;2$2n?*Lz6M#t2)8W^~F-KHW zB?6&07WE=RucsoxK@u{`^}j}eT4xDA1OlU{C7KAq@NNpb%Rq$E#Lt7hBR?)v*URe+ zvYNc(OX-3R!v68nKCY+JelWc=<3MZh=l9H6mwh}exVtYfw0`cNf6fm!mcNGc?{WAq zC&+)Rl>E=5{{OFBlKp=S%VPg$Sk_+$eO}RLSQaZ03qbY<&>U(Ju`#g$-Y^sCe8y#c zW>Ikh#EhRCJ_~=Z|FHugCl0W1G69a~2JFDe$_c{`2#sQAVFKtEnTa?#0NVj`RfmX; z^YeH>6*oI45hoz+iIW`=XvNG1*aYaA77+*FFFOYy8;gtMvx*b2z;FNr#~fUr#{s0A z9Dq}@aeanm0m8ZfQb*R$a4bMs2hhmp!U725;{5ExXMr1V9UOp9GzXwTz=1G2L|p8E zO|0BpL~MY-GgdC{zc#Z2;=(w&0c`>9#Ah2i|1J#u>xTVvy#Jdxt^Yj4|4@g*XwkC+ zvcmwmT7aN2Zf$#Qv)K z`>Ov<68i5!T7ZnS|C1msZx4Xa0YDSlcGu}v%)6%1IxD4)Gb5E|jUtIEsSbiAJjaG4 zOY~(446HxW1VRDI_GdFu{$XIcTcz z3LUy-j(t6EH_4>^jp@e~FL_DqJK27t2DuoiTkk)lCT&coQEj+YJ4|22NJewmeUtGc zvrJXNzn5xq%u1vAwimqXWmj)rl$3yc#G|pzY8jjsZr}ikJBviAwe7&o^(~%WEAkdM zwlfa0xgr>kZ?eb9;GuRN)4RUs$L%&uP=#)*w{G#Z3~liNaKB({`OSCqZOo)5J_vzZ*P2`y8LbQMfCI2}Cyrmc?#dwiq zWUff$gQ=GT{#}_7mZF1bi}EKf^03UY+pH->pt&NGd9t388B_Q>hY%Es%$0lS?pibW zFf5w=6-H}7I~ZqP({>i5z)xebQk2r1S#vzuB2&vkRtsYKJalJ+DTMPYC2=Kc6=Giy z*+PtdHxgg!%)uRH!q>KqHo-hh^0$pPYn;f9AI^~R%a->s`U6!$j|zM;?e~yf@g%-8 zR2GHKA!EBV9;Nqfa_eM;&EQoh8BwqOS zM_6Q8Z8$qjJV&iLFW5f%;*6x!32HSfV0X8i&HS8#!hARUd@-$#Xo!Wq`C{tRaqK%H ztSBnkn}au7Sx^^&{a7oH-j4iAF+3P|`FD1s4_$u|EHbs~$jzXUi#EZo5WQeidK|f~ zRUNt(f+q(SNoE)A?BeXU1no;ojT}hrvC1bdXFqJL6&`&f^%2qPUo?-qMXyv%BjYhA zd${2fCZ)fag#EzKp|y$C?YkqMAt8)L%^&LeaXg@n6Wq)`lS)RNX`GxCqnnn+6H3OD zHc+U}k|RnuKK_VJ)Hvu|1bdngiSX~sv z#ter0BKhD)&Ivq(w@rp*4thvC&8Y8t_2Ok7)ZX4>lOkh$kIeV6Oy;G@n|^mll~l=CUA5peR6yw!G?*N96`BD% zW{1Qb$2u|`Z+*LdcGn49Nnr??ozTLWv(yO8xT(Ltck-aWcB}*w8g9w?;lv0<;A~|u zJM~cEo>e;EJG%9XUy;b6C&Qeb6aX_}lhp*vY!UW63(;_?Qj&OMH}HiKVtVk%_0qdc z2z)W8tYnutOu9p1v{*(Wz~QLw5gS5gocF@i!%5c{-2RGOBOsh{*mq0paZ(Rfy%D6^ znOlFjMI(Uxz?N&W%QJE%zRsRmzlWsz)z(el_aQ0q{ZvH*Gjb9^=O-=C1f7ql;&RmT zrp}Spx5VE$&ab}V`4qlio}Igfb#CmBV{V_`0=}oUI$#{p7PLw~Q&zJDW?PZ@dUp-$ zDnEFsMpNSAN_Z_dH;X-0+GjztRf z+r6HP@XQ#04M(!*Vc&YN=5E+VS#oT2_M`C|HagWdw8qu~5hk^!)~eNuV8ibxHNxFS zy_byDvP~fMvP~f2T%!_o-6#>YT{VeteisgVH7rJIaVPP{SQJ~Z!)RcUn7lJt99tVB(Q?oU zKA9PJG#)i2ueGRSKqHG$2wg z60#JAuD5H@=uaQfX5B}+fQ+mqw4{mExVNVj_|zC!9zSkEyM2&i;~KK8&z6dwxlSit zo0_7pDyr8hTaGG^xq)1$b%>7wLbtd*`$SLBwz!?Jnq=-DS%R<2Ti@8+SlyVzp`NaW zTXHw=X_?v3s3}sR6wY1I$h|NUH$h=(Ss~v#l~9y=H>_T89-j^d8RFE?BiMXyFi61!@wHaph1`+HTiHp8oO zLRLY!)?1tfsWSR?sbU+rj13R1!Oq-4#L->E%u!Ti5RAU(cy~H@_bON{b9iS9de{g) z{BkOm4+G#!1%ciTk?1rcQ>JQ#7>JUm`(7+WK@6n<9#X7Q79gcpi@?XNGV-O?2Vx?7 zKk2!spc7o}=CnXCBBc0IAr#W7IZHk+;-i_A)u&kAppmuU+fuxEj-m)^>LzDA_k2i8 zH%xsTd|h$m=@(vZe+0*(PD;v_00#KA-5(nwopaD5GgC6lmoGzzV?`NrT}*-dAfO45 zW4Ye?4B*NeJ#lcrH@|?e3VP?7&}ORr!!{9>nX6-hfx^wrk8#I{`us)Ax$LRLl=Nnq zaDegT$h)D$l=TcusllTPSoEP2LGy8vW=iG+nZs3qMt`AT<7{EtL`2gd((b==j16x^WA9F?KdTy$x0hQ-N=;J+do34uM^UH!o6-#wPvvIpb z;F!Zy$ENwCTF}^|$jaOqu5;mY{YVRtWdr3xcSpPNhPCHu0Ff_d^&fYpu!qP@e1>B+ z!?mX%_pe~1y`#1cUG8SJK)9si!Cfjc_&y=!1F}+#%B9uE&Bl1g+@OqkX`P117lKg` zr2t6}X6Oq%F>g;mAKVq5R3Om1S_jwcKLOsm4(vJ`HYdo0TLH#UbmK2$j&4s~A?5RP z`P_T61&5)y;j)hds1nTApZnZ!lLlUGmi)3R*X7rPL3BA}WnpADtp7z%)+6^N2|Q!b z_@$n(mjB7&%v@W276YhlPDOWQJ^dZRTZE^-VDV@``XS7wX)DW}+ft}nuOGDz_=kxz zyFINA=&CrcvYj%b4(zI2n}71G%de(Gm{tOJ@-?XTFjv4YYwwY+Q?lJw=7{!`YjEvJ zwo)BZZRU)ZJgw;N{A&>H0lul8fwl!J0c}SJo3hT7_K0hVo|(QvT_EdU-9YVfH-H{M z^zyZinz~mGbvGH01UAp=8SiM;aBQe zAl79d10JSHeE(nRNo@*w z!aPFp!+R%WNxdcd%KHJo3-t{iaz7#hXBQ71d2A9MRdowmxTok!z9I4pF#=~7BnS8v zsrk!Km;E|8wD5#~gzG?fh3x?LPFnxUFEcr<)%`Jj>EVg{-ZitK?3asqsIwVH7x=7ibwL;!ZT0+qEjjx3gcmqU0%ubo{^1>PJF)H|C z=4vkci2oVnQQ(dBj?5=#E94ga^&_V$fN+`<@I4y-rO_tpEp#T3uk;3};Or&UT_J*U zRq!Ac_{Tv6a5U(Ls2gL4JQ6eEmI)h!H8djM|xvmd_7~` z7pdUxamz{}CDF?PrNPwu{)FjN%{*TzbUf#yLh9p1mDmRDQt@F=nGey$ss{57Sq@za zl+ns#Au{sfUBU|bltM)F<%&tAlAObUL&qp~#}ne@7{Y_l_>e1=_eg7c{AI}#?51J~ zriYd;&@%Hx&^4bZvQ&~xGABxuhYZD8jCuErEfk(ovFLWbB=!81$Xqs`%l95LE51Iw z4b!DO@eqpBs9KCKAM#A7B27mhT_a4Wk~E&e>oPI?x^z8rB1?hoU7IGGLVnjQmsrJl z2_vyjqJ+oQ2ra{)wVvIEU3@ZzWP3^`IIV7aPKn zJN5x`@5F?~B5H$$8H1#3+Ps1K5VCk2CcVe_`#95PglXV%39Ho}@0cm;(cK|s`miKH z6FLiX3=#oWtNj)7gK z^r3@>oB4MlvpHlA-OWdO)WF>B`V@S*p|s@_$KKu=b%QN9uJCc|IxOpUBAujhQ_}ol z{kj|qn8(i!8g(zT1BMR^({;35H5rn`;?8TeI?dWuT^4j=znaTh9Fh>_*}APyh@x)T zRzx--J+M7c90qDGUgWcf4yYd19P$_=O?&Qj8N0Q-`qA)QZL`Pq=^2_&z{Rstrs2aD z4}Z?k#vZ;i{)$$9j98g5hg5%nCbFXqV^_}j6V>{~D za%z;DCih)9D^NY6?zOQ=bPMhA&hGJkf4Al|Y0<7GfXtY+apR>wy1rR$_f8);yAAxE z$JD3;5h=<9BwWbtJKFyk3Syfq2w8gybFl9|d@%f-o@aAaw|LR!?wZ(uX6V{;*tE&C zMG+OA5C>=!5~X*?U*U70jHsfi1Zim*p<*B4;KAR}E_-J96Gub|cJbMizT~97rtLI+9T&3Beeup^`W;{=YQPn8{Tgt)uGt!Ox>}xLZHB-& z#KK2OnVey3Cg-Z?%8{5%a*-3;3m)tEdFxY{6cxMm)ZtI0G&bT@|u%k_|X}3!@4ufqlOgAO!kUp3#>< z$`?xbCNojb(>B^K|2TUgiD0Dth{vD71hd%J*7I(AIa4+5Q#m?tTuGaaG=c% z)raQ+@NcYVq59meCf;gBjL(RYHYR=3m51Yw# zL1^U8$>6}r@2Fq+KAN&FDkcLZ>K+;v^~SqDhb|37LeMbLgJFex07WMbni3@8q=LXy`X#m=teA&vDvdhgXhL9d|E z(r=^fV1Ix}2y=xkpBZ z(*!9Nu`hx9mXxKqj^IVW>HZN~%JG8q=0)oI(s;1UAZm^xWIIzb7GI!(EsP@dWt7Z` zJk<;*?Y57`z0s}A?>i*CPIw<+?VhfTQs(2&+Bc_KLOr#xaOwxijS*+lWg0VIF=L5B zjLx zYw;IW`?of4do*G#9%O)*wvlG0l!>=eG6hL9752r~nfuL7>mEJ9=lY0Q9)A$@-9c*KncB;|d?7JW z7m&03x%wU(M}5y zNx$>M8_Wgw;$SS^5QHN*r&C16x7AOC+Fig=a8BsJWo=d6T>CyD-Yv!N+X)}y-y%9* zPxoMtRaHg}v{Q%2D)-Va)%kQT%#Ah_3F!vHhf`jLn+4s@Vh{0`RpjzUxM{tieWyx{ToGhtKGrU{ILk4(zgSZv??Uf{Y0L5)_biHSAvIny*@cs9@CYBus*u zAmxt*{T379_EnP1J%0v2W)5A4A~`6KzgO;KlQ^)yfad^J}88U+sZ03)#Zs&`wcXO_rof_6&$GI|` zU^n8p$oj4CMk#!$hKZm8DU5)YDF-@!H9MW^01+CpdgHKQBp8N~o*N6&BVMVC@P!sE z?%q=1tI#mE4Ho2$f|y7$1Qww?Dh=49Br>WPe7LD878+Epw5)#fdU`Ch7;!EVp~wni zzXbz99Ijb?VRj%JXLa`WG}Lot;2_>{^i@WW5y$-?obd%zewFvDY&iw$hg?zaB;;<( zAhIijRWl2u%VYX#BHvsXhp$@ZT%eJrTifrZP~ZT{0C}jNt7Z}U(j~H-hBReYy;FhRDZJ;o5#N%XSyE7IaR*x3HT_{`5q*T+5HTW`eWP11yJ?+>@ zAcH8EreUVY(!4Z4B!^Oq`@PYr8He?Fzmj?3n`Kk${eCZ zDk`H$(Pr<&E#%|)uXjH-64fJ$pTLcyT0^B4eF$a`&a13F_ zfw36EZ^_l&hvYqG%RGupK29>oJBzf&Uu~HSRfEhs76E=Y9))AB$bO{Sc9GqeeKL3j z!hD%EzJ?D9+^8V(_FoJf6;nhLcJ5-j^o);8*_xfVa3-U)oYa)@xGf+QlRuB9xK*AC zNcDmcJw*x=O$uQ8X~TyP#$U@|kGy>kUGA%wVv||JIMFzfF&~Uw`EGDp3f|P%c!rt6 z)R`|(Q-yS8g9vE=XORnnxEH`D6(gvCDiZnv-jO75X`f-9k3nkz{O6_}G@`!RnIwog zE#wAKGet+HsY<Cf??|TrF507;|Mz95C?2<%=jzd1);vl?3ojx+i z%NKS>l3k*{dxrd%@v&Zzml#+!l1HGG=1C;P0%dE_Fn1E!E9_>IQUN2?l{Zsi4tPaH zez(KY$iryU2=X~*-qgW6#<4QvsSoFz!HIbnmH>w(qYuc%z;Ggpm$0RU{YGW*rU|Lm zbWKypIJ%z66WsvP50-#JXGnnrB(@}6bky~WgVmUG@vQg zNbVTQD=X39WD&C|E-pisq0dLC<{MhSxfkQS*ogGr_w6vn#2Uw?EEp%b3*8w$qpiHt zsNYgfe<gIxe24yP zu{2rI?*8r<@ICqtWtlDo%FeZrHGRkq!U8JhZE!jYi7r31DSi~k!h9}#m@ZLM@fnfxOqM>hBCHs{K2ASF&AYe%23ZYnmcT7*OkYfZkTNIJ|fa)FGRZjLe) zy5E(rja;E)Bw<2J#Qfu;i>@cIwt+pK23PW#0!0zE$%mjRAFcSRDYKoF) zO7Dx+&Yf@k@R11Yb>jefArd3UB|#t<>4ZyK1jTLCFxqvH=q(}!2mV(!CXA6r?o>r* z9)5zCNa$#WS%&qvR`uJ{`=5PM?42d9B4#99Ykcctx)QSWMdkG)vFNmeo<&@El|R90 z#ZA&u_i9G7=!W9ZXw;qVa$y^k0$nmSbln~8sQ{~gP#64zHc zORXw~9pjI65sM`mIq-T2N(p5gl|l&@0HqRvUN%Lps>o+Q$$#ADqc*~lJ1 zKU&UxeIAdAr?O!@u+iA{W^pkSk6B$cX!ErEWAiF;vj+Ctqq&@S!oc==5tZ*s@o%oJ z#E3O4wlIk4!>Nsw?lRJN&OTlHOlG^rVNd1Wf&vMVh`Orm+_$mYm8Zw4g2L?BT#!uI zxv-;L$*u3SZtE@QFn5J}yfi=TUgVmKRl0nHec123k?STj+cwcdu)e9>@$c>Q*_FJS z8$-G;lw4Vhu9Dh?r(c3-dyyK|q}WNT&$J(3Oi?{gY3vMc8iy%P{h)ahMn6u%;k8v? z+g2kSOLf|sNa_UNmY50YQqfb`P{@{FAE2pGyI3EakNSzqmo2GGuP+pJ@9T=V0b2JumQLLyg8DDtZaf+GmcjkK3d!35KZs|4sC%%V%{j~(-I730+iS} zUr-b}jdY7EvaCsL`>{nK z`D|(6tAL}Yi@j)00fROd2hOF$2~7BjxM^MXB7FYiF2Ayws}WZYOgXp4RSZ54b4fX0TCb^!L|g zNBh0Bz;v9sL8lQ)v0(OugWZ0LNGyR|IwBrIWxeN4_G>f z2e)AqmKZxW&|9D>nL~`9zN_WIc4L*6w)1UR0*zxZUs5f=4W zx&Ad%TFS6tLui~vFGRQsOS*y9;OJMjaXQ-XB~8oy_|WO&<;tSadhJ78FBU8-XsPHq zWkgR1ztk%ez`6e*e9u4Ile2>t>)3N)9->kcGKVZ84dGO^1pNF1X4Vx!Dl%CgB23~- zM;109(ir$$I&yy!R5y5?77?#GXE=Dg!1ishu-oxPSpV!`T##SqKoN2 zfp(7D+{R0({@7I;srq^K4CV$H;j`5OKlArN3{*o5r;A(#az><$5NwX&L!%;EJ2NxU zAJo%xE9REt{RCrv%uNg9`lfYJ`%p4JsSrttI$wYnMmkm56-P{rZOSt^I-}rDsO1}~a-?7f zv%0j4_P~2Hxq+x0hS*cYYs1X%KMmDyJDlBW zN%_)$%MOLRg9xOm4!{F~VMP0f+jky#6D8!vA?w zShb|e2tuVYm;XJr=S|3k0p|!|EW_t;y=V?jae9$#S~7TlWSh}f5dj&#mS}76GZucH zIb@bv+IKxmJ9(g!`H;#53SmeQ91wS3^@3RYN^Xe%863?wd2&-@Q322`S1uKgJdV1VDNaRGDzJs_o90lJOqM2B z6D)Kao*KGTJa1QJdmcBoA$$<0pXuLm$=SDgRzAmgR`IAk>l_cLb-rxRyLFBpavUjM z_5!7&v)JV6b?c&o7n{F|38N*t2w71JnAP#fTKgzap@Zf6jor+{e$zG`x><+jS?#~W zE1!;`$fOM7yR*34J%|6QpyK+~MR@sJN2M=4Urv-4A)#Cm`-w&gKW>sUi7tjcb24!= zLUD0(1s#(r7E^h&)pHLSjt&<&=Hb`FJKy}_jZ~)4G0Ewr?&lBtgxM zH(Ml0KMlsQz$4Yc-LFL%PiGz9g^B303w5vLT&38O+>)NXfP=lHPW}w{{5ei3zDOEv zJK4UdN$fkxU-t0>y~AX;QD+(;#g1EXS$EbCDa%IJ(q>s|A7#9zYqzH!w7$G8mk}DFxhi$PG0-?& z=QCSu&P$fPvh-ZuX;tV1JRBEd!d|!T=JP=!C$$^47tU+HL_JHpIy5dTYa`Q?hbBJ3 zn$ayeFMxMt2pUpx1=-ydWFA`JM@D#wQTAa=jaiX6C()HNqNh^f+pmh)0@TQG?IzXQ)bOd0L7T<Y zoQo_VWpgz0@G0_ykz9ADRc41poa{eCZ9jc>oi%%{yE zU%_XLUFOj9Zby1%%2Q$`Sc@?|b--O4qsp#_LbEK(ei!4|YfX_DOLVG|AJWjWe&yPL zhfZEI9m%6VnlL6#|4{O&Z=zT`#JW(h(ZIC`Z@acp)XF?_Ug2)sYlLqsvu;{~I|~Rh z&AYi{#QNbIg_P4#A93}I0j(6OZ-%b28Wa6$Kwr$ngzhkg))^a}xHGqtgx=e9(eBbm zb|DaPP4OeTZaMJS3et^p0F~Bt-RS|{+Ffe8DhZz!tB?cV_OfMBl|y?>;t)gfzJn{o zWKaza{wkN`Hg3F*)?ic#B)GdWsD~leLwQQ=7}dMeyXTiR!O|MlA_VcAXsZr39W6bK zR}LK>GhKZK0dEqtI{z2xh6d|^-mI9pzH(K~o9FndEcdO4@JSguoi^)t?vsVe#OQk+ z=Pu7z^RPLypvOE9!LF0v@M=24h59I-`!E$|r8^!3(K7aD(oh;{N7b~sP3bJI;ftNr zHeB^0k;NXFEdf-QQ8W;AKiFnV`)QN-oWA*l&ok}0vF_{C-zDKTW^~n>(~Wu&>ODu% zsdS||j_zsMrS(36;S}s)3k1M069w`*V%(_nQ(VGAG7R^a$Iqu-tOV&w6hHiaw9cE3 z?Q{?;bRkiNMWcP_bvFJ3AzlPqxOZ$|aReJ8VA2aKFPE%d@jP~XFLsd4*|pP4dv4t5 zS6comoqJQjQekz2ucqfZeh#P7vKayD^wq09%s4o@X^iWGZhLcS9J)&7qQgV!mu|a2 z?qqGNouvAi3yd<_ely!4oePYdS!1#dhe2*RGLt2?`wVg}AS-VKX)dm1O7c*DMVI|00# zh37gCy{I61)Lv=}&P?p+Z9ni7w0sG>q?)i!27{VdFEx-=SC}>wxuV%b63{5nQPsZv zoLFr3y`Fi^U?uWOHd_3!AZA@nRWRx?Is#gjZT-dm z+--^NY9$|qx0@Txb?=k)g8JLSK0;>CtyotE4Ec(*y2I}``{Nz# z=LYA|sr@5Wx+`wZ;s=c@ZZ@kf{C|F2WG-*)l1}At;NVQwx<7KCc+{b@==%+{bDL8) zKqV<_Vz2JrFXyNbZ?GANjl*KFO{NHTN#V9NWzI4=ER=`F?|b_-_P;p8ZaPH3$JTC} z?gt30uL|Zm+$pHSXfgH^9C*Y^%T%?4>K;tLy2J1NaRQI;g+qv*O(H#$-d%dLt($D8 z-Kwh_cc?wa5B6;GVGT}Jbbh=`-wA%rF}RtUxvezz#H`0dysvs)HQmBhL4sb7!O|-i zA*<%ut{ssbd-obb4FsWoa3n8n&lhlbxotV#(lT?lJfmG{I*i!61v^!j=>Qm>I#7TI3w?vKqUo~}_F;E6ZBK9(|CzQL!jWtn6rt}B#a zx{g=`N+#(vPwBf>t6t`_cT%oW!rj^9cM&nT=#1CEvc&0 zjjgbg;kTP!Zf8#(Ts)5{luL>;<8kB8SC(vIkT=#KW93%}!E90p)1Q0;)UW+;%#zU8 zikbzfmWKg^lSr<&Gu>cU*V!9~URPTKw5E(YFNOyLRxkIXRcD=gZ?CL2zF70Mk27ty z#tWILok${as3=kMZ4>!T*e92b{f3icun4546#;kFn#25yx|Ps82|p+>wF!t23`-J*)A9cg5uNR;9v8>wx4 zd~4BY;Uud)_4VudNq>anlCR!lDpCJn-}N1TO3TJ!*6{q}ia&UtFOZo+mi3k6H`Cv3$=kpOKd%bIvxj8k#tS+Xd zrrU`IDnqtHTZKTEWpmYKedtyzczj4k=MksVIRaByQiAAB@cxtadf0Dn7c*T)&)C5? z6)x-RAUnz z>5@8{M-+(`hTOhfCmA%SC^6DJb%Has4DaX>%mE;|i^$>- zhW)dgzMebx*v5_1U`0keyLRC&n*o%#( zFPz-^oWiv6?%37s5gw_T$?+>=Zf3-u_)CIOaH_}_A zHA|`wu7oBBO0!xbC^+${9+`>omCuZa$(H{aDupXo$~VEPv1C-X)}1E9;s;J1PQu1& zp%}Lm-!XDwremy5nE5%ifRRI17Yo74Bck}BWAQud4s>w^Ow6oBmOrPn@3@Moce{yf zc_{s9P^pMMLp8U;b^Erqb4AEW&Dq=Nm%WId+WqOQ9O}LOABR%{oCJM4fKB^+ibf5# z)+St;?ey-Ix^>uc4_SCff6Jd%=M;s&fnS>q6Af4g80j>!-=XUk$~w}PH(m-Fm7zEs zBde|yv2qCDkIW9W?{pW+b-gNBwQ8T-0_y7KB$iqhchktd^pizPJ1)4KLM%g)OS73& zkmepNgGG%ZWWF7for10p+Vb!UjF?Ui;_^V_s(Lm>BnvvX|30)j!}Q-7`YhgBn5 zHl?p&i<=E&u zH`Lyz1k!2dnlQvnJP;mBgaD6i^$zM@!~UfZ@0TM7D+6JK$5|(SUFEFj;`Oxd5jVlI z01({B`K+X;WAqwUoe28UG>iP+3%IYcGw3F4h$krK$7fu1jr3Twf_Wy;z9#7s{Mkpu zHJnw$xLyY7RkJ`W+LCc=PGjj(&|keQ707TD~GKYkJ|V(DO5bA zcv9nO7?kK97L4EO+qhcqxuYtH%0B4T_}V6Re0VS7pfxXezQuf@vG5r({~BKktn_6b z8EWJK+k%KH`AdU8I8AB9{TC*fEJXoWny4>)x}?9q!(=ML2bCC(L4`gN)3dpVb0eQm z?P`Mza#D3g6B`=6^Tc>2tlup7x!egf5=2L-Nv&}t*?#;;*P-#hfOLM!eg5af0N^M8 zBcCK9CHg7u|C}HIBWYm+CzH>&02~1DPx#-48?c|UhZDe9TFTbc4(8L#UCG4E0)P#9 z5K##k+Zmcr6EVs=8k;zNI=EB)?cffmRCckqw>Gi)G^=I;%n%|*H6lR2{zs#30O;|L zDfMqg-G7lMYyhL|Pj-V90B10<{Ivq;lTT)Y1%QvR0jP%0S5^SezzzUS{$6#6K5e!E zObRPE3=05N0W6<;{l%nk08HQkNC$u{0YD<0OaQV3@Y!PH`h+~#*gh8)0Gk5v5C<$= z04xMR_Wa7>@_F3neypFJ0JOmRd10S@ z0#F~Efb+1ia|1f}+0?(emH%}w|Hd=^^?dkmpp<_b_U$^kdwUs&GXJPHd77hsS9p6Iq_pIi$oJ7C)Uk2u_! zx0n03`T2)G2P_Yxsi|YeaZN!D zXx7}RO8?T#1e*8fEKTyc!cR&oCE$)*Y^6rsN{i`CO`)!=~ggDJ`AYD=9NSyx^-2l0pHF5wum2Z0y$`DCBZ zWD6#}#{FPbpc>MzQKTm0E%G|kZ=IfhZpi6Vutza8Aes@0Dxe;w!_BnWyoMM% zL+;HXV-N1clIe8gQiYRAJECSWb$Gm{qXih3r4mB!m%pME#6{wv5m`})=&qtRQ1Mbr z3zE`O8!LRT1gGSSy6I+|ppPCSW4Pf(;InJ1VwK%}dtUmU?{`^b5=v=i9n1WzgD-*- z3Cno7@D@qJk@|kQaZIq^ot_*)&C|H~NV;BcgkgKOMqctKbsJ-5xX5m%Oh}Q;OXcH> z6Iz$7T1IQ$R&hyL?9aNF6n9lNX$mpklRLE;<)9VU>^xB^W3E7Po@PYPn*bQOA|^yA zY5Vy@4DI|!Ax;0ck}wE>{#VEdfTk1-vqg4FjOL4*@jni7KPz}J3{s`;d`*)+n1b8I z${IEncvb82DL5q$KzX-|;!6`f*}Z`F4CfIGNMTqA^I6Vjp?+A&$+%Sxzg)>Nt!HiE z-Mvstdp+vA^jcE-x#4S)VZU%_2=UJq;uh|g>vJ@ z$}aSQqR;lV+kJR(+iOPeyo&<~mM>PV;-Q#cr=J?MP58qb-EL|!;i(?Mtb|sDPtIq~ zvK4$$%u>pd#yz3N(3vPpD^yXKE zGDr6Lp-Y!~F+7Nl5Z1oAe3tfs+U!R2pNmRE;RjsV*LYdkvQCK-R8jR>bBjayf)WOI zLNwntND=?&7dmMGGUxhvzYc4w>l@3D{y^WwjfX9Z*<5d_c2y$C>>Wy^A0!#&4>z6t zv3YOJgX`#vP?BJ2OFro_sjX*YL}>#$~P%c z3o2n$#b-J`C+K4UYBPn>A1QpObj!R0*Kd4M^<@NVt{Q3a*Uz??eG;3R_Vh^FraKmW zl!}Nr+~?@YnxCnm3CmM9iae-=6A<*X<}Gky79f`DQE5pdX_zF=xz>tk6|G<%NjuAx zt$B0v_tK@}799>O7kj7b%l z!H*ts82g)UO=bvLooM8dq7$hlAy2>W9CRpWQ|LohCKAL==w+^U=~m4yQbv<^H1?&@ z=v%OC49>-n1=W7bieAX~y@6@KCilJa%L)i;?WaUC^PuJycyoj%SOW%I+~n18Zsb)f zD6XxbBpjjA30jjGQJw(;GiT#z5VGa)Cw(CISeBGgr9BWnO6IQUl33+eO3y{m+ZawK zJf{p`wjs#dSV5Fb4=y+hzDA)Lyi zcXN@m=!vM(1b~_oRevw_hYn3-qq;%=Ee4Ooic*~x3<3yr^}v#CK*t6=nP43ZlxE0tiN}NZ$j?K#L{^i^Fysy6!vV^rv+cn~djs8|fZ{GN4x#(SiG@&^RtGAm zAIMBPL+l1wZsz-#L`+e*ztf>1ku#P(1O3P=`1PI7rgtk^vp)tX=FH5P@6d%wcR0B& z;JFzwjqoaPDI$3WvuPMAb0{5@JTo!|ImJ{45W!n+vTVL!RR{v<5<7rbh&@WTLNv!! zj-TeMIOAW^v=TI@*$%Z!s43%KLe?WR2it;F7807S7g_=I_zZ2>2IfASclE&Tpl?(+ z2o2K}-MAK{_V{Z_PpoUAO`v{~Za{WLvfWz#cC((XsLcVsAg{=4;O&X$6R)8hGyH$) zp-1f z>_GGin*153vsoCYb)Q);yU5PvYt7bw{F%Q}QAbMxM zgLnrDfOJX`nq`I9JV0N{I|Ds(_&~g}UUGYeAOLR^P6k{^txANjcI7_+g#CzzWn%=- z3fsQVI9pv)8~&fN`e=ah0qUmRkunbq-PR%dS+5@ zC{$-w#j;t8an0RkMU|BO(jrTYaPTJY+KQ+?X;s|8tBSx=jN0vq;{*#hj56B>bJem^ z&2Me!Aw^cIYn3Ovj)rHkv|{u6+hwh#AIeW0wJymQWW1%k4c;l{+}724K{R&3Ht=T|w})+)7})6o-Rw)ho07gPjT zHn|1bM%}ntC%c(n-djndo&(Z*)_U?b85NcMmRdJu-Zc)<4L+A+UtFx#C z2f4rQF(gp2dJacE;nUmWED!p-hKw65;v+C@oOB1A+b?OGD|I6>xF$}Le8*EY?iTUh z9|?)wboD2gI3z_Z6+uWQbX)G*s^`VWC{_*`!;-^0L@LHlP+&sTHkRrKZUJ6$#%0+| zn$#XAaP-P7iDrcuvX8~(UiD}mC6G(*+pBNYZatrRW582wo8JQ>M?(mZPC~=Oz`)(D zZdoph?_I@I0RcK{)C?CreyLeuYt^~P1lKlu?sCww z`V9}-m>d~^6ci1Pw@P44F;A# z_T-i$R#wi6$aI{(DoQN!8;re{&XB*BfKviEHDkX^?GT3Yl05M45N(gnJrl^f|0MF| zigj?s5Fr#;20`&gdbD`LJ(pr9y;|qWh1vAxjp)-;r}h*1Hz2Q>i+ufP?IUyP##etj z!U3lzVA50e5;eMvMA6-bx}~Ld4tZUIaER0+xk$dLlI*$BvwbFf@*>7MUa@9X4O_u*u3-V^&k)6EBzT5P8Z6RfdunixjP!Jc`qI} zB0nfB?+Ho5R#GqwT}hGa>wrV*?-)X8@!l-S+}YHNQ!T7e(FneLrf)cKiYg={G-3n{ z7&2yAtp0F6Hvxx}O7k0n>yvRB1Kly?#Yqz1Ne;0Ef8T!H7S3-T+M}@_2oDPn_Yu-l zY&P@7f)M%!w_$)7el?AtxQLE5hhB0FL)Hp{t`l%w>0d^h;{rZc>CY5BoX3hXixMsK zD!r{oPLTBYqhACCQS!B}Ur@?hd7BpHLE2kt8x|!y`7xuPA0<2SvA%x|B|9d?MxzZ* zkj^2qAD6sQs$FPXAykB{GO<~FTLnc;N}JlDsDBt`Q2LgMB5Mx8Al9|W70KK(JC*hH z{LjPvkLz$>G@9>Ugb&--M1FGm7Vxys;+!L>hUK5iAPi1y#o7m92oL61-&1y+^e^ zNJUtNG`0COn1;COr?XbMnwd7;58O*?*t|jgKdilFa2(CHXeqR8F*Ac@k!3N1#mvmi z%(B=5i)bYC(-B8|FH$GIDV;d2l%%AMJshho+PRL z{&aNV`D`!jl&v!qSe%}_ezhFKueP&4xQA80KZqtGe=?QdKvB1X*p3@9mu7!=qVF}Y zLdAavO+_rrwN}p)Odf=%xScsjbY+Zka>W>T4YE&adMbYXx!mX&_^Z)RflC2<`z5ET zVBVWgp!2?tI_WVXJ(hOfuC+H{bZ%+%_;inUCSsAtaXmmLo&ETW*+zc$L9i7^g*ul_ zO9yh06^h;L_Q`h^aZdAK1girOdZXAN7F+uN8s9+sCDG z3%K@z-e~-gKM}~l$V=U8cKD6c$sh?Gm~rH!DON8~(MK{sB=8)*z!>3?C%>^g*kA7w zNE#kt-B2IkHmm%*s-WOLgq>l%VIHj$?X2mU7EQldDgr2!T8hVnF*~M1x4p2_hJ3)r zxll2;on7@dsAamYHDz8Iiufr64la=G`+H7KBllq${4(4JhNSOoXa(V$q3cF%7C|=# zwW$zK8k7UVMj>G{q%^{!44!=kOfVxLnviKrP6Ee{P-S6|K_6n#5vQt+EMl*7vaMCo zV5rg-svNI9h8wRvni_AX;G#kch6nz*SVqj&E8+oD26h3bLVTcIUnzWqX2{PU4_CKm zJC%5+rNpOaBoB#$?WRof6RC{_zo?gcrRBo{O58{jw*(uGL<*a==#M*rokFfXhnDv` zvo~2;X$zOlr^v;lM)l1qvhHyTI_(UieDqdLztk($H;GBA&YMEgi1yCqL$s=0s1Vj>%oOS`0Ef$FX=U zq)6%Nu5xH=x4#Hcc@M!Wy$+e5V%~^HHndD#AR|P&F@rG9=Lur)+6Y&OWO1}4GQu51 zwoUzYn42NJj*|QkXxe~Lzlm1kF|6c!t533KORjPWtn=Z4b*0yv7A5*+;zXNK23Opf ziRB)F)3^dSNhprCky$F*&fw)!#qAw)Zo-QsP`5GRp~)|*r$fZJm_-VvRRdbPu z8R($4C9_%4r5QaFtlV3=jkymPmSN81&3dJMTG-v%#TgbJh8`B6eoypfd6IInzb@QG z7(Pgtpn9OpmgUb}&GaU3rdZ1I=4}4zXlix`w(E0mw6RWOUsYxClHx>~<*sP-pL~<#3khOj#XS z1esg05HMeYYgd~fTh3K;a`e)HHEu#F#U#g4CKz!OtKhd6I59+Gp7apD*=oIT_rREi zEz8G;7))>W6XzIP(a{!Ub8kOpl)X6pR;epumFz{@MC)?3{NWDf#PC7=fd? zOFG~8K9+a4Lo<(F`~0<|!5RI$drI#xb=nO1k{ z1}0No64t|g>Z~t$e;+|%{2j~ta#AF+E_>y2tQrNUfitH~fP!?ye z@Y)^&50MmNr2m_HikCEnu5eHp(?VuX*3OFB*}{1QU4U)0AaQy0u@)0WK2n50NsIBde_%qQ z=vmH|HVO|Y-ZGP}XjA5(qHJkNS$NyC!AZGg{~Bq*Y$_whi*5pH!j!e!uA{i=RuGw< zoHpB>EmDzOuw_X}rrIkII}duQeMvNvL$?)cEjO4w#N4Y-I0?jr#mk3y%3doY!PQ6lF=qx5No_qExWyx9CM?BrWP#)U#C+mN++v_&s2oo_qUP%7JT zEMZw{!#XdZoVJ`9tyrU2N0b8u)w9u_Mb5>&xrikDPtMu3)?!fak}IAG!Rbl%`f z^kK{)e!bARb+b+#j75xKK*|}m*-KlaQ0Rj8cy;` zy^2^fGqgrLNny4i_of;`aIJ(5k#5ADVyIeLWu$RkP+F2I>Sq1E*?gZ zP4Mx@AH&N}cUEjhl$e@Cp{a9qac03tI`dDgUvT{)O1})QW8zhKy)AZBC$Ykp)8=TU z+-s36x2qz?mg)P2kSoYxXZPF!O)RUSkIW3cI0MT%BR=V8Gl(Q)-f{^Nv1;!Jv8MBr zX{lFlT)T&xjE#)7_DZUTi;TAQN@O(X7*JD!W^L`>yo}BETWoI#Cv?Nrn3By**LlPu zlP)ATL34ee%N{kAIkVMV#^oHbZxhI`#?7j9EIhTuJ4v{anL%J4>oLR^Q^&qT`o--# zg=n6!M!Sn3oruza0&$VW@RBSpTpgH&Qi2+QTNRKB5)WTqEjL`(<>5VCvietiXKiu*N6y2wo)I!ZjG$YwM3^t`L&Gh3bmc2HvI2$?vcvXCyV zz*iEJEJ5i8yqd$&nnX1Dqx>{C@#D1o5EOVN(g_U{lOtBWXg)>_ccrX2bXOX*ZI7Q{ zVIOi%Zhn#1XnW)#*;aDp@&M>f_Ev|R*LtZ}JR;SLkY)*(5Emqpk@)>0X}rUN+pL)n z*+K@6`+<0@a8as@4GEB$)Tr04t35?RernvR)HQvle-8HNoaIs zEpPukgi|Zx1m>W|YwuU`9y?Pm=VC9*7uY6(U5Y_}a!9oTtpG>)MQnQ^si)M$qB;wl zpZ8Xd)^tus61=K-h+nfpLfmhjcbyb5lgOK;ahuj>aY2_$$0j^V=0jeRG}JMCRGvEO z%(>Zl{Ge53QlnNyO5&sFz{RwsFNbkSadffsRiSZbOpb4fZpu1-^UboUTVm&ZW)`>4 zma;3Dxsg^xORMV`N3uNm-$G32SA!}kxZ>+Xo<8{6BsR&`48O)@ex9-dlnsCM6hQFR z!%Gd7I=I0$NztRx{a_J=Y}CV(&kt{VtrrK+vc)V7P2)mmEF%c_ufVea5Z@ zvk~1=ynKqe@3iOhPu)qk6o&{2o-82(v^6rd#+5M%_CYH!fL_PIPmrQBXP&+Cn~3L) zoE!}+Y8P6!9{-IA&p52TfF|%S1*P))@<}4S`RT`W>w1DykcHpL$(r~@5>SeUdn_e8Q28}mUHtuh|jYMLyEb?9Ll=Z@l zKyNpE!+|UOz|=3eA+$YtN-6>dXmHiJR&~wv7`7o84uX3TX`!7YF)!8_7oC6j=N9re zv6~8wJ)DJApc5?#rWr%K8;c$a+`|Cjsx=W2GuAWnzY|Un$*!R_4<0j3h6&fB;je@i z3}?c+P+KcB``>`gdC=@7tTSV(D;Ygbg2m83t?zQ3e&@Dc3%c(;*rN*1c-g_8qNjv) zhWUlk%@APWe#Rq}Kl-QbEQwT})9y!bcIQQcXs`TceP|*??#J z@%dw3QqWf|^h;Qr^Qgh$$07$tjJ0X$C|Hp-KIxQm`Gc@PonD6Rl3H2K0Q_(nVKj5L z>`#s{j6z6^9CYa z+q}X0VE>J1y{pI!s5-GRTY-}Ui&+)Z`+<%Z<`0RGp=WqMI^D^db}8O232zg38GfN6 ziQL^|DAo$2?&Bzx>z(@Rk5Uga>*vf{Jto0hWxb_1{>#}41Y)#%IAWYBb2HcHM3aN( z@xiXZH<6L@=dU*ASm}0+U`k`%6Wy--V}7=xVZ8+5vNB&a`U!4~RV7{(a;ci$8X+!+ zkK5knp7g;zaaB7SuEx?veZRKuhQf$Wd#J=4gvwnpcU=LcLm+g`UOz`_p~`6(_Qn)p z{|Q2i_{QvM%}-7e)n6D*kEIO}Vt!|2^u2vK@KkExD(!4JHDw~*1pMK1`5&YM3)uog z=!8Sc%jPd4=W~+|eC(wvwgRwZ8+COy4nU^LWcjS5-+z^-J423(O&sp)wO>}xQ@8$9-J48 zXt$MQEStE&H=syq6@FF8(bQ-INaL|k1Cy%JNHO zGlhIM581k353loMMvYJZ#eSh$w&OWtXU7f`(`Du8^O~mDxco-DZ)@{yhiTMk5mE`K z^Sb2@(2giRwE>eTBgusUMsh+N7(}0#X2+!SXVyi%tLg*E`If8)mc95sDT+YH_2tcH z_}$BwKQHz5Tr`9lc$}8>CDg&K1ES;{{Ij{Zq(xznPTtxN3W~eLQ6v=o;f-l}?4x9s z>=D&Fq7`A`NZM&VNB178NUdo-R6)7$a#KBWjj5#E%-N@#{s;-Vh@5EOthq*Z8hBXO zj%u43Fm#IqSm#ZdZ1qI%%1+YT^&)6p(iiqruwvGbrdoAyMkNlvOx$jcm4Cuamf+{x zDi3L~w7fc4P$E}Eu@x74)ZAGT+R5~I)$BvA2pS0%YT0~EPCjwFxIbOD)q$IIzZm#v zPZL#IXeFZpHw#{&ja^>$;{Mijla)@Q{6oOy;YF@^-=UM5y?}9^gQ!yzpvruGt8pOj z*_M(0B%%%1j4(}9)Ywfn5Qhtdx9@N$b^DCQm?*2#JNX5f8kWllv!~lY@Kc4o8q}hx zTd7>}%D&!)O)s(=6-xnehRZ$y_GNEZgdRpzQcFPfxN|tM;Kp%6N7>o0By#6A+WkOj85rRE2-Lx|2w~t3P8qrr`dWu1|M+BRVb`EVf@) z<&gdTNtrdQve;ID`c2~5;MwB&NiA8}dnO-c;_m(IbBBFEGG>U}{oU9%AKR1k;4()> zt5v13kYp>mH6j2|^Q&WjI>q&~?D-#mJTdIX6?1c?Gnq0X#&Ox-z@FWEB=Z5bF~A-c zO(I1GwbHsN49d4$Nvw!1c&pOF<-y}bDOG*88J*`QjbiVFtgMcgxdqW&-1(=_j?y}^ zb_$=kD#BJ-mC&4Nxb}}DvqU){$q3MQ>`CKp?+$)FOUExgkS(v_(dSUEX-L}Q*l-++ z-ADs3k^ZW&_L4+Z;?3RH;h0l%25Pi(bG*4j^R+!9qybN*zh~hJQ~BnIGTHaW##6AQ z4-`#nJB|jA7SAljt9%;seB4?l=?@w_umZ?(7b|?z{SSvyj51R-C%^jgq4_T}lvfY| zj6o7QR0~fd%iU=XX4K~UIX2o=rWT(UzZ7dP6{G@H+SyieDo4^=;@Ryk+CCr+H%L;V z^_64COwvLUcUzSGsw68;w~AYB!77b!OqNCqpZv<=A)2d!kJ=6$2t86rh88~pnHQ&u z?4*LSMTSa?>G6GL`{C)W?1MT=OO|Q4Mv;XonK-5%>X#W5yYYBB8+xHOVK) z2T9}5C&P+sSCbAC-%Z-5E#ddBuMrDs-wU>{MA{0q;IUN9_*g$EX_0C$R1kRwh6plr zA^ZRM2y2L~7NOvKw@H?_>~zG)tHl|MEGv5eC!BWH;Vvp(zktq&+4+?Jd|N1xJ@vlG zZY#4_;he=~C*%`^v!KT=vlep&vzEJovey0M&8jZw6;~WG0%5v1lbcda$X()7uWFj6 zHyZ{iEq(ig*K+ z>7$L}gyF{9#U{pyRvO z`qk@Tu0E_xhr}JA%h)#T0JLi0%?{AU!%r59h%~W~u11D;F0^6lKHzCcR*)?XFq*!^ z8cpJ>23kideFR#(l(4*A;m8*d|6t8jlHxY>zwkOLymd77JBV&w*x@lOMX6uQDf_5T z!e@qTeF;Bz`w>w#B}?C^F3G@PnXrF+`)*85mGkm6#plQM7|j}P z>$2|`)lm2vpN>UGVR`RVOKMV0gvV77l1rYTK)A>!#qKgIZ>w9=TNL;hw%YxH2OI4! zyZ&{_(I=Y9fG_7Z8~U9FN>2mneIdE#YJ2YMh4xav*H@RDoXms;S)P&jD00Em4+Rf+ zIB5}JyUr*}cFBd%wlx@*udWe`1fm-M2%8Evl2Jf}H!eG!;ET4_$9C62NToO+-P}>} z^30JzK%p0rM3c#gtH%4_-20e^zpQ{rXrZ~mi+WL?oWis)k~(DyI;>3!@c(kq&pA9DclsKdi?dyo2QzASSCb9Bq-dqzB5;s-4kFR`yyUsxuZLL{vh@|;M3n#J zlolfac%3|e>ofa0T%Lbo#!n9VMyH{G9}@O|s%Tjz9jUxQ>5~cOmnc+;HwKD;3dP4d z2q%a0OP+@|PJ|Y0;p@Z=@4tXPnkJQzL6wi3YALCnvD2SS!B!hKbO(hA2YI0He-f#c z!6ga8z;fa@i%3gpDx_CrD@>!~bGH7G{G3}wD0?yzGbPp*TFFXf0oYT#O~{ z(LcCxj;97L_2LyIjR&d{^? zu59b-u?Ry$(ac;#Md%qZQ})6}SB+|<>FXn~!b3&6&xJyGiDBHn@pXkz7LEGwvKmNT zun>LZw6TH8H(sRt?8ehYni8R57D>eQXdD(6N9gXDwAz1%!2;pdlG^%pzlttW`{Ri7 zCime4$;e?+s=X7HUf49@*Z~^+fMK`eBE1-dS~Ewiy(6cpxE=&N|Hk>{zW5aO?qVa6 zI&aNHpMXs2p=n-QvNzUxl#zKJZqdib^i2D1OAX-bU`DcX_3pPmNxe>3r^W99=H{kc zJnpXF7v`4J^e$I!wIOBeb_+K=KKrc8F@4K9`H{={rl)ARX`Jaj711h=5X0^Knra+7 zV$6e&Z(U@K5zVK;-17rghYiX;7OqQun2UD{$+H4I~O;ixGD z-)(04f%1HQI{sGp{a_8{Qfqc=1ig+Ob)&KpU(+9Lx0<}jYX>i!}E+O>zl`s3Zsh3&X>dZG;VzW~noj&&FeGr`_SY13t(xkW_ z8Zc|kjf=2!WvYDCfvx_WkzU~V7C%T?MUoaQ0sqTO15?2K!PyP`0ZdvR{3W6Ky?_?A z^z)Allcw4|_<*6W&`yN0{GaCe6{g#bzAswx>(#sjeo$d#t)?V&)&hviOtah1C;L6G zJVbZgZTDpB*I%W$>$=|vH?EhFoZ9%%_#E!Ie16MgKHo22e&~Gcn(6FKwGGAu1!2M* z;XD6GpgmoO0{%25Dk5*rTUo3K+BLE>t{d|YMAYN+ui?Uv5x#P9b+Yq>>-nH|4T^Hr#hXLyF_L@!T-(kqV%vV&(Kw?YR?7%% zy__a_y?vrS@3^n+!^?Z@l~dHMcfEdzIrnG=c%jW&h*jZSu>ShNaM({yGbtq^j&e+f zb_y+l%plP8|a!we$A+mA*B)?6KSH7Y@z+pY{} zdgLK6?VdPieqq$;aiZQ2!VUR|5x(9xJF=E?CN;KLq5J$~&yRh(Ojmh0F;;Hpb$P(C ze%U4LC9xVUUa;ZpomW26|L!g>?kt60Av4X;69J zK4vM^HT2`-)OGh`H<#nuIJgem$wlsDtC5BLVtqke5*o#`a?1QD7dnkv;4Xo>mbDim zuvpAd*HhLp!zCzf`#kr2vhH&ddddI(n%x+FlFZP|NV@J}uuzz87XCWU*yn$H6=Ut| zv4GunNn;QY=M*CvAZEQ1CjaD~-kXz4^!VcwyZ^acD?58@yDw~-w7&uN7z}X_j&IB0 zxXD(l@COA$eS{fht)uI33mpMwA_*r>p>7e0-zG^)YUZj}w7AYz4^pX<`MwI_WCS>* zpK&V&a{7TqTFxan$fIl}CT5h<*D7;fG69H=j*)4gvk4Sl+}ZTi5vg@swR@ z78>eHO?g^1N=+b=?&S377lspMjGsNp+&ZO9uk?S|io^X5{!sfpmS>04fy*ZG-5u2k zyzz&9zr4W`@Vz`(XneD>I*>NzXbeY+$inJ~3HtiM_Q~+z!oG7m*WLG_Yu#KEzM<>F z5r(@K?DKbgyVyTA+0So}Y0vxcH)!?G?ogNY}O7_4YD*4`jg>Hux#n48y=)^~Vp)ist=##9pX)YYo(#i?6=XpO)?cf`tnuZig zoABtwj>7Jfib5K%1!&H!$pQO~lx+#p=kg|HE*Avz>EHWy%L$=+CDTwi}1t65cf%At|Jz6!r$M)gA=RUFejf%P!`vY<6@>=W4&d0Z^c?tI8(=GP>6vzz`{388k`-nJz69drqZpm zi;GyxVe6sayY;9oZbBawe8!8}h;_$EwhdP`ioPG*=C~8%9iZ>9Dng-?m>M^#l!&Hc zft(yfKXni1!U>~|5rtrB5Drk+B5%E4lnGd12cYx>G75_CKQ(3YnRF_qJtY>OTjhmdP}| z54Hl&P8GC7`+*DYMhH(Gy3&juSkS+v4~FnkU8668#vMJtmE7E!B)Ee*g%5V$fUa`u zos(Re5sG#rKkw~NGUzM6t8vqv!-h%!X>(0yR*PKn#87s9pRqq1(^N|Mj`nh8_stl# zNEsmUCu$6{)_}MkxA=ZKEg{2`H}#vd1ht;{zOJQE4Mz;MCJ7Be zgP#CaeeHQOnXQpG_Pki68EFC!Nq_oO8Z;u{efRP5nyEJ(a-7w+eM#%_jBKA zFMAc6MK8_{a=&r45_RX!tZqoXLzlPdkI76mw>%A3m*V=BhP&>$$P}8gGIZXag0Pg# z@hL@(ls&qb!D3MBCt*4_X%_xk-bR-R=*$g^+mW8VM+4nSor>nR*bexX1^ViHY%7Tp zHylDYsCUz;$?XpuXjWI%n!RL$3S#ZRMv+m1Sp8V_>Kd*IK`}HeTAiR{2v_49e+6IP zjd-?4^&*3&0sU{9*W7cD=?c%+}$XnL&YI1lkA4l$x!)hvI z*!@mwtff%j){`C;Z+g;Yc~KhQOWg*K&CY!YXJjLDy5wq7eQ-HOa~mTq$bE;nzKMC zSF&_9xs!fK97=#r-^uyCY+j83D>e_8Ue5(A=6F3Fs^#I>Xp}zfTEUAcAh8Eey}>M# z_8mv$j7ieTJUCfOY!M}lvbwo#Ydg4AcNc$3B*3Xy4n}amOU`g&S+rD5$~hK22g7k&E@HX8Lq>3WZ*Z15Ccj!950Yt<9!vs{9Vj@*m=n>PHhxwota0mQg-3z z_Zicfjv^CJFQruI*Ixx;-pl%i-!%?`5NcLTQz?kfwVHP(Y=)i>3+ui$_D-a~IUz7k zy3Q#dwLf%jPqWUwr;Hup5Q86OwCB7o8`Oy$V!iau#Aq&Vfk&Dvn&A%IU`u!5^wmy# z$ZcsiI~6A!u&MF_0ajY2?qrgLS5`#%W{$i2T5Hd=5ffa8q;0r0d#QM zy59vx9##8UDPL~RXN|V#A_gO&m>{C`i*17bxDKGaK){4Olh8EPvGt}Vu^IugdlqS9 z*Evs+Nw(&=th@OyaZHtwJsMA4J>l>G$QXkKtr2qZkJ|lCuOB0nU2`K(bB0gwS;@R# z1E}mS3~TmtzASpmzI&IY zN1`zXuqGNVz)(w<)3)20bCM@}a9LOqfx}7^6s4=+n|DZiiq`P|2@7(5`!`yvxum*tWM8rx>2^MbuuL zke*;poF6@$eA;! zZqtOnAzdg$sCB!dUkaF>Azq)EF+>0L9_?wb`SysX_d5;7)JicI=4bNyByx!&1A;K0 z0)!P})bqAtIig?()N;8R;_Rk(%q`K#i`0Z{SlnSbvP4q29)?dLO_7RA$nSQb!O#9! zh*ESE!B$rEYXzedjdDg5Dq=L%a<2^wdZw?thI5HZ?rc+s8ZxD|*Rn_jQg;+m)O!S= za$k{dpFnGtRp(M7+0vh%s@llEFzxqS+Jvi=_6hXyxY|qgLt8RdZFO`JHP7f3^aU(`7)rsKO|-91C5E%k{g!xV7ju_-csJJXwbh*|+otHoK5>&%j(L^yGQvyJLZ4&qkngT|839w|D;&|dw2W)7h?qjoPRqkqlh{@)3?9S;@__S->^#X zq5n^T+CM+~dp3UsYG8B}43V;vf~ijM_g|tC%!K}p*uZS%KM|N6{R^x9&HWXCfr;L~ zG0R_270iJC6SIATX94H_6@xk0zhbh#`+%)sf46^Pu=tDx%!U3d2IH=OInuxTaDk<0 zT>rH{7r0F>Hu%4JHgNu*?VlLj2G|1jH_r~{RR3=Oiow3Lzoxgp`M+W{@b<45EMEIp z`|#}GcG&-`{r^U!{&QLW=NZZXqFi4=|F- z3KqyQ{H1`|IXJ*rFcTA4q4>Wyq;asa{Cl)=A!YcBBL7E_M#>JRfBz#$lQA{?JJ7*1 zfxUK&|F)&E{`I5%$Cd^@`Tx+Ve^39Pqx!cjjh*#>4rzZ=|33Hs1*dYcg6(tv3r=O@ z1hdEg$1(1#{nKArnt+z8{e^T3kJogN%d{pbf@T^RPCcp!;^X-QGbAMBZx*L22%`cM z__2vR?;9d>_{U6S0}UO8Ajj{bih}^hL_<`fU`TOXm}$?AmN^b6?#_vevGj=pfs6K| z@y3Z}*Ye}6GH%!7*=Zu7Ph`F(TxgPSso{yYhR)Xfq(OEf7CtkPAxpArBM*)~SPOoZ zTHhw_*M{6vP|3HoG*_9uMk1NsM!sU8H)Nn1_aufi*GaHWKkS0Zps8w5hEZ~5`IZK)G+v(By`wFn(+dwmKd?T zR9pX}qTX?f2sN#iUBy*0P4Nb?_#$0!$tOU zg7L^v8mf*JDXd>uICe|cmoTwr$)m1b3N9@9ci?#*t)YQ}A)e zuoU3KmyiDJDDfiDE~3SlIA!X>rAyH!XniE2C4PV~CRF}SHTAO$j!qAvVbM3~RN289 zN1zU!cF2M;jL^TXf5RcID5?D-?hBfLs>n8;pphoE@aI3(pt%Qcjl~BLxrq zJZ6FnkS>bXH2G{r7I8~a>JcL(fpHG%Y1b?W22nseHVTIK3+WUqF(n&J3aYnp2^&ZuU!Jhzb|4=hkH2}mYXSjzJl_W3#q8E z(lJVIjCSN`A0fNZnHD3a<{27P5hilMtWwYGcTb?$wRMUsvw#t`|Ks=P=jUf(maiTu zuKE|}<*(~r^V-GmM`|A38AL-%cJPIT? z3NaBwMv@ce@xeLn30_0(yS}yf%inOwUeB3pp>oTIpiPiGV=Jgo;#@yA!`(H*Gc7y{ z5ku&TYv?2oO6~S2{a#BngZ6}BsEy;5WREL0h+vQXg?9bL6ERo*Hpu?7{Lc8M!R6PG)t5B;O+bfY!O%R+id}{9K%db8Ew*XIRgT)58BtrT$22hB$5l+aRLblyZBE(GlY4(quIHn zJIM7D?3w=P2@Z)mh3R}JSQFG<6Pz$TON>m07bb}owKjeC`f=SkIr`^<+Vk~5GDz&X z%AtO={Jh5K@I5A!3+hz)LG*T+`#QFf_z1B~B}vay_K71;-3&Eznzn7hC)l^(8DXjn z3hVot`jE!-H}-Fn!A zXTMCpS-)lB+k4=}fvVXY;oRUc+VKHfI@^ZTXg$eck84s3%5D3d`|$*B2tF~}J^R;h z#8()v%Q7`ZgMVKB2&h4410u#c+24sTPWDfdd*1K7()JE6#*)G7%o_c|Z`U{9-S3f0 z{#?8WeV(-u_20W;;rcUnji+-XL}cA?f*Nu*9f*AWa{feGH#+Y6O|S9SXF; z|Djv=v)K_6jp_xBLk zVRc`0a>o3w|Ga_!`0j<2V=uvYiwDW8jq=vm7P~OUzeKAe0A&M*4vA6?V_?j3)B5>c zoA~+tr;Nh<$V$J6#zZ*eBV2X7aK?_>cskEP^irMKxPxpqd%dfa^v&*oBnI_t6p6aF zvZ|({o*K8A%V0?yMF<6fI8`*EZDvhlC!P7(_~Ap3vIWCJ`^m1=3aHu%5&xNVLkKsG*Fn4f3~U-s1^Ti5)7lRuip| zi`{E9;%d)+Thi51Q&zEv3NK6QkqAgk(N^75llELHY9V9MG`5!iQF+!a$6{F_&nnX( zZ&y<87=a`)`x(2wzS2n>ea+`A_`DJu zpvLTXWTg$v=}iR1{xn7mw*;)3;b#%g3=AQ3GHSALUuDHcHQS0087-JZi z<6y66UY=YvV-)$Mm{L$Xa7GWaV{@r$rs!n_zs)h5kE*Q6mN?g>d|I~_aPO_R@=@?} zji@r6RRJaM?;#?M&4H{u#w4D?kCwUQqP7)=ss8kgUYcW&+lPN@+dIdWw@BY484`Ml zbo|A_=&Z^CtJ~2PjdCHr4U1M4igxA)%?-f|WwsuNZ)FVQ8{ zF<%JODe4>KrD^S(w;$jxz3kB0@@mC8P~md|`@@u4Yt53Xen~CxrBF4l5r5wJ%8?<;6RIfy1JS>Xe9~?+4?KQfnIEIHn`{o3IV~jg4q27 zUp3_RnkFT#D&aDM=u^&V3m}eKN)ym&BE^Mpsbn*uP*|j|mUjx^xN3S=W=l8SGn|m& zgDgE3orqgw7#lvggHFf4|I7`R;IJ-K=lM!&oxxqGyfe#<^ixqVsg@K)2${SpIUX6B zP05<)TI3Vzs$@!|b>=*@k{s_Lscv*Cy$u)httiIF2sdRh4|4F-d?*k`b;pVu5#~uc zJ2Y-W?;CAy&EpJ>Cd48=v6t!+8b^gaki*y~DsZI(Z%3HAk5qJp`}^?u*GaXo9I z$63?kD~fuJLp|SyY# zN06!VyyVE4yAi8_kaUdFPQwZ=PX*)-kvvd5)W<&q*VEES6Loaw3yNx8Jb}W+w@;aC zoi&U`V)DM-Zq-+@M|;HUdO za4Qr!#CI%(FUDGvtbdIZLsX!hYS?l^bQYqA)*(S#qaI;zPVWCXR2a`t_g*J4lt+zD z&{POo0R^UJ_f$FPxAegNSzcAPYqvRTrXM&nYWh|4264oQjMOXk(^9PwAuVi033Hyj zfjxbRe{!5(K?SWHvP7Kc&IO@F;CHlZ+MaAfn%Ebfvf`$W$|fX~8t~IQ-pu!ngjE&{ z`(gCApLryCLK+NBDJjdx*0y&JYL=R^Dv4O_XtVRvn{LYliwX+i2RlH_Kuif?0%b>~ zh+kT3R*0$$NMrY35WjycPdZk$BH_(+Cor|*D8sd+R;)>j~cgt(f1#r!Q z6&kskQrd`)h0BK5nh~dmqhqnjb37xafm3!SB(k<{yX?9AXl#a-H}-X=jomQvU5B}$ z)@49ey)YC5@kziP_0O!_FSj5S5pVN+RI&{wESjQ!vZeWv*6;>71AnuThw z@!d-^B#!0j=ZV7X$V?#Ygp@cKewhltvG4?sC=VbD-*M;uP)lCk$NtuKy&pG?Vk~Kh z?-6)q@-c1zwKT#oHnOl>S`#i|u!!4zG4%RMO~rpMI#$kelF-BkevH~|@J?#);65h74MI*?=v`E^lY81oOYJIk4M!~^P> zZ*Txy6fAzpfEnhSLXbBZi(foo!gN1|`34T~)DH6g%+i?vkT>1O06b}!$qj?VnQwAI z8HoTClYJk6r@Wcm5U7>;CK}Ynz+yiPvNzpt0ud$vI866TKy73!z)=tyz*E*tFA1P- zvTq9DqG$PKvY!JYj0MO6JSENUM?w66B{~)&=AAfz8^CcCL=5m$G;Iuo-Z5GWQe1tgOKuw-UYHPbRR3kUrklBom9Bm+JJ zEE54A0HrAaNoE#Bv(G~^nV`rNfEJ)M4p76a%)p|`tW3kQ$E^IBrI49L%uH+)^aX(T zm8I9DNW<*f^s~HK26F-(cxH-4!mQTR%pYVjEK>wB8Ith>I1b6QfC`3X%0LA}GM&im z5__hf9ukIoq$0IpvQ?UJ)E~Bvp}lL-&iR=U7NIv0fet7=U!}5X9#^41KI#NaE}bfC zM9+@KwqRzDLI$K>f&aro=T*OlXSze4@zuBs5srM48ZdTfO`V_Ix5s}RIVay*nq~Ju@%oWv*$))UY8+-Tf^t3M z>iXJ-0781Zv%B+UG{X$4W5WsMY4HT*_|qrlO2^J8!IDQ9<>Z6y+;XXW=cA57u1>0| zc371%RV5>pIY8A(hG~6ICrwq$>(sI(V~Y{omcpR%uerdaNlmI*O`(W{h%)#DgtF^| zo3f0|9+{YV6>kW*kYcZC3P(QOmUCZOi=#>WZ~;zAQ1GMNR&@053ZvDI-Wj^GCS_E< z_I!#hHU}X-G#>|1N}*P+E2ruHVI;XKuOC!mZqwEouS3JCa(}vqvE;rwUk47R{egW`g(CO$DkZ_aXJviK$@tTxi&-s*=;GE&zKddSDr)L;X?$7Bb693}t{atCf zj?G>94Daz_60Rp`>du2*7CGO+;o=PMp5eiajO|?t`9)IRLt!~Nr)x;+3+HQMYHCi; zlmvH9&-8>w&L;-yK`yR=;q(l`yf6F%w_PS4PU z`V8KoVSKq|UNT|DKop1Cv;@_R)rny#x$~V}J-PEO6Ikj|F3o}AwG8^b-LG=V4z;NX zq8Y2h!$NY{4$RpJo*AG$6J%<42j=ty%?!}4$p`AMaz)O}Q3<6Pznz$a6R_pdxBwvV z14>i|tAo9aken~27tc*lwr2#PdWz2~; zHvC0S%!&DD!d3?2PC-yYZU&~aQlBIlHEhPNbNpafLV}K5h(mnuuz}nMN9NcB8@Uf2 zKk*ei=;fHXhBpfYsFCFrXz~i2;|HLXxg@s=NT`Ri1U1~!`XuwHNwL*GW!&C9vYf2_ zO7M`|<_z1T48h=`p2`q$G`i7Xj^&L{SO>G9px}?E{b5N74st!5pY|w&5)9;ia(>#S z^vCd%qt8g?VshLb42#1E9At%xnRCwD5g82&!C<4Nl}pU{!imO(#+jReYRxZfeSem& z?0}iBlrEgEZ2yS>0VqERUli{TugH&>k1&smK;CQ2OSDTe2lPh>4-yX)PRKTdHt05_ zHrQ8ePGmypb(m-+WzML#Q|eo%7Vq!%S%R) z;j1R8SWlGIXdX}=gdT_w`5xQh@KaPyETM=RtDP$*FQ4%|H6o=x9)Y&=tA(bEXH zKdVF{N`4wfLTd~<{e+f5Hb1nTv^|PRjL}gncJxCDz?rAKrpw<`Nkeo|RK8Y&bvmQT zK3=I66};}aW4%n{Q=+y^ar2#-Gru$QJNKTu*34S< zSJkdv&#wCHwMx(H{jv4*)-Uh;3O`0Km(6YWx$zPa;dC_JvNS*V=k91KhdYks^Qh<8 zuRHuJGPwNpPq(v0qK5@M*kl$vzXQI+3@t+&b=M&wTSpLP6c2lX9shv~EYTqrhybwn zdYmh$UOsFaf)1!JSS`pGP%The0D*rG=r(AYe^l?bKWwkZ4)>1sPF*j1?{Y8a4)qSr zHRcZ7wfPRqHR(0@HTjOyPFyd6|2AkIa1SUSI3F+{gd8vdFaZd80HXg>z>_~}Z$~e8 z?|QFxuU)|3UdA2S9g1s+Yc6{*cX)SncW`%X4mey81Q1AnxgAmi{(8g}SZ5&od^~$l zFMrGc-Co#UxgC!k&K>q|gG$qYyB_`-y&io9ga_URA{T@WSRUj@0J;B2z=*$ifVh8H z0DP~f0p2xIJ%$A+K9Cw{70_ge1BL@r7hzIo&lpAqS9X~ zAD04DDuA)q!T^l{7YhOn^hE%F2h1@5*8nLV9uBC{U*;$1F(QY*^G|pQa3z0VliQy8 zt52u-h0mk#+d9d98e}+(ZX%lcD`JY%YgtCtwwlWnth#rXLZK=JE3img`z)=JMZ>%G znN?{dQCorQcqA)=21uJsij&FYIew-O3K8DLd(Zj@|M77L`Pve3oXeKye! zx^O4Fd6Wl$y237b7_JKz))fUC@X~z}y@_T@xF>4T%;0+Wd_cG?9^oB_GA4&#sDJhLc&=ot&JtU;Y%J_me*M(bk<>?Yg~wsJ zD5_F9S?wxoi`QCDJKlj9>LJRmCj8fEF*&PDp=(O4Bue;|H5C+V`Lsogiig-JAg4r! z>=-QR?5^l@^-$W5X%3{BD!jBL@HSd{w5Yv_P9%jyM2E~2jRfvi(Ag~n`lx*inW#e! z7F+7<@7772SC~MoX8hku67d$2Ffm|G9w}PWz4VCr{24$tswk;*3y{9{%+!==;=a;d zL$dUUcVhazN8uqZnqn;acoFHL6pndBV}9uM2~wSB`{&LLR0DoN=^1B9%b9Wky-6>$ z(@j2!Fm#e3!Qv@8jw<=)?!uYsYttGCsi11U<@}AfGM$h2!aJujO<1!|F)wS1+M4_YzdT)DEc z)4M<^)3{4=ll!NcN$27xjD_ke>DCH%nMEYQ1f_<@g9O*xA{=(PA^Mx#WMGcDgYsto(IK;C?tiFGh5QfxBl*fe|=Fw9^9 z4}3*40Q6oSNr>RFteiwgz8^VJ5#A?QwT3@&Wncq?Y)^~mC{wzhu+`_{=RWzH8Z(}um}QQT&LXBDYx|HYW}?opnY-vC$OHQ^wqtDIg&W#lG+Szt zth7wceEE|#!F^H?K6NMYIoN3oc)Z*@{br}jv!{ot#z>fu*>BOkOv!T1`O5 zTcw{9Gp<(s^<%Nj>|~Y3)rgBacR@;_^*MUSpi~?CzD~`j0a}Z zxK;_2arrnZ=|PYvpX&*hH8-tlpP1CH%x)W=S!OD734>SKy~n5Dp$}@&6nWVnvonph`L7wr8581Y9d+#40)ZuT z=Dvt!M~qGe>znBl%iQqy3St7SgMtxVuT(USBRe|`^UW0|tF2?cbpllK23Io#4PuhH z>#ajL3^bzdPZQ-nCuL}yko2&o7%)&IIFzR0NrA^ERAuKpYjeZOC66u@q$>lxeW`_E?FL5z_#s z39?_Km;JaA`oWBRxgHPM<2?a?I&;tIYG!$(L(Iuvf?v}ccOF}VeaN3a*&h)6s$G@U zB$g`H)2Q?d3vzKy{I*ax%TJU&RgKmpKGZxdKM9G7?2hXhtLa)@zksGRB62ar+tdr= zc!FOjyA#B?vkwJiI|Z?qOsN*tMEr^s3y)*(5|M*5v$<>!b0&=xGW*+gXcC!Ti7}%> zZ%7my33<6tF%eS~x2>iYF}D5=T8mCR&Q$Pn`2IEOHZX&i2d1gfxHKKElBk+-OERt0M$(bmA z`kE`DkBL`mBO1K6rYjZz-P#v4E+*R0+t?QxNX&0>MX&wg(YMa~{u$IHUWcFfyRz6| zx9#&n9#NN*gpDT}Mjf+zi;alGM%=l$sN44Z(}(ScR`A0ju|Oy=kU15m?c!LkldF4K3HB4fs(10dEF z`ufj@1!jjla1#jWA6grt{7l78qwVSi=rJ$0s?ZCY%5FECL~~E$Ph!)En%J<`S-?ab zKf{7SF?TJkhpCqISXYkpqZ>`SIDhasb5~}Zl8y+$ne1y~Ml~89gfNnogP*vGg8p+C zJ!eoL3Xy!ZvO)+E;h~9p#f@>$Yow+XygSq}&V2JB%Ek)-8dXf2pYDJNTU?`NPpyP-UGj1Dl#zu@n6ef59wcB!Qapo;@YXRN^H3Hq_ zbVd(=)n&c<+^4X{z|r?{upg`>9xDsK^F*_yuUHooORe*EbkCB$u4+>M-pHe`dVarn zeigjB+TAdD%byQT;xb-KCgP=V#PR`f25*I819hvcHsAA}of16Cg;pG3jt+?$SPgceuv3!hVs98g~+Hw@v*=i@f-Hl1wN&c}im8VBX&Ey#! z6|2D{YepN_W{)<8^SVP>Ny&Zyj-Hfc-FuCOQ^RL!2v|>DvZ3@H4|68>h}V9Wa=Di= z!{w@tN!sfm*LfE@(Qrz3KW;}}qB*}%Nm075Z_=Sbd_-_D2qZ{2xl0tkw{vo`+PCn1 z?5JN+Fu4k8(!skr59?=)YogOn&ceM7y@b`8AH#>!&EUa^KV(>mQ)ArVbe!#9_At## zF%jV7U|IJ`z(l}Kn#yd-BWU5uYUys~-l#4qPI)~dpR`nr%IOB!>}9OJ8mpl)B2h0; znZ)bLoisqbO2mgtV7Um_I2|PVa{e;^jUqEe%sOEhBqi z_h~V5xmnq5Je*9<+pVj?X!lD%>STxRJvQBKoY@i_`jcL=)d;hgJL0n_WHZ%f$k3?2 z(Gg2g;OxCwV|A`_p$mPD`t@Fwr zNrRwZ!wE7U)lyB*&3P!i6bf1z#vC;-9R&qlm%50S4pI}uljqr>S~3}wt_Aj$d;>*H z3RpfrvaUfOsUUcnZil@2tDtaIwE4YQQ?Gi|c>eDcWg2Xrw`JOaWixREJVqw7 zY2Gb?J_j#{o(^R8hvgA6Mu&O&0!jYqtX-m7EX*MeiXSS zeu@f$TprP<-B$5t$H@0mOI``~g87-n3cii~q@jU=lPO<8~ zaf1+(JbOjL{`gC>1PMV0k}wnfZ>y;(t-`j(%XY&7h{s8Xa!Al>D<;jKF_6dwInHt9 z8{sLryt(@t(MMj{gkr`$Xp1Sq^ZwLxCCClCON_gwVt>B+xEdpv?tGQ$OpC(fiZKV3f)gmV+jd?qbQZqGwZ9TG0B?yM)5moDe&p>@Z$^G zc3&nI*6+p+30gyr7B+#5L71N@pB6h}rIodw*J4{wj1i=?Yrp@}{wf5Ukj~L{gQCXR z=z~W%OLNgEm=$czQlr?}Ga9{wuZyfvc(;M5`5K$8$l$p&Ti#8q8xpN__0GOz!1la0{~|7+-s!p> z%!;bysHFx!GMS(_+PSz+q!%<9K$7}Yj!-lWv27G5jtOZFvto-OKXM#Mnt4oKkYWXEWhj^MkB!+jlipS%kaT~AixX3(YO?d*3aNDe)d@igl%xKUyulbq9rT>B)xE7mNvLb> zsuC93fXGf;OOYW>T1#_mus;%M2AB5I=)s2FAfx0r1%4#95?=vh$wA0%=H{aG6`VvK zSGWByQ>*vE8aD(j{`U8T$@x4{vO748i4nmGJat$#+dFJ@VY?)uXOdQCp!8&ds;Q{J?naEuI@)CNY zG+8c#4RdVciKMo0*B&X)OZgpldVI&c;sXq79!`hTayiU{GbY{zx(qxrph;bIeCOyo z0NLk901~Lid77^Ws8QV(|%bWlJ%JmSu zK%actBfIO?PES7!QHT=?2^t3U`UY`xr*qZ#Er@GhLHyyQ0w%ozuc3?t* z8WQn{(C=esiC{NUAyTFc$BP=%%hs$gRt@Q*AwSb)%$oRbn5oc!SA-f*^iDn#HGohJ zjz8zI3)z3jVB`qdvQ)NYGE%u@2u!?_W~^o=HnY0l$@w>f_Ob&hIA~<_Q&n~n_qtQY zqth&0Gh9y#DmgXi}Qa<3Oq>0AiC?toG>P}Y^5iK_mB$4akT!l@+< zQLiCYIZvfQ6EU}Ux1>Q68(Qvx8_`GaRCRH%Z_arVk;yM_e~OU>DV4@+E3 z#J~mx6^fYBmktUV=nvxR=-CK+DfGkU`88)bkKJKe8CY2f3IZzZqjfPlHI2Wc?Sj7p zxSTDj2Rcdgyh=-Cj?;D4+G+UFp$jAB=@^f;74VrprIzSjM4!@L(g~Lnl4D$ofV`E1 z?Y7a=Ldio&)8;2)HFPbM<+j9FXT0-!HnM|&qt&MVCl4`|*MS`V`0LnVO@9%^Hu#m? zE{U8#a6&+}H>5=V&+{PtPv7*4B(m13eBh&oi44c+)!PrleINDo$jzHJdssD{wM97S zLsUHvR-H@&UHb(@>B#U1264{w$Ij;PY|*z%9zrm3t~auKc`13QQ%p=8Mt2>#p(NNy z#wGnA+&p6vm>_x@&FBFV6!Gv^CJ!DF%%H#dZ~fACsIcq(NHVuQYXh2SGM@d?ev%TF zQO}q|oj$ov7np;ks|lbe{rxBqB5RE(Lc*wxpOT!(DeOZH4J^-zpQV?u&j*^9@>1NJ z7vuGEz-8oW#J{)WBD9BVg9z0mXEIx1t8qHVV(pqc59X=;dUR+Ywl!cRMHsW&$i3WtDtCSDH zc+`S|JJk#R%A=QIdOzQ-SK7O&y~XSQbudowyXsVdUs8kKLM3;w_7_2gZ#0h0yYu;C zg}H$=McT!>6gf9nu{BzdDKXyaC=6k$z!%c4cpb5=*vPHfm9Dt{-O?N;*g>K6wqK8Z zq+7`E?d7d;^=mlrT*m81^YhIrb@ji!!&5T`%e*rNKYVU7KC#WD%x6(00bFYAJvW(d z6}QE|E6*Cw&U*AayvC8+zuyoRkG!Iu({g_p8b4x~N~4JtuMyx}s}Cr7S8%T28~mN* zF3vGEgNh|`5JopAszT6iUsZ-UYEBW^1$^K61cY~Lt9Zo!{FhuN$;LhKrj#5?>U{3f z*$O=pQI+mSI2*p>0h($kj4mZA@_W^@GV)$ZV;r+V)X2`T>*Q2ORcORQ)!&3)=%f6x z(Z;lM_?sO`wXP7aBO%zypKJq?UAe)2Scj2G6Cmt(KdLCj<8ru8*P)@CPvFUQ!!a>F z3#cbW_k5{viKMeCRBk(0k~eY*FW97p7m)`s96%TQ1ntLg_ab-25g^TD=%r-7UrOY! zpLvE?4nur>EsE>G*|%L?mb9K1GriYB&17r*dKp(u!bQyeJPaGnr@NYNq8QLj-kr)D zuV?3xTjkDd2^!L`Yd(?3fvbj7r3jL)q}9ic#T%09Xnxp*YsS9+E{Z&*K#D3TN$+fFFw4a6?tU)j9hgrzH?us7((X1}`pBTAEKaFgBz9DA>_G8Wt?FjrEZ9;HH8 zKGQBO&g@gk0e^JyNh5P;32ImntE}fMrRB`RSF4H~3G5Vn4=v%D{^<&kmp>C98=EvG z*We0LiF@&^7oCZ2{gX4Di@Q9UqV;h*gB9&#H+3ov&+(>Y72>p?5#T+|vc>JFN}8=v z3CS+15d3Rhgk(-8>oFqGT~kT%*TbXYO`|;hDr!MOWa`X9X z{e4)&uZNiC(8n0mksTJTlJ>wx(<;i7PgCg6o>9KfVi;VoDZ;+y@rvJwczTJfzV8fLiSv@wIj%Wf zznWUBFB)C?sH8ecC0KAIpf_VCOc$yFXv^>oxoft zh!xo%mnv6!INxX*@(_*J^eQE%gU$|LO^d_ocr8ZLjXq01>!dDb;}?_! zMQsiTUum}z<{Urpt4dG`4L>QjHEIan`5UP=dZb);Y8_0?1=K=`k>44|EP>Qx$=%q#GL%z^TLS`_)f8(mySem&fz*HL#SL2 zEo*N;q5jU&+^$ntx@#oI`HT#wNtUPWZjN6^zmEpEwbbDkb;gdmnTB?Q>dnAgKaC;A zk7?X&2ONv!)n~VmP%t)VHWglk2x-RxvyRvXaQZO;NozVWr~I2MI{cLSHv6AGC=IS0 z!=#16^~3#aT&h^z%&WH~P8*A-6gPV@`heTWrGS9ljKv^oHS=Xe{zmWf_N8+^Q)#Lh zSZOxE{4IBu6>f#`-QQ5eOm0u3ui-E&aT@*B_Va9$v<9LZ%JBrr+?|7CSprua<#}Nx zBOxUvAtMo5o?-ZDs373tda;PR;2V6vJ+$TT&}wqs?%ZfHd1{%OUHPX8Bx zWNxnE434h$#~_{u*OXaTUoO9cf|+Hhi|&4J}3HXWOzEsY#}A4;3u=15TaaCMQE1#?(IuZ zW6Ryw)3;`TzbxZ#;4z*`Hf;@}9J8!wIH!UW-H4h+qqtj*UB|&6guCu%bH!oV!$3aH z*CBdcg*9nHKNuaL2O6q!Ta)7k3y?DecRE^2_4+V%B#^AS_F-%nnpo)n*aMv%mfk%O zzQ`o-+?YZd)ThM2+m^QPy`{vxyXuJu`u@^5%q%FG7%912^;LDRIiq(X^ITGyvxV0_ z;&Q-JyNRAdVsGYjyP+|>6T1pMu5_t}PwiDgsnEgh&Pl&6mTUK|o8Hcw`o+c(ROpf+ zc{K1hPE^DsloFKgg}oH-sv&NY&U@OHIQFOg+3`7guJaZ;{%&+Q|6wA^3#5+Y3p*7c zcH0C~bF6=g{8v*HOkPKE_Xk$Aot>uO?WMPGr1i*oz-|yZ|KsC0I^y&;t6jKQ!kdi` zz*zR=jW|?hJnjc?VZHj~>{9=^r0C6khQrJxJ%!fO+XxxK*4$EZi-W+#>soii7-(6w z9oB{d(ix`No&JrHwUW&k+LGUq@L0E?ZTT~0ecCl~>A3(#lZ{tO3gKDJc`ZZ7^Qu|;v-j6JpQRGtj zFi8UMkHP4_Du|peyTjr3%v)U5=H1a>1FZ4*u3{%J#L;8hW+q^iNpB)1#W>24j}Zts z7A#c8J@8iJAC{vq(qrFL=Z0SqaiupoCh8NB;^Pw86x>FNZ2n4^~mGdxQN=Z0Jc(F6YiC zWE%Z3|3k*flzi)>KAYdp{;toqzURn!NtYA(;U*)1-&w-iayR&V_PIYo6B{+^bv7{) zo%KVh3KOo&>1no;R@o7A!IU(0nliV^#a_hWfu*3r)yBoe`?D7q8QZBNH^is5uYp)S3Z-|- zN%>bPB;vbuNcBvaGtKq7aTm*&IS?sAh748#|9+z5RPFnxexovAn568H{trfH_7GJob`49p@f6!(}s zG>p^~k5^gUP-)*jgGJ$szrbnKsTs`#E8S4(zcNT~j~d`fXXfR0H|SOyBVGCpT6=&U zcmQpqdf*;GrgW#E6)L#S_qae2b;GB4p}~SHb!!+HQnQKg!VVHWAyM)16;=;^vas* z6-wbCb5r})m8TzBH=6k97x;E-B;enP1CHomG8@7fASRxcp$IU~Q9_V~wz4cISA&n3NAql{S2Hx{N~q>szB zT0lF+w=%Fo5n?!EgI2k}!DUz&zyS0qmrOYX?kd0b&KD^%I$!$;^*RM-hPk`Y&oactzNC#(zt8Q zz(svum`zQmU5utD%)cMfZ~Ec?TlV^YI#B;VqZR*c_WE~9`M)_V|AE7NqZJ(gOzceG z!Q|i5KjZ`3&u`)3ALQYi!1&L|!#`j1AJDVWtw;a~5<)N(SGb>TV&Y&w&_*0^ zP0a=!ek>^d!bpe64nS5%>hswE0!GIKGv7$tc&b{L{7IMo^f~c%_}0mOq+V7jXImzh zqwS-dhK0Ne%vBhn+~kCj`56oKhEc(qQi57Zw#jtGT)6uYUT9aNtBS!1guB$*81QDtFz8K~;i>Z_$Mo9u5f zxDvVwtIl_Qv6Lc`pilJ6s=O}e!_ecPDc&x$w;qCo<2zj|d`5t$%W$_bB?9q|QbdVp zK9yEON1d8Kg)bsJ>RlXjsaD4*9j5`@gKqFZv<3D|+?Usf9pX1WlRmxXMzai_z;8mo zKo__xoDR>i!GY%=eftTpa=c`hO;+*6E$3#@ zgT>qBGonY?y9%DUhxTETGqezRn3y(ytChl4WGE5}qENI-{2GjzCRj1*)%Y1%fOWkd zxCx1raj$#s*2KSv+23>`KR;_amS>%MzjFRQ(=V3zMIOGVQ9bL^Ra+M-&1U9VW00jn zU=zz?E>%bMddikqb9;oc{%K4)LKD5?@`#WcTOT`{PMlLFD(-*4>P1GMBVCYaY4#^m z09RGw-IJBjl!-E^@L)lrHb=S@@n)ngQq|yoNcL0X%qab7N=GY>*Fr(7%sDSY5LyJ^O03pdE!X;DZabO4Qs5w2M|e zCHi7&!MagJX3InE-^7TLK~w-MXq>+5gk;o~Ju|!@&h?6V5o9m})ZpL*PEB9hN zMJG-aj0$-YSgma}ImPMwIUW*>Nixg~^>+-6AKZmjAOqssxQ~ARw7lpgr}3|%aZu?+ zgN0pdX@jViT?idcO9Rx@r@P-_e)FscBZ+wd-kkJYuEp6oW9S*OPu=nw%3UKa=^0X5 zhxv(8GP+hm!fz-aT=1#xVg_;YnoE%?``e9F6Ww~QmsVJg5{Hj1cD|HeBivYMF_Ul<6lV&#_R z704+(Df6spL}*>*tF47{i})2SXQ=vVb*b~liGJ*ZGU~JI-N!(J!k?$X$vSjh+)1@2v}L zJp;GQ#%Qu+O;S4f^(U{A>H3`5QB5I@AAb~Ftt-9}9vZK=r4Ynl&hZw%4ad(rh{W_q zyPrJWi@!of4N90U4c400)f;yP&+PXciI-@*ARg;6EEz3e4$S{54m*ZDG#FSlaYeQ^ zP_Jh_Up_}@&BHSxcSo+7 zPclSY&VTAD;bv^SaQ4?5@JWwl;%%y@*kF=22CN*k)furjcC4B`0$GbwL#`@5^1Wfc zMf(giwCq4!?pt;u{zB{t)*rV!@Y{j3C)g*rsVfGnh}%yJl`1OsZ^r74ZErYBiE1gQR}I1THi$Nm@Wg}0Q}tB!i+3yB(*VRcHhN@xI_Nzjrd&A;zZRI z#wT{4u4V@GML}CsKh4{m@(BZb-o1i+f>R;0CdGcEql@Af%Ma<5E7?>6jhi~o-qi9g zwKNTQpoS-Yk#GghS@I}2BYz?L!!(Xee+f$0MBG0=Ng9HF>QUP|=UR`HbSYk~58#<~jSw9teGJ0rOJfdHvZp z(063Zz{_S|80%h`Hk6Lbl2g_dTeTBC11CwNl;i?#kSo`aGlQ%4I%61F^{X=O zg+I*_T_KG-h)d<_`NLE92)6lCHZCIv*T)qaoM9_3uXFGIzRj6KLGP@5Dceg zsS*S`zF^GC{yq*0PgJrcLM~meOw}C(Jm+}siP2?$u?|Ko46B>79J%RsXiqJmXY@Y| zGpj!}U6`3!%VDp<{E{!3Pb-#=2XLv+!K0rXE02^HOqG1ZiSO%ywUBxgQwP2_^0h19 zQZA{r;#mEDyie(Bup=5BgtySs@fep68^L^S%_>a;KS#`;O&A=bu*S23X#dgE=}Ll8 zH#xtI&Lx^U)LWqQ<#_nyQtnBx!H}+ld6c8lS;S8HG4>0cKgRF#G)JW^mzj!P$=PIo zMjavI>-Q@$1(}ph-T%EPE}w(jm-T6{@j<9mdT@pF@)a>mI(w?KGy2ncm?x>>XKH3F@bL$i_fCuzN8|5$dP2XM{#xXZ+;wdb z#Fc)y-^P`ak-L$SE5u^fEqgkYJbjn7A3dIAq4D*pJ9Y&3mitdxR==5YlJhcFneWJr z)+U@%BP2n@{4 z;73NK7xD6f$6X;^O*2b23|fh*YQtpGCHmuziQV03;p*X`zMoB~$MN*aRpe-sgFU6V z4XB&#k)Wi}*1V`%(;7J{vByx7Z`P&>wFDdHSGITGM%EI8}Clk@6F&wsu0sG6YPUdck%B(psH!78+dcT^Sti?_|=N9mxoLA@BFPVpUeq_MM zD;Yu#D=$VKjl~mASmjBn`sRI(Qno!=58t|ap_ao;a?ngaE2?4K+e}w4m8@}0ea|Uo zawHZ60gq4*7BmeY&q2i7lbD&BBgN{{lP3U;i*gw}I)nqX@Vn}bH73U=IKF#v07p3nUC~d)AO>9MZcekIhSLQ|MtZYV|2FHhe!Hl-AS<79{XUP${Tm&^OWj zxp;Oq1zUXxmNt!b(Wqe*b$;4&?K#l@?(TwBxf)^e9d6Cj^BIjp9l6QEo zP2-)(SnRtK*SgwU;3nW@erh>Y8SkU@BV>5R210Sixnr@CvExJW1X~ya8yovVY?T7r ztx&cm$2MiSFDz%0l4dCJ6q^akJDE}`UBJsUxdp&g*uS((Ul}b$ZjHtzh%g5o2!tdI zA_TF7M~Wt))`5pbpGnT2>8eav+PkJ%M^VZuP*2IQPGxC-8{a9C_u+(vc3ygia%if5 zTJ?$hxR7#q7ojq>VqhsZ)ruf?ebNfS{Ip!@<$(Eb~lzU9HY? zXlAmTz2?~ct>c40Z$e3Pzv(U4=QF~`i?Ns$FQ%PEBPB>_b)vuWeWLo2=FQ{Lv7=T& z&EzumO`DgJ(}9z6h*Ek#%T(D{sN2cA-`%{|Il)D&AMS_;;B8&xW7zL~^y_74J3&)JvLv!=K-nW;6I8J#42mhF&-O_!o!Z|V%W!$TM1Sl>Xt zWl{!e2J&|{#)d;v8nUz_uJ-DoxdS2G-IE7$RjzA;wW*b3nDG6-##r{#*yPWDcY7{^X-d8S}$D%UzC6&DqL>&-H_B8FK!Ty1>vVta4?s-&D@ zft^S}eai7hn_+$G^K+X9g44}oOzJdKI_uNn_I&;0PUk@weO|Yr!Tkrd8sGhqsVpsC z%xe!gxx8N8maqH>``Pr&*X56st&g}XFOTgl^_yUcvveAt=--WF@6d+Kwrm!<+DHw$ z(j>J}5m!bw?W3bT)^h!GE$%}w7c^L_L%sT8RsFajn3_*ivFB2P78jM30K^t`Ek>Vp z(GS|}G!>N><;e!N&R$2-Ra}TD!r`m>F^nG7R#F(|22#_v#BC|Ljl66VOki}OE`;6p z99uTbAZp%yJI9z~Ol`|`qty2V-ygrnJ|N&5U>UTCac>eLV!Knjm%0-Mst1U|#5R#_ zPmYc;nc4Vupa#MAaPVRnV;rjBsEO1?^)b9OH%>xsSZ!l>5kG?7 zc{SvT`kH@HskxMJ8KD#vMwYc;HFuAUXz0l0)GWB>$TpI?APSwCHXDnuf=1iF-r2BK z@viMMBqgK$Kuy|Z7$GuhS}Ux<#&D`0GKzKRO{aw@0C!x~efc{UdA z?6;$Ie#Y}IHBJlS7OHm7ig_qtD$_KvpC&~Amt*$cUldx_+X z;48oGD9KZ!mzCpzel#ik0Q{AF{L8ShFY+cC6SU2x$uS=572}&f<6QFL5FF7>!4RBK z9nlzvW9r$d6OpM^OCpzBdyO*0Z|S)x*SP1?Bg)$siiim2ZJ%bJvVPOa*-UE}{6~H( zoTB=m#(}u-Z7>EYid3NsE!V}e1(8ohn`cwNzD!a{V*DWslVsJ#tcd~ozOtU-_bmC6 zg#NDJ-Qbj?@g8dE!O%WakfQr?m9e;4EKU~E#iBMB2H#_9UEI1`b(gWA;%h!NRhaXn zPwy7}Cg*l);n~wB-bCFWBk;VhDS&n)sPdTK+^MN-8jWtF`&>Wx-4QF>WR5a_Rr_iG zxFtF&J;g01MmD>Z$!GYkhj7^bAsl`(F9S7zJ>RdVdn?*mK96NJCv(q{jGUCrU}~77 z@S?R`qG|}&kO}9WD}s5P<}SK60o^X9@Xm8Mb_&Hoo)*PwMyg!Vge2yYvS_qWhqlpE z;+2r|$Sd))zPLv_arHovg^F64?rwDaQz;JD2tckL(9^Jh8lRGc!!P*PZs}R#+R~EZ zXBsJ6@;FRY!bI{MHBO)@Yl&vY_aLCVNnXfmVyYOj0k#G%BXLh{t`7z&W#lQK=?O`q zL=jd=BkE)2Zn@gdje$he+gBZC8 zCa!KvnM}#*a7-$=Yz2UntsYb%i9p3-s;Xt}*yz{c8Jsw=Zy=gNE=%d`3DQzho2mgL zr@5HApO)l#XkyyBQZx{08`0>(v^3h3;Yq=pUFMM4wliMlY@Hf`?=ej2tD%w;ovY%( zP`V3p8m3(Ti-QbE-M=82=?C+Cxk&N?*u@JGp0G(I-@s);P#!W(uhVT&E@ev&WhmU6 zISJEu(0o>Azg36((2+6(91@ukO<#6l9JrRZh1y{x(vy4YiYb@^fo$L}YtWZf1wXCK z^c@#M{wX05%Um7w*a?=2RjE%KeSuw8B6Bx&xeb;Cz(xu{w{sX&`q#3Y;2?r7p{p1^+JjXWFo zk(yq+8V*2Le4jg}%$-PzjLT+rI(6igYfda$LTh!>4N6GE!V<

    V}5_&NFqQ)U8M3Hhpy^ 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

    E^gVq*g{6?J25b!z&1 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

    mK%p|JG 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%0D6ue|BJO=K?1)JaIVqDcU&V((KWLui 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

      =B`s=r5nfnd-tON_(bN#WE=EU={ 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 #GV}E*tO2 z$_@{~8?k}F-4iLHhK!fNUr~)(9lEbUzriNi0?ed7uKE%hm@GFY=1a|;A@@W0w*x=f z5@mzFGyQ5ud1QioYfYd{Vl{)vMCi@l4$kT$aN`I4yyxqcnP6_O738TVMo3yYCTfJB zfBwO*by@wpofk-7L{l>j!hvVk**VAU7^yj8`@4-189~?-!)7WkX#Um?NB`%?{q0;* ztmW2T!i*`5_B(hZ+^^}K@9tiawiG;4klP$GM(zpmxBPP3$Jn;7dlO_oBjer{5iMoN z@kGW7pR|j$D}`!i0{Ai_-?HdVOsK@GPLkB=6E6%aR4uB%d(x-xl=cX$^$#g~t&w2R zmcB$#9B*O(kJ9^WW-E|FehgJcJ$ zFoS?8G3Q8KaU4Af9X*LTvtOw3Y0%;XaiTV6?`sdo{srkDbrN3h=}IBqZ*h(#V>P`- zBlBMbNG#y%WxLToTiA|?Jm?OwR3oW-epmj!5v`LY<2Eb5wZAcYE4Yv;RLeyB>`9;C zRQ{TJaBxekiS5FAas_Qtte5BLD>Y)}6p~l;Kj(|%C+>NMsqm~r;m6>|pc#%wgC6-d z=hJieCE;LZu>7I5BDq53W)Lf-QpHuuRmx^1VHJP=?#ANgzx<&@P;#ORf?szXy`Oke~aMSF3 zM&4u39bcJk21yV4haQ{V{qMD3hF?RUdyrS~(=Yz7d}0f-m8K#vnLym`aA~vxFEiQi z7Khk2+Mhx1a0$b;{a694G++*(n(NYrofPe&?Vod(d(9B@>{Eeq{Z0L@hV=cL=rmpv zde%PUJ^{b_J>z}gOw?&_vw`mCjO_*C5us3lL;~o(N=LpFT0a@efq(9O9WiX*gE*${ zV0LLNPNPqAbblfoLp%@SPkg`J*GB+d|Baew$Dqh>3<~YM<+!835E`8Ynz9_`kB7{@KqG~<9!P6D19!I?{aoElckiW zY=^1EOxi`oA37Z4`0V7=l&3Mw3?2~i-$c<{ z+j_A7rTtSW@xvDBK*&6KVN9lO$$FWZ3?7Lxa;gn&SzA}Bg>mR29H+aBs%aQt*jnA=lwEH+`;5=%O4bWH2F9s1fGZ+1y`979D=H}{;n zol|c5F;h}?L=t_sqfrZS7@0sh+1z1aOPa67KzG{H`)2nG=Vrm$$)zz}vNLhG! z`0<5<&95IH;Yw17Z)XVC{YX(5T{SW>({(nkXz8jaXQA3PD@iyLsf*4P&U)5VbW^Gr zzh%|6xDVl51lH|HA6pv2#C1&c(Gq`-6wt;eP zSnr~dBSS*PM=^G&vUs>g7W~{ZbZaXOmDVI^!KXE=5a$NSJX6Ykg0zSC3R*I;o z#+I(sg=$q#-$)y>!GV_~W%jq$N<|IrI_;Y7pwAKTHts6L_k4gdZOX6Kd1ph^t&+H9&B_qPhO8EJTw3s##uM1k@P(4Y^lCAeFzrf9%EaIU z`aDG0PBJ{*h{TT22w3su?LkGF6dmsmk4Dr$R*v7rg5)UzXOVkn`R1|V=2+N< z6AqJIRKabeQ7}}&dCTAV@XsPa9S*tdbzE!SZi=OE*UPm4fpYvXW7WJ;p)u!KwnGrO*|)=;u- znNcIKX===<}oI;1aXAD&?xtw*ka8}|x^(}!z8U*>i#hV98lAmA>N%^M4#R`&G$Ty>!AOh@8Nux+v^Pr>(Ef1)@ZJ|UWuF$?x zS^;bszFWM$d%p=J(?STL$yB;is=^Lf95l`9T;1BUtD9J2*{J*I?$NOUE{TMMPL9;Y z*b4Wc)>_>e^a78(pzGOdOW6G37{eA42O;w_alYqgd2#25JLFo(`U~gGuUh>i7oV=t z%QceQw?)q#!!&5<#eN8GMiow}J=#~>@s`*t#8G0f4C!tD#V{lJ2-E&$3DM^UZR{#7 zO4AO_MzdCb^lwtz--aRVsqWm55ZM)sG;Y&t9Rn4*Y$j{c={V?N_VohJjgAEc-$V+*v7vwoQ!IufN$GGKmf=ep#C*v-t%Iz2| z$K+_?+#*I@=Uph)V%Bw%MEidH3@=AihpBBfma%IoK~GlGRyJ!1E93~Gn{lHLuZe>L zA88lhAHggZ1aJZ)Qf&6v7s@8(*0nZ`T1;RAHQJRL6@HE$yLOV6K3z3CWLQBUVB)`( zY^RMv6l|(%Y9r+;odjg`l2O}$Hd3v_PZ(JD!g{wuwi~@AI%pX;AFrwkcEXm)S4RuU zWqZC{2C|^Ums>Fu63)qxIPw)Uv%RX}_ z=&JAinT0h4YE!J5*tAHk(SR#;p+LKw+dxm`h{&6$f;V#5fCuA?d z(+DMRd;*!>#FU5B&!PLg3#~VWwBEr8bdX<;I;5;$fjCYK(ZeeEr{r=aA&e?|gv5`Y z#{INVe64nJ7!9)n3axfx7=g(_Gp!dP^xpJP|M5YOMn@@h`pLmPvx6Yoob*ta#@ia& zcRBRl#LzmkgKAn|G8hZf0~xIsVf0UGm@=~i7p)gr^iN`#{K>(5vjc_3TM4ZfQS?tj zm@?A?6Rj6Xbot4_@W$If+MI;YXR`x7El&;fxT!&&#@klfZZa5$$-x`5gA7{S)KCu7 zg9zGgdYHcC(4j_0Np$$hL7T?gN?P26(2vG?1@xy$;WpZCVi+G&qc+;Bq)>XTpDCg6 zT8-r+=&e(OGL7|e==v$47^VkaTIa}$H;TI;kheTkuRjrB_Cd5NKLjknFT zyksy6lY`z`p2Fz(>7iq$2TEF=qUiW(p>B=!>gcQEgCdRf+UT2R2f$jIR4_EA2j8_c z>0zEH274OoWzo|n2X`9lMbWR5LPr|w717bh2Yt0NC}3Pnjaq4^lR`5a8AZ@br-D?_ zOD6{L8X48lwM~tpXj!L(lWAEeg@b9Ar-XB9mnR2JwK7OyP|OO%(aFb!TWD1$2069L zQ$nG&DAPlgwI~xqjkPF~LK_+x#nHtl2ft}iCWPW@ji-T!)0$2Qm(s!}hQexLlER!f zCXmBaG$s(kxNAwKg_3GXri6lNVXlurR9v|pd|#xb9cvf6l?(N8awDkS9pk_`xF%r< z%mvD`Lc0#!5~bvYa!k*C`Ghrex)GjC4i#(H54oHe6qbY``q0w^%5PbG zmObAZ?+x{8|MK15i*Sf$++)(n5NjH;h}t+{3AwthxT8Z;In1WXI>e#DKD?y4NV1_p zwr;WxotQ|b9vmaUWoVB3^6gf{GEhoX6Ph}jqHdi0S-{+>^p-N3u8KN_q1KGP5JKG9 zkkE?0C=%*wPUMEV81(WU)%~&^mGg21Ez!nUq;jcJj}bp6e<=$;_Q-nP`J6DnUBZUi z-A91%Q(1K?S5N93{I<8LDZb^04kFJV@eq^M{z&(*$1$|Th$m-fmx}|}+@+RT{)U5{ z2kNqXPQ8N%lCr6s@B0sa7M38y@4-tRIrL7QZN*cT&S`h_KwO5w z$v0<3Q+5W39rd6ipUw3VwnQ$E!^JmsjwO%7$v1OOC9mMDJ$DWzAMfHFvs9FWfAGLq z=9aVStUYv2BwxkFH*SSi_B7jnP(A?3S##VRwDgga=F%Cz)RS|4&>W+JQ&y65ecBwd zq?d#4qCIRyR0f`N>XJ2PMPJ61WA2hQaxO1llVk3jHDJX}K~ZLvbG^@+ssd9+m6OHA z=45@m++UHWf>)+3pUfq9$eO4ER|b_c>QZ^Cx`L$`xQRDbk)#4%<}7cPBh8iSNPVh0 zY(-nflq2qfJz_;#hLi)%1$U;}PnEBNU#2V1mD9+@#cAe*JxZ0lq$n@K33r+@V5L~* z&o`MqOBJg^U4|!a$CUu%JjEBNS=7>E`)w={cC4a;@;{GOfNFBBmAa7va^T#FX z6m^6uNku@OT^=c?I)^s5R8p+FLY7h!^A+kQW+9>=)b@ z*nX3$gM1Kwh)=M0q!+LkP)Fz&%$M;l)_2ldqFZ1`5KjV61Wyc3_-@c{xNh)nsCRr$ z2wd=8pg5p9&^}Oj(74C&TR%ikI8QWApex8HV4pzyeKbRadYpA|SKwU1a1Fn9n02Tt zAbkkHYCA8qa0k%7Z{0w=2)5vPpshfC;OwA%!0f;{ffj)l0dW0Gf^GGS3s+`v{*#O> z?^1?*w_vxNx0tt-x8H6V>)|zFs)6wr+rsN0@WEn;n%Ro!L@nX$VbGC-8iS&OhHv{r z`l|(;TdS83!y8$Pqx&f7yQ%Fw{@9Pk4)cOYI1> zj&KF~1hUgl(~ob+Q4jMIggX$vAN&gJAGZT<1z-eX1e^ud^t<$<8?xNu7^2i8c|xoM z@xt+f^Fmca<^kbD;)CLY;{)SEtODBvvh|DfTmQiG1k!}62C7FNZ3>Tl;0K~H>V(yV z-iD(EzMeGSiw+F!2QlPlM92W0hA;Am?T3;Dy#^`;q3cKefn^DT9SHFQzZ}#$ zaH5~okXR8^7N|0i+7MR}N)_ltkV+8*6;!NW(-4*s850;4h)a-tAE+@v*6>>bFf7Po zAS)r7B=D6Wa{?GC2von|;!E8_mw!Iz$``-Z>zeZ*EfTCcVyn^m4FW3Li&zHsBKewg zj7BfFQh^#J8^{P#yI9TQh2zVwUq4AA3S0ZsTg2BX_e&J38dIgg%@CTYou$(F21xxH zuX?edQ2baRHc(>DlC2zrcJPs1dA%m0NF>U`laWPu+=5cd`%oe)zb9(X*G#;cucH_z zqa;_>urE+=mhUK_qOtX5&)<8^=x@II&6MRYGCpHW&R_N+Jv|?zz}~R+V2m)NG!!FP znVDVuzFy+^k&S<;dI+h*>Zp;(@yPC`QYWtmzoGDfNSop9@y(00>g?#gfB1g+<<9D8 zOd??g-T}R2>b%B;$(_rM%TJQy@zVJTDM*PSS6&omGKvp-Du7qK(iYuV8jE~A85HEB zsL&Q^H>hu8EiWgH{`=ju`*Yj1O3CGy<5vh==+IhxomaKleAn1yK6YM;oWw%6#Wr5c zL0awt=V%zuVBc7p`;jahT2y09EmC(bJ3t1Y30?ZC$H>*F07!? z=KS)~`F6uaS4=HJ;Gy8N%?JCM5$UU&_*;qUM5IWNpF351veAT8I+$O_MIAMDK3ey^ zo0o=6lop|@LcMOjyz^W=T)%EHf8mrGsuE-+AqGLN{b2#=sH_?Z zZXcPWj^Hd+6Ol zZkDMbiLzcG7mqHSnY+fwxVF$JzW%mgfv>-vTk*|z;I4p%#P5c}7-VLB$tCprSDMew z<6KIC{rzf9MneCh>4Ux^Ddo|f2SZ_GaOxWnlL;qzF~fsI*(JeytU}x`8!~R9l#Itd zF!fycV1-)_`Fz}xUp5r)q%~$W=IE-_I>UlQY$F_WGkMz@ie<26#Km54m@ApR78X(-IB76=^_mVo5#;X*5iNJSzP@fi zZb_t9Zwk204nX#Mx<-6VN-z32AWKGhU81~sr^k<0n`hmW01y(T3fAvsEgRUSPtK6t z4`Fx3svrcZuQ4b@&ELy%l`$!Mw(rX~bm}*LJgQfGQ%W$R8m1As;cs+yp|GpD)K%(! z?vQx4^?M?7QoCdEh;;^_>M7dDh~`q*fXO-Uu6aL9W_&!2mJ8 zVXBeE=Z`@z68y{7YS;+O?15C1AD%_HpOh)wgoKK+2PZ-%A-%8O{r$_;KYz<}Tdk&5 zNPUDU%*YTd`Cs+i8)#;)u<~Zv%TGtKKK*c@h&SLScky;>U2t$t{E@YJNDn_nX~OPj zegl37`#_Pp^$Y1XvMnPvy@JO_vse&a79J;_{arBY0ikmSRpyz$l$5dln zipO>R%9&=h2Kb-LAeA=2K)s3WvN{obnY!zLU#{g00fU!49YxWCoI=OVMi>B?^OzJ= zt290Q1HC<3^*-aLc9^+9gD@+f$=tzf{6APb#~{g~bxn8Kwz_QF>ax3R+g-M8W!bjX zW!sfy+w3xX>df4kduGnPb7LYVV*lHjv9;FPnelzk`z(CEB*TrYgf1}HY3uNs%yxF! zE-{N4R~hHfcso{)BrGX-|JoCZ=_}jZ8bQtA;h}a}h%W+6HY_o>J+UDupLVflf`Vq! zDoY^AN#m$7!?FL2XyGWRUL=cYW?Mp;{9~C+0v}7G4FDjiU7r*eR$Vr!K=6{av4-ro z#9C@qs2Vymt{&=ODC%N-xYmfY{%Fue<>J87^eNqsrD%=+;)K zpeSaGp=vBXcNtq+I>_fXm`|W#mfu4!!B2p>IT+Y8??gDU&EV%pKctpi37o*)l-qWE zwm?I;{s|Y6hk`K? zEYc#y$dh-9xFk1=cqsDsguG}fJP`%n@lQgoE)j0FdLlLWD;CS#w%GQh(z!rPX5+dv-q-B0z zige|UHj`@-#@X0cuA+~6{#htGcX>>H2MxjFu{PR~JC=73bLG$=G#-wWO@}?4t1;HT zFTW7udKP-<%NZ@$w|E^SZ-3ryMm9c`T-5>F!$;~YmHLBZ7tN&=x}|F z7jm^II6L2zYeu|OB0SrFOX|i>5`3VoHe{nas0b&iAKQz;*_X2HKOq&H<@UMn7UX^y zGE{;$Ps4UxjKH?&%{+?49)NBo^n77DJsJN~}i90v=%g^OZWYfIQ_-Z~VBY1sA5q%|m8RTP?BFpy_nQ4SNr;=(OU z_G7;ozTJv$G4*7;-|r_Ts|#Q)IQ=hB7A+n3l^DQ$Qjrv<9Qt=hRIU=b`ZR+x%=cTexhFeT@$YbfrLR%MszKcj59znCms9iWFG!k8_ukD@ z9E@PMc)&Cv@LE)|epv$Y!L)Dz*Bg{hZimtEkJ}osJ`jC(BpaGw{u=x>vG1I;w6Cl? z8g%?}HyuW~QQFoN0*9jLZGs?b>X5llavu%8*}RnPus(zl?V);|qf5`|wqiZv*^4dpuOpfXTsMn6(m zFVc>1<8TFiv9KhbZ3Jf(m^`cjso9={N#cd16uS+|k>oL;iJNsJ6r>#IdKR>PejI<3 zheK2f*}3Cseh^wbr?_^&@ov=4>$JBWURj%?>j&$)R-a2@ZRxZo*T6aMQ^t{`AJizO z&B=@0xD{EAQPMp@g>$z2fQ)Bu+D|4ch(k*X4c}}U*k!NLpZ^UawLeUbfLtB$RxbvS z2%T>wP+a0E%j~siOcIB+2q+O!PUSc_*eS?p1x7Z?-UeRdry>tqcih6+^9xWFWk5h|q>ZD(11sJ#!9bIJ#IAaeaxG86#9lIM zU#mU=mB^D0&PA;!lrcf`O~M%kk&SP`=1o<2sq6!LSS&_Vi_uyDdzIz+xzuyaVJTH)vb(v%XvQ#5joaWLCn zG~jxbwJA8dt2E@Hk>DqV9x|lGV`d9-8xO*FYd@Y_}Uu(+I6cd$-Z9`7>Zl`?g` zJH|%_U@CG+dQaWWmUvgspNuD+99?3qBZY6KANhkZ-)sX7I8hW`BY-z>8mH=q@0X^Y>-zqjM}{)bf|~Tq|TI z`9gtoJfeSs(3tbch=<+kf2F9$+H7W7Js1a77ZJ-6hr--9yrF*t59|F!BS^R3|W|`1z?g=F^{8@UE$Q9l#zgu6r)Ye=g@05t?&8ZxwOH zZZlmG5gs|>3)gkPq!gm3O?I+S@I$lYW`PeqS8jS`<#qV@F?M|4h{Bd<~ zWV%Ek@}#F@-}NG|*6;8;QSiNYv5v0~n9q8QDUH5Uu24>ssFqV>vwhgWLAhqOO5*`( zz3f>5r)n`<_N_{hq<|wy@WPN?bz7#jw1dYK`vA{l7}_l-NJRg)2~>q6DGp}3vdpUs z_}hNHf$8aI$!JSnf&e`|Ff^4^B=a39InJMZ;w5<4O%Mu~qtdKW`kCJV$TJ{LT@}gCM zR-Kt*{UcE+^q!U)2{-L5+(VTsfob800HBt=*{I=8&(Ao%p2gCgXI}4qWgzaLv_rtE zDd_6AhDQCw4p?uTzd#1n(1#=QTv~8li6V63Nr+}PQP7xEzG|gpXI#0(o`iQ(x-c2cV5i;psCBr zj@sxkqn^_YkKR$ZHM(PXa3o1?6}EReV@B8V^13Ld{WK6isJ)G33BJdULJ(VnT@T}X zE7L@C4xq>~vo_MVls7R0i6Q2f|E^;B_LBkWEG=B{jS8_wCKm8PYB0&nH&NyHSHDvQ{90aEQ1SjKDdj_Y)AY zDGHJRSoXjQhy4_xAF+#TW~(E&qOyxAc6%GFh+9+NM$l+8i%yNbjFIy8t(jhK3Bbuo zQ>kCGc7vBJLr2?!K&YB?f;w}Vt@gH5|8@jbs&4j3mvVt+X7`rRsL~L;Udy%C%-f`I zAxL25<(4XyYG&M1dp44C+T9oOQNWnFw~%7AqFF4`s@S8OmyQPl)^n|Cz zQ!kMJQaoQlkSv4wOs^WZoA+i)p??Xo4!NWf)SlHI&IcGupAV)v*ePwxl zxs#fUjFFa&gNI_lhB56R+_Gx&hDE^kk#!yQhsZu8JT&YWRhf}XVu;I7=1MCxS#u&i ztC65bDXCDYnl-2oo3Pb>9AvgSN*ks{cRv>TapT2EvG6I`djG@Z+54j2Fkv<%R3K!c z^|a8O_u=tkF#o}CHWIN09P6+DiF=vz#q_!YlvvyNj&6^YZyV;8Og5doPOjE_Rfbyv zdWR66)rO<}ODTM%GVsMY4+QmpPI=r^s zEX0~iM2nSJiWTJLM;pxH`*jkeJ900O_uN_V0L~zk3n@5v;l14?n(z4xM;_N0$F;1U)<~$T)aWA~j_G!5t&C|EeS2X3_K;60DCKDcbbj)^ zJh5(s!NeoiE9lQ#tOpj7G;65_gJq&#sEHVBblf1x)lsg*NF?3%&4{|es1&35)a}y3 z@OZCFmovMDJfZ9-Vq}mmnjpg!7tvG)h9rX1ciSTj^;?8zge8E#R~t811Kvr<`4#Wp zqyiDQTSJXh&z!s-6_Yss#91}1Q4Nhu3q*pLZ>DZ+=ax)tRtgTBM!S!91v0oW7Oud% zZOdIdG}@xD4C>OJIv{IOTPCEgGKOn-H?t8DaSir#Jl$<-SU;y2%&0j(pLBX!76ew% zd`un@#i^|~vampUJhDJ}H1VE5(|uFF=2vpgM&CYIDDU*lhLyG}BBJgj_+SpY{NXN6 zPvauv;lxUCY%NRBzp<`#-RY++A}RYzNLs^ab(Am4>qxQH=caWwvV)MT-MNg2kCx`m zgdNfR!(@PBR}p}O_qyj`5t4!~b;#PVML|_AZ>tz3ND~E)?vR?-)~~Yb{f7ur)*u#N z>hnIlY5$^HEmDvNCDx*bi~Nn4a6zNGd|nfwIdY^n7j@o&%(?kk#P9-j7Z|4gNLJU} z>-#4>KZmCdyld|U12OVCB5Y6PuHSBQ zbsO&Sw4|PZMvX12j~w6B@(PCHnmb5!vJ?oz7_Bm&u5Iv5ANh~sSflT6gIWR;2aG)ft@+ix%< z17u*(e}GcXA2$X&SMhu64IzyfCbAisF2Qv~hy<>pzVu1+qR;A$Quf-{Iv>e4z~~!c z=Dt4Wpnm#OW?^CG)4xUd<9{;yH8k+~(nECB7H*IyE%!7K2#KWm==Ou!FdVYwx$@OCoic5P@niwOrEEv;e`YN-%9Rye3-3~=Z}JLhkw%f_ z6z|NU(7=k)75-p%iPqI zOY%{?;ci(swcRXJniC7=Uqy$m%aeMQSi@{eHt)m@`!-$>$sj&;?~UGcFp5B zsw<+83V>tudD?uZzB0WE(C?VgAK*v-J+iZYU2mPLryC(i1 z3_QL4&D*ZV(d9eZCF;?yJ9ig!ckZXtBO9GP6~;TELn0i$v$wDAcq8 zWyEW5MBO|MYCv%iCCwD&3g}b{P4=YZ=GfItOY`K}H$Pdni@k<~FeLCIh0(Ye0>vbw zD?!7}g#?lA&zr*9(BGMEZorBn=5il32=W+tZvAefhL1krwm0F`_WqVDq$yVrOXsZ< zj%$c0^_#de&^2sKy|(E@0UN#w9)l|A?uZ4SKd?)}l6A$f1^b>d3z{-H{|8ObSD5H? zy&O^&A&hH^Js-V+kv2>fUwH}OzHDIuJ@YbJB^XyNID)GGIjl4m-}7-GZW>;-yRPHy zA_nz0=N-xH?e-Hwr|%IwaEks%#WPP;K}2n_8%m+nAbQh0ic#;oh#}MS>#29=gLJ?d zL^9G=0Z5dGr3m=GNCV$cZ$jkebOr_YOObQ;ftNNNR6*abEzAVVQl9ylqtfWuXj%10 zS7w%<)ZeF_auIaUb_BA;F0b}q*w`%Om=NfH^^jstZy#@o(>_i4?3K6G&PzYF1Vt@3 zDj~bEBAPQ4#)&i8t|5qgf_>LDD)E1q-Bfw+i?EI(FfiAdTF&_qebihPMu@4~uV!fy zZdkwi`{wfdq!a*PtAn4~0+S~8)%V;d)AuLlG@*{&#*5H~duXqZ6Q38RK*k0zub3p8 zG7oYQ>P>n%=^Z2==NFNul6uQ_s8YON%0H;m11E(YJ13uvS5fW zANEZv!~}G8>RKfY+fTlKFK+W`s85`{FTKuii}pktVvc_j{aKrAw?L{GYUT4|NH z^)Kny9lp*WA06gHpFmzZCIWtm`YO{2s_keKo2-USWo05y{B`D6_c28qi=6{_yfWeU zK{_RACj0wL`6900f9OlIOrql^B1Gx?2;{#?41$pmb(Fd`bnC_mG?fC$XTz4%>yIkW zc*Ug#MYb-&(SMR%l|a2eUJCpfb(KP?SDaW+txo%JAUL#(Ljo;kVfB38-^e7O9`QPg zcJs`VU@s&5MC6^{jWpv9T4n9F~dd?tj9?B~)T( z8u-^n1$@v*gXGTgphbR`4aL>C0VrP)G`$U0*LnoBQ+iB}$F8rPdX9X3dcWWo#e2K< z6PPo<+Za{jGd&0Wt(K241k%X6VR-#6fsd|McGRMGt)WY*W@>o$^-t_U$+Zzf*hnTQvEAzEt{otB9uZ-3!Xw_LLn(^sbYTibe<$%^!1I~c!G}+BbN^@zz{1-vey{b1GauX z+#Og$<|j=;lkqrow8%t^inoeh`dG&Wdz~NU%9zpaqbPsW&ku*w0Wg}O&J9>KE%#s@ z8NRm}_{Gs{o>#aq%@DE}_jg56y=kax|CV;=c%y^Fk^ZU#P(i0X%^#*7f&^Enur|R; z>UhN;oznq&*T5=Gdn7U6rj;7muzG5Z$iHOg8Fbc(YW|x_IkiMDN|B=o42i`^ZFB^z z+;~la@CA@-L92S44LzO1chrkU%z69Ls$gq0+9nEla6cZqu(%3t#DZo9oNVX znXb%}&w}PK%2pa*Y$7WKo`4k>k+E>~oKXHdpsp_4T`lQYGQ;8yf6j0vz(7Kh2EJfL zcUM`Ud5uP|^HW<(Yl&qAKT(al$;MRta&*9Uf2qmjo>5cBS5Koe05g@rqO5^3b|M0o z+vIUYiuwUbHO@-Az2Sh4b_BC(Ss@?a@&HCJw)@^NO#O$W!H=Ha;NV{00?fuDmsqAG z4u0;FG-@AnA_VwoskqLC8BgXC;k&M-UkRt*wUylElUMrK*6ClL**qJLHN0qNdXztB<@&)hvIXC<^;_!YKF4m)UP&zP+4A;0-)fA1`uw4}?yZ z2SO>-eD_jct9$H!RaN~!8=AXEvL((4J^?E1I%v;zTE(TTE8i zNUsLk%;MQ_CxsSal!ny65b7jwG;@%dboI^15a@RssGPsL%k7n!wM0ey-7l0(%wf18 zVb%2EZh}nKs#Q8`PBY^_xOwVF(~wS1O?~7I`A*AWL%k4X;bEy63x$%tIYZexXS|sQ)p^56l*hQ>=Vr zwenG_>gZNnS!czkUyn%fLGox$)a*2Un~m@S6}ed|lzQUre7{El!Fs)qfbK$9iQ{iF z;5&0Hq(2;qpACPv39_tE$n}Sl7lnrHI)JZOZse-vx}BYvk~=;X`GZ*9NoNv=xf72p z5hCj{^fXTR@{v`ykyW+Rq&g6_K1_MF;V8znaCcZGm0d}5a?~!@NZ>xIa9fp1Y~`-J zRFK{u`f%lff?=(JM;BU5rqrgy|Mo`gu<3lskX_4|IallSEO9cwHytKQhyW)8r}nD* zr&@u>bwGf`?^y7#1tqLwgNNrecre>7G?=@;AdaV4vfDQ`tNUTR$e43gOsxTV|91VN zpr7?pY5UVZ;CMk^xB;t^YpAW+<=5!!@W_@{_eEdZ`Y}9^sv)P+*1d|@Lt&+Ej9bxI z;_%^=vy+_B*wL5G$MwC@$?0zS{kDD>OnV(~ei_M1Pn(~J#rFo#>>_gRNZJ)d-#wvc z7ZF7VP)l;kH`&hPP7NKh8XRdZTL@yF)&+?443FQrkw&o<_Y8K@NVlE_GB}kd_t`s70dd#Y5|kz zsb!84?eMvGy2#yH7)~?Uso$n?x`hX{BJU{7z{QT`q!qFO+qsx2^p&`28r=5Jfdm7M zobqEC>Pg?V`6>;TO7aaMlHH&Y7WZjr3!Na5U}ds5@0?A9_4EX-UF{72KEDs<`9FJG z_{0ij8f#5Fs>!;cN!XJiV`a;tE+}CM^kV#Ue+?Z>5-9<(sv23Vjzmf%g zSTubLh!=Qwvw-UdOhfoC4cPf9#?!Nq$*+lM^?Yan!O^)7x<9G;tc&jNwFzzV=F!GG zJ?9m*_c+-*Hd5VW^?zUVCgPvGq^yOG;3Ya8+1plm*$L%u{`pY| zTMAu@*goS1s8z7k;!G&_n8^48Gc!HqRP~bh7=^!;n5mh$KEoS+`o6%mFyM$wnu8gX zpJbItqG^z2L{t7JQmeB+WrNUI+AmnJxl*0BzC)qhJ%q6nH;@&UO z=)cDw{9Doh%NHp9UxK%~Kl`i(nBcqKXq_(*hin^M;R6kw(H&1XQZB*pwGl&yIAWbf zw-sDl;3?{a6g+1X_EI0)TsT1dqV!zSdNoQ(<$Yse^GEu4T&sk%lYJ`!%M~GqBR1%j z`|DkXMSx7-KIH+_LlCYCYftW}^~+_uUnIg~qD7t}QXrOGki5+7%Bog3y zWp8TA+a;z7RXq`LM7kG4~?zE55^o0G_ zXZl5P|CjL*|5r}`pB~izXH5UUH12-sYySny{wL$^e^=&mvak?weQo~$;yH-E`1gMx z@L$mXKV$6w@u2>{VC?^N&Hs^wmgDP|(zCL#6S4dwUVxd2mHR)%*twa$2I{|K>|gl- z|Aet~{zE^l>}+bQ_H~_KRQdnF*jc~8_y0+;vwwvP{5!?Y_7x%U?-cugKluNSvHz=( zmg7GX(lT>#aef{7-{ulG>sLC!e>s^hyGic zWqI(lMO%=8l4Qi-sIKrtzr`iM@z6&c@J-DI9q<+u?J(0IvjR}mk^6i$zJXw1ftzon zZah`4OA#@oJ$+8R9ldpO9;=sD$lI36XKVW?r(&b5g76eXC^tG`W_-p%zhRcMCl{kt zP;9bXvli@rgcsOXYio1_JG6kl5Fey2RclZPcAnqJi4Hf5hKf0*OzLvIce@iN@TH6v zOjg@!{g47cdQ@7NUInT;wfJi3%K`i?23JB?;nW3gE|-!;6ZA>!tjcP$KMXw%8{_Rm zd+Q*{xEx74!)Ju}x(s(4k|U7rs6~}X=2Pf3bku1DlLaEequwR3mTGj2(s1h`JQxNK z#hT&HC4BjPI3ZiVv*#5r9Kh`n{%H1N5dYgR|h3Y(9)?h?kl7@ z1|uq7)NsYT#w4>Y4oc4>?qOczB;$Sud+S)~D;~$`P}$R+{Pvf=xPM5gWo#_my_Qn7 zrWUujMtJ*7Z&A!m&!Uh!xH9&Ef<8(sx(St?XWiw*OS-U?ybB=z6NzKqh5@2E3>{ls; ztH@F%iwI& z|ID~p>=$|To=Wqq&roGupfsD2YmG^f0*ON^hqY7{)$1u&Y|ZNt%HGzHbc`-`$Kw$p zJ+?k}KAkwHOj6YUfZdCNF-N{2+1%t$@e@K-iGNQ{Qd2g{pxlEEnbsWnkEk~@eW9ub z?*qV3jXS-B$drLzf}oj-URiLIQ;FbtsLY!A$Q0+{Z_YxxE1^&XeiJix_1K9Bm{pSB zY(Z7^qRi~8(Smjq?tl+I^eRbH=eJ$-qA9T#Qw#QuN(x&(TK`67)O3=3IAP-i7PyB6 zV6kL&S&Svh8e*J$$=zH(O;Z!T%UGEg^BD$dqHt8mlhA5Si^&;oAJKS7Fc#S`EA;*t zxFCcJy-+&jjd362{8?GyOLoJ)qH$2kWxa)cOG&+$mVF2VZgV~K)Tg`OQC`!m2Q!&@ zKEa&KT#m*01#{>*icjtG8tPpGKKVIvYKQr$5&%OhA)yu82W5#!1WMP51(64J4W&BV zGuT(c>hQc->7fa^3waIG)SQ%ZqmV&UQ^x*>WquF&W+T;rc>g}~VM;z$4Am+)eY`Ie zc|hWWUkO<@)}zds*H?k~!a_wM+#AJ_ubOH>N;LD-a7hvg$lw{BEnZIFl)ZLp$!8#Q zisTHj8JTR}o8g&Z*9$KfP|H}Xt(mwczj{wu6)!mFJE|wCK8F}-{^clgX0J}s6D?n? z%M++;lRCMLx$t)3p2{0&*EejL2@_ALGi#RalIjxcO1&z)oClt{ndF;9|BijEBs~9H z-Yum`b*tSTgxIJ}(z0jiK+G=kCvJ93yj*K!q3vw>L>Sk`NiatT%|dW}%BQR=XUjO^ z0=68yd83f#Y(L&nk=@Lk^wL0N6+5RSH(&nelQQ3$MugUNp4wU{uc%+)a=NOYR+l<| zOtu6?%z*paDR+zZ+4EIK?2i+<=g?0!Q0}PH>w9zplkbm6-5U0b$0r}J6AP&~_yn@R z*>%CfgN_S0UyQ5DVoI07MWg4$#e3^~ThG8PvoX3%Ig{j0LH)^V07IV>Cz>gg@grXT z^}6C4@saWR?_|RGt2zFnx8eAC2ho`RX!p~ndx=-5s6k27rNJ80+B)OT;F*J-V~JvI z7o-zCrX`~VtbuvEqOcRVBZGle6IT>#1NA!gi{%T%mRtf8N_Ujnox2z6a$zl+4>|Q{ zuZkL}C)$sPSC>#U0#$-IH@@xLkc>h-g(O3y<-Dh!VqWHkOJ{$*0iU#37XHRMstpzy zW8li+?^+|yhK^OU$8XjWv{0*xj{FjUWgz5LXhq}=OHTfQrPH}i$FKd!y0 zB`-8duu;ll6T&4`m3f$Fu}pT(ERvj&wwID9o+-9>sN`v!u0AikJM(U5ZclGNZ0B{k zKHUP&%w7X~jG6E-acek(;d8OWaNweoqLX44hY^Nthf`(Q>!$gel0RYLF1lAxPI1d+ z*Q7abb#zhvVg;eRa-JE}x-kg+c zaEGnDyw1J*`!;0^1--KiByTS{`Q~53r$`d+_=2-4`};Wje4>#n{^8Q~%2L%q$ag{D zo)}%ak9{~|VOZ6a>B!5lLw{xgGo$}um{Ikq>GBn$Rt9$i?gzMHJu6>28NjE#fQWu_ ztTtGSuUlR@=Cbj)S?3tIh_R0!O9I~1N6_3f>oqVdeZ-%P@N zbCvH>js?Ha1pOj7dAhm^I+865n~I9`FwS)u`&Gr<6v|^*boNwdXY{9Yu})LM&(+M> z5aJK7?wy#+kH_Ej^nSFm>|5lG+;wdb#+7`y|A{N1pmZar{27Z?yX@&u{PcBN2hrn6 z78-v)b;pk3-*WzOT2`$r*?`>iRn|L7qqT{q+|f7RKk3viN>cLEPmO+T40@dpkK>~! ziL!-%b_Y60j^V?yzrJ?lf7NF;yAT+dlP-vY#whCLg@C_8zM5(VFbrCWs{D<`qD#`| zj)l|RVBzZFp?;7>tjG2A%2ViQlZ`W_xDBkG?UAIW)7HGKT+?B|)0M1^AVUN^mO`C@U3#g!;~b=`?uB znwVaMI3!CUyuMJU@-A_6NV|#JI@_8({h69$lo&F=%CL!RraX6-2`2VdK`Onr-~ z+n;Kj#!0eD&MI$*?pWr?>0~jcTg~pRUP8WWRi_Zuq%$10i2>i|RHtw^MPt<*m>ZQ& zQoUaV0JJzs=iCB5lyhr6`=xS`E{+WZ_@zQ9;S|Ivqp|tIi7P#+Ro}cXP)oNb>kwL2 zFV(VH$qt(sXT>y(dz%>QqyZWywD;WNCdcAIkO+u%;6c+s%4{TpJ;|A=IdbeSJq1Fr zxG0ywd0 zprjdpHPvOA-pwuR^7I0!vVK~bXj zOG+zrz(T$umN}YT6&JLmEmSDvnVmD?b;7c}VZFEH*ds_sGs07i$pO?w?r}BO#WVuK8+H~F-%tgLCUse6yd^aI4^E1n-ig+I_ypZ7) z8%V_+=Z?h+=8g}=QydXU92}fW@l`4uw*tB9Y}@4FzOd{`YPzAsvo9jj8$hj;Cgf!b zXa@2W^e^o)RzyovTBGv_BhJADenS=k{QXE7bS>-4G<3jS$U4+Wiih-p}rKROqG>zY&%Ev;u z=Bp+Oj~W3H@wrXCXjsw3BLrp?1BmQ7Xg0HreO)8A*H+yIeq~K}(9C2vXZ4BuTgL~X-h`6oLE~GF&u4^>7jqFi zK}O_CV`$W|v-J8dwV@J(THIu89H*J1uZU=7aA!?a}OjBjwAKgyg{qE+y z&IvB!{qVLLErHF? z*uwz;Vh1^obfjAwytrAoo0ujQO?j9w`Ir4o$|_a3jV5UxDIx+4WJYxB(NRY%$EL?N z`I8pe6-w4IZcN6+kaNKjXHkX`hrREUz$o|oGAMnQr{#*yPS#GgIM+^2S%z>*3eP$< z4G+!tmfK|rMNG4J_?mdYVta4is+7E8zP)IEUGmAsZ^OEj=jY!Vh)%bUF)7n5Y3xr& z+w*mgJDrDNjJe&02KOJdY6ADirgHQIF|R!klnQ#aTfPb-oafUsf3NUPw?5*oy*#$J z)Ng|&&(r99qFWor-eC+`Z8>XoHu(U1LjZ)qdeDPYxJ|Ge5 z;h3~Y@oy6%V!Knim%0-Mss>2H#5YlFPmfQqSUCiCpa;SCa0z0VV;m~sX-U+@^fA3O zH_k>4?mb6d)9{S!Iqh5cthRBwNFTxOyy|nse9iyTsJRsL7@-yxM3y#VH+7GUXz0ji zS1-6`%QcX@ApJNuZ88>R2aEpodS}B?$-lPClmtM>LrdCa8X+-iTq~%?!E~w`GKzKR zO{0g*hj3ig6wn{7m3oVw@Vp`=iP|Gv* zNq8wj%`#E7*-=)?LAwP3cQ52p{w0z-LZIxXqc~TMQBIx@=Fz0!1Gq2sxX-k4Ao?a1 z6SU2v$u%D972}&X<6QjV5FF7>#T1-S710ofYwFpl6Oo}+Lnfb7bAvi0Xz95q->~P? zBgWqsii8C2{VVlX^7?HjcN4vRaGSzbI91hQwF7Cv+h7cG6#36C^c)wZN5#R zU!_t?lH(7VSY)dcY_i9r^}O$yZ|TW3R-|x}qNK#MMJZHX2%GhP%=6Po+3~ zBOs-EKu`SwT6}U6uAuO~{nE4Kjin_OQ7SnHU>vqGVFEBmiyLUlUaXn^H3%4P0SlRp zEagKsAl4wIWbP?Vb-|z|%zXKDJt0Zds3Izf{KclyiBMvSF#tt1UhQKIYvWAK+!T$YjI`(m3TEyn_{1ZMfOHw8}DxclTuA~fpeRgi!~h8NR=p_ zaexKk8oeqi18e|zRV{1B z2EPu^;KYdo1F>XEIcjH5(B|Tr6b)E;&Bc_1)FjU%6VsNJ!huNJhz1vyrP0Q8Pb&Vb zQiqJ+JL9F!)+rI+J%*`$HB_>rb5uN-N_Iid!j$XmxG27<`{x5#@L1=|L;(xnmoFp) zA|{an16K(_xhQnKPJaq>sGGB?L*d`d$yh?Noij7~tvcL?j+G(dktvMm`mze*Ahf(K z)Q%#NpWIVcOu>H=$_3h4gT1W&^wY{n+i@WlocbYZnWKXdJHa-wD*b7rFSN@}V(z9c zzrmIO+(-uMb`FEd*e%No4^mUuKjlt+CsbaFudRD_GFcA0n<(`hr&Op-oCsvkR@2s- z`)c#Rf(_Y!x85JN6+plOGH$6+hXAz;ZcNY;W)lAwLe zs5gX91J3g-PtIWUf7b!b2eJ+Qn4Y>vV!@oY$IWz|Dy3NgXhN35Yuw(UB$U1KDnSn?-^}8+kVFBR9QqH5`B`|N8BiJa-N@s{uAKGaejPDAl)f zftkoMTd}>`&qh&eqAQes0{7)h6i~=0t@z$JpQy0Z6q$kgD=Si)&*t&~Q&5}N#dFcM zvo(2HO{Lj!SjH+6jQ(`Aa*YA)rCH@d%PLZ=069S{cpOIsI4+mb>C};1ra7@_38U4? zFeoVl2S*&Es2d&zyvWdrQnwzB+w|3y#G1Z!Tg(&5pw3#tPq|vAw*3*SdvHO-=O8(O zJ`NAAh1>@@k##)t6nBqx^8+y^yhyF+!v8{2+!kVmhFAM1rMUkAvb7z~shi!h6)feY z!BjlDmfmPR~x9xnBrJ~jVyA}^5yqc(jo;C3A@#b5^ymN5P`xttx#I! zl~u5Xqekfr3+O*H%w5KKbn7Bm6=@^;i9;4RQg4Vit97>)*T^m8*zhi_oK4?akEge5WQrTl|%=!KZMxEF=nlV6zrBgLBnF$Rl@lD@at1{ z(5(4>CFR`Gzk~AqKw+VWk9`76g$5JxIfofF%pa_R5FesMiDP#kmj?e7YmIl0w@8M% zBprwosD`1()H@b7t*Mo0%ID?5MK$6~VrIIaV8XN=E1|y28V~eWFtH|SHkuT!y7aE^ zt@lsh5&wzsUDOzG)UFjR!fX;0XP z{@khZ>L=*jXtpXwxwo%M_kC=M8ubA@B!3;TGqW*Uuws`wv-?QIH$NHgoHft-MiH+s zXDdf#;hZirr)2?$c{(NiH}o0p_^ zSR7XL_x!+Ofe=b~i4ttSOcq@)27`j&KleEMd3u7fGt|ye(%^InC=+OV$L$e z$C^o(k2ZtVLb3<7_`3!m2Hw~k<&7o_M+s*NNeDqwi#axr+j%MKQ^S}h?ZDb9fo6l2 z6Ty7Q3RS|ep|GJffi%IG%pQo28_h1}>E;26z+Q@jm$V({o`RQLv}QT%g<~8!=X5-@HZb3x>!MsjSjpG}BX0P7aCFUxDljR=Wb9!I%O;OcqRW?A*BSxq8x-gz%SjrmD_^9%r#6whN z+t+o8JAw8ivEG`XrXlITr@${E|1r?Pirx(H@z|O`8ihmh((@{XONAh-c}r(8 ze$0x-$6oi*%L9vV+593mO`ldrr15UF7?R~=Rh2!yTmC(86U{6Tp>tfvO3?R3kwOte zd8gCaBSV}=J0MMaG5D3Z1!Z`Er?P>Td>qRN&9ot36FfdRSz>kuM`$nKy_~6!D!Q zFoW}&$T@dd|9;!;$~a*kU0FHnmIhznP;VdpecaI${rYQoNG|-v_KJGz^s2tBc7c83 z(*8&G`bJ1i)MjD7l89Kk?UnFJAmb#Wkoj9jlQ@6*sEr#^HU~Z9Antqm@OrfBa0Hik zs_`US3C`v)dLamSsk5rz~_*-kVkCn zE}3>%3QM(_$yNDVIjnwEE(3-taY7DK9f-*QiH}bp)55b6*q2e#m+?XcDOq8xUuHgV{HR9i7pKl0{FN{l~NLEx(_IK8Y1Xu`V9cnkt|bbz!7i25r+z?%^5`q zF)WUStt~nnT26i>SVuk?q*c6aIuihB zHEt>#N%^;MrYwX-Q5`x>v^meMf(R40$c+2V zy0QN<+v4GrWh#a)Yp~}uc>auOuoDw0SV@?mcL7NVK&WdqQ_~HCuBSwBKa)x3Q7GSF zQKEh7y1*gvDk^P)_^Vl4W|h8M%Vs~E1}Kl+{$h;AJ@b#rNSZF z#QxQC+|}|&^bvbbEysdZp^1H1P~19-O*vO((WqeWn_jbpAzo{mVGH}p2-e7YD!K&+ z9}E30%`u{lE=LkXZEBS}F%AssQMM{Tm8_wzNmLEsuD+U{?7le4c8u84#ySyuV4=YL zl0t8Qjg{4yuh7wWKs2dqjWG9@!AzdUU>J0lii`gVVtm!4QJ?YlM>_;;ofde8XMPIvf z1C0U9hwN-z3y4W}H)7lM%bv*i1!yU+SKpd-D(@K2vyYyE~v z^eKlpC|DDqh`UAw+nH_CYq8V1vMLT{JPHzBjBS8_gO_y~2SM=@p9$reeL9fRU!jET zMqV1SolTaQ@>#{PT;I@-{$~lg0j}$u{%&wJ{Qb9{B4=qZv!8@{SkDj-tjr^WSb(55N%n+jeFwnQmCi?1`9C8v;ZukUy6>RR#>%u)V(@ zf`$Q+AGV*5gbV}_AYvDOp(B9#eLn<&v*4Tt8jBU?9t0Y z^DTCmdJo7J`rccw0*)^+)O(AYq73tV=McHa)?I~Nol^kEmL+N2t58tiJH{sefxR6J zoh7{=fT2>8GuVoR=AVqKCyC`>TM%(3fu1MTd)k}ij51B`7u-0k9I&VY(y1|!&L;N} zZ&ik>A%g{K4kDPx1N+T<-{t}8xqF{v2R|dAR_@4ZMQCvc@6_o1ul4su|J+*QZYa<= zd)u$YI>JASUFS#Rt;?iR1(e-JU;5B(3y)psUJA+T&J2YC*o$$x) z+kNGh0qV0xJIPJp?iliEgd^OJ0aFX$ouMfpwZ(@OT>IUi?%AQ0r%Df0(;BtlHGOW$ z5)M}%|Bbb`fQqYG^SyDm;BE=-?(R+?xCRUE?(R--cXtRb!3pjTjazVU>~`LJ&&;{= z&dgc!eRr+u?%Gwms-BWny}I|Woc&M?4o!J?4nTT%4PEPR_6}cd)JY`p6wOo z(LWS*_6$JM2mi=*#B}Qg=*Jfn^#kh(d4v0Mq-cnE>5^5p1!Y~>;eY1b0>tljY?XSY zQY=Ayq1!-2n(^s9a~84>3+1z5dz3l`zf<#Wydk~3z&|et>%A!H0ecrgg(NAI^7k^2 z0wM?~B3!~-{ycu7;_!~t{wbtj!(IB0)C~DBs}2xch4D^#Ls*adsLQln_3jD)M@F4R zxty9S?8P~tBm!t$4FJ9uKh@I8v2fOW}Dfo~NCoj5s*_CFkZT#`&9 zJ~kYSd470I2&FovxFngQJ85)|)Q8Slyu<)fJ^Ia9_4>`7_9}6_L~nk1m^r+~zC`4O zdO>eZ?Jnr=tv!ajB=977tPb6pVY$OQ$=el9-UNT!nR`F<0aCqh3%>U2Ki@w1^_BL# zL+1MKPG}43-v{Vdqx4?x17s3>4SNP9w=b6pz2^2P zy$kV>(sccugkxc6{%08KKUJ*xpVEz7|Aml}DxIq7H#<``83s{1Ym@&QaRjN9{70(o zucUtnt^6M>i;WE=dGfEcMf4IUEQ6UbLmmVrQqGL***||14rVO|6bQ}VgBv*#1>=i3 zV|V)`B^@JuxfJg9nvxk&@U+a;VXL8kwQoEzH|;lXDm3lpmZ&PdF;Arb=K1B+1-gXN zB56Le!$!-(a)PJC`^9+~^Ed!9@LsQbwo+ zzV~`%lbs`ZN?*HGb8Xz|kDD5=;U%+(CkziM?6@K`g{b7nEcS1*CtdFuz(GF+QOS3@ zZ>G+7{ax8yKcOZb6r@MI1DEK{Yd(q!&_V1h)gb68Ga4;@fcrHT&W`q7E>9NLJj@U?9K`bB$MARW=XJ!Xou#oEg zku(Cy8F6rd2uDyp2(A1R`z!nv1LcAO=uS3}bP*>h7c(0I2prb=OHPOjv}`#*A~_ta z%%of(#Uw5ezRSkK1*(*t3v>$yD2WFo=EDV&=i%Z2sSdHQgR(f-{*(s2b8xaCaBzdF z1U0G$k|g?50#r38s4{l$Kl()=EhP{HsRxn=`V;BY_&>09g!bNbjGy(Z7c7?=%13 zaHIcmvi}B;BIq!1fT{)QAc4f7czAd~f>J!(dZhn_1`-Q1s7wDuk8*(UPqDA|(xw*Q z%$*Uq{zzN>8$J4O#OR;Yf7d_!=P$2R(SYOpILf%K6rY2%sKSRDL(-&RCnZfo%0;#w7X>DexL!1Fkg+{X`oq2 z))TiDGRpiGlRN9~yBoR`Ztea(ZrotAK^A}Uf{&ccKRoOpw?}b<+44%XpjVuHY&xV8 zn<4kh`#pIPO+%m|pCSk~cH?NkG0L)(tT5trbR z>BS#;#dlUeyos(qq9PxD&=2E*opQQbueEt8URc z+#SA)BriUc zn(z&d1$|T;`#PQ_nVc#oA|rS!N!Dvb8iMAFd}=|727}X2rW_q16;+Sy9{aq`;~LwT zk*A3`IY0NA@?(zsiRGfhIlAwbPjBthg`Vr3=@+t^F@ly0-T{> zuqkq~6j2SDf6oOuKXFrc_lUlt6kA}4Ra*?_Qnx(r?cp#X_YSQ2ZHst?9pNypD+ehexAZH|r0K7oo&}c=il>KT)ru`c{}(Vjh_!)&W(}5 z5%t6pn zKcZb@R#ZEz)d8+LfYH%fM816@Um6cmJ7rrxu2o__w5b_52eHoMa|o#;k}m5i4co}XZExnUY*t5KJrWb7KZ|Acj}X3qfefGUag(PraT&7lp7$L?9a;qBALWo z(8gQ-hmE)D?gCjog}1BNM?Bcmj>VjlVpcoRZm#S4D5^VXY&}c$g`O^r zB362iV?{=_TSwvz1x8oMsQSYMWHaN#dat<@{L?y}VZ-=edija%Zm4==O+8l>IGY zScBy^4d*VCXcO_$Bh|93WiLftvh~X5m$zA}6$B$|9vuYHLTfyoc8%yo!APkg&cWd= zT8WERt=LV^M$E2#GqUzmGqKx)>=g4c8_Guccr+u>(YWh_GMAS4VTUM!Vl8%jTZ5g$9l{9canVQZwk~Hn`OQA7CM?&C1nZZj#C)ENt*!B~cF~tj)a3*# zjK2kRR4(tiv+!LN-#p^P8tcUt52xQfmhCnVlkmOmI;?maO-9fuzPO9>QkGmt0r_BV z-LUZ>W+1J}bTA*dVI_!y3MT`@3k?R+Q!kWnvf~=CIpeA$bFG|c88cUmn(?A3GpR>8 zjRGe~VXm`{lDQSU4Zfe}J;=b->w5L#Ha%nZY%qA74U%!TIx6q`|0?+9n+%<7X{v8p z#;SZ=>8!y^H<27FJ8qHeQV)~jyrg2&zgz^XSDwwni5Inaj6BF6%!Z$o>4Y)LO5DoH zCDJ_Fa6GDPVtso!tW8|6J}fAc4H;RH6jY&;7*v@#e2TY75vN9_^o7Y*CMP^viMUoj zI_zNYN}88rwG?8pG-pmkyF=0MDCxu5buLPJG^qV*d8tUOGj8esHT+q2OngU9dW zWO$KM;jZ=M;8V~Ce*UnqZTC8fq3hB3t0WTpYo!d8w6k#7DSFAiAOvqA&@X=Iwm7jGFWB#8#Yc&rfdeq(rvnjgoS@N&8SSCe zAf!$-MZT4E2XFD=b4OPAC$m$!1Wp#!_s*~rYf3Eia$h2jw{rB>vx9TTQbG*R70o+T zl#KS`S3oP~HTq*%$W|cU46y@DDj*kUodH_C#%YJA0jlNT+%aYlr{>u9yxG}6Lbh)o z?O`bVk=gm~@Vp~;-p4olv^w@RV8rH0$sh3;rLKGR(iYJ>5oVwc3K zurWXw`GQZ*IS4X{v?iyN2>x7eBy5dW2iv{?TQgTXxk!sqhfJNu2dHQx>Pj9K3l3Sk z3EGFm(pd=fT_XEe29SJ>?Z9nSA9itu?>n3coe#T|;)Gb5GXp^Pq5_m&@ZA$)aa8&G zQm54cp#Rrgf;neRdlj0HThkepx|DhfPyn^ZvHGxo6GaJ1+N5p{Y+qL;MXMzpH&g^r@O_3hhbC_-k zw^Y`3Cc9%L`< z(Pu!=t>y`b>};-oHt%^c)rUuJ?WZioz3hJN39n#V=pu2<}o12=<8Y1LvJB zDBC4$H$B|Tb$rp=a)bd`b7sHe?-I*}*eag#_bZ+X@PibTy7-K9*>l8w=|dDZ9Wmc{ z3+@B|65p*TAVzZh$l?=pxpk}qpt>cxq|S!&Mexpe6A=OvDkKTWJ#~+6R}CwZ8{Yjc z`iMB>Pv!4d!jum8B0F509(>6qulNe_?H8MB9ejXkSX1tKyI)MwN&(L2%CIECo1`pvR^=v~Tx~BY5&v>5-wV z#Oem0+{ENtA;gaAhfio|%|>}dQm@=)mkHj?R|R>ZNu4l*{Kl-97wE0Ox0|@^l}7qy z7a4JijD6k9e99K{x`K_(E#Zv0#*J*?xiQRE{eG2t@f$yRL8oCp^d%O|~lE%K$# zDxkiMo3>Yq4Aa#Q>)#EM<_Q#J>ZB~)IV&f0D;+y`6#Y8WO{3$`He%UGt0*eg#zQ=C zH!7%+rCi*%_=$DeoA33&E8o%S(iq&e-`4+!+Mwz)02^U{}@X^3P zjjSWx9mV&)Tkl76w+_;OBmw;(jMe(JiZ8z4WeBXbpyw4&)cnz2|ut+o?iF95Nhd*iUq-t z{xJ_Hn6`JxhdTi8W4zSQm#QlM1;srAH1!}%1e3$N@-32Em{)tR&k5Dke7K)dbw=+o z@bP(ZpOk;!Zr6WC<9S?JYmjY&4iM&sNJm9F#~IDRb-`h)E zJCzi7LdI4!4gJ8u%JX+VC?GT;d6Ha`bGeRGC^Ro+QvX z_IGT)$J5i^#PwbXHI?`^%Oq?S@wd}uw`pbK1B@&2O9B^py|Bwt@m1l+LtsYZJ++by zN!j2>d3l$JJ6%q|^P3#328!=-2{0}#-C!o_Yyz_zT7OyZ5|(k2|NUVNo*wnf`@_+@ zDw37qt|m>?rMERwrOC{uJ+$gJh8fDiHxx6{nC?I~d#KG3jkF%*OM1mVCSVnnMy}Vj zb6WMFmv`{1a4DRDfv;;Pm{5c!o+{wUIw-dtT>s26xF^tHwiHD_()4(QA`+k^1W|iQ z{y22JtN(a=ysKR$@ebccWQ{h|M{)ZxRoeZV!wk!#cS|2?`=N6WtLdA;`XjB@+53FF zL%sSh$$-MHFy}Pg&<)+dc2#S3cV7YEr|oV$K|+JqGl8a%)h{$9I=ljm3xkr4G>?(D zANU8~i^O^>n`)bEHpV*KN`Dloj}7nl$T0mvxx%I)xImsVWN-0bBAJDs1^qlwf4S)G z;kmR!dC7!)Kll@U$AJA|C~)XmExZCNI1^*yuxycz3Iw~Bd@Ib_9x zZEUzoJBp(x%y)5+s|?G)^y@GB#StSX_NUdUbVe6@KRtz)@ZRBoGJdJ_<8<;iYpuOPQGuFm>%AV4J$* z3_6U1s7{O2@ChLrrcs!cxu)JzhSf`#Ev0o>3X{Vk)6+=SA#pw5exP_L5<`r&Ezyx( zCTF#%rKUb<=Oc!U*zKWK3FV;ZekC)45`6iBOgUQ5$X?3goO zfEE~?%LxfRy+J376bUDbg8*}@8;hJAX(#q7*D|8Jm>NxL!o`Ro*wEvcZ1u6$kydEz zTZk<+G?8pdD;ZW_2{wp?D*%BCf2r!_ z=d)kkGQmd2^1;@g;m0>o~cOgbrKG|IArP+fJ~4DvlDKI>Q&HJjQRt5}17 z&i;h0-oo+8$@0|fBZ4@<(pL4!K5i)hHAj1+#1)W!XagfTRCuJctFwm9?!@wSBH>D! zEzYWw-kUkt?sH748kOEm5z*iojt?O^Uj<~8+S~GsLwd%#Kv%t;W!hl?8dNBfI$y;{ zbL3<-CcH7Js#dpUXN#=)3RK0HNNkQak4^MTq@ENyuRWpl{7*JpAuPPOB;WT|f8veT zE*?;H(#a{S^eLRR8U<`F(B0LD=r5d5>^==5iUKVtWv6VbY@+~c>PkU|aKEBLgqR3W zs2U494W*lrI`?6`4j|rO*GdKTjD~;RK@pZ1Yy0o)$i=4MneBNb%+}ex1LI z<+W|bTF@iq$T{-<$>Mk&gsxFa8R@{dt@k@b> zhwkoAWm8c#UFLWs4@&ZnsfzpiBRA1&ir2I<>ggt0{5ghlKLwUO-=#m@BgAQM%w&CN z@7@qq&*^Bc*6^7f5Hs-Dn)afAa6v9!0XRyzqZ;gqZnEKFF52t$#UDjyWJ&Wr5~ey6 z&Vk>C4sle}2~IB_dkR;puRR)4EgW36<4Fg*dn&QJGO@=Un$>=|4x!JF))Z@L*gJtzzj%9udDquU|=2Z}c82N~~YAzTlXhAEVU=m7z;` z?vnnva>o2U5;`p*eTuofJPEhP*~K>bVTwM0 z7j7}ns$OG{Pg4cguob3d4z-4}H(@9P5uB&xiNyIrQ(IHgadO{82@9W=-}8oPJi8~! zyYjhz^p0;a6|3$Da7c%<74LGMI;6RxM=0+6j?~#}rLm1&gX%y#fm+BzVu@p=UuIne zDbHb_h|^4mAH7;TmGThF9xg`{UWsSyq_>)8zfZ7`NLiUng zrn4T#q48V)RhOiut_6>w>5$Y>kQRxWno?))p}D;FnuGQgwJQwWNmXh^t_qW`Eub|B zX_RM=MX1aOvWyg)%jL6LQ`5m-|pr|803V`ZvK@6cehDAGMBqMD{S_DdT+25@W*V+4-XAZ-OB= z^)AIvL;F(oO@t90no_#V>2@;Vk0TVz(aWovY9Z?DSjR9kUK-2$XfZY0{Zio$XUBlx zcC8>r-ga|@qB?#>K9RQe?e|L}ew2*b z?~f#hCZ$$Sp#m7k8#;&oMisp&&ls)zp{}0ICuyVO3FsacG*|;tR%R zE<~?$1;COk6gw%MqR#P}L`iY^I+#e1d2q4X+S+8eo;HJ<^p@9yRhfq34U3D1%7aWv zY4E{~2g$4iH<=GTaqKHQJ|T=4Q=C!O0j?w^He#Tx8}v7gaUAfmzWu_%52UMPkn?vfBY^_l$JF?&Geh_LS^)e;+=x(^^I-tm^n^EkHqJ zHf1Am-$P_9^Ka>O%X%fGFyj?S#yFivr|FY4^U>Hn@pI|Dy%ELIhlAibYSe(`Te#>k z1*`xgMKZYPK*2iJj01`^Y#LnJ@2F0wusE-bml)R3$ArmYSFpKUO5w>d*hN}NYb5%v z+ev2}PUn0M{Q^#@?-l1u3j2Xyw;Lm@aAN1*uEm>5=)YrBMo3o51^w=#cxK9EeSV;_ z4;lfvUon}ti}+D5I$)ii7O z#mE}Vug7@A(Qy}iJiN3CFp4_E+~$pKOp4549EmWK#-CE*soEBi3Y>5SqsN#nR9T9d zGo-T1Gfc*)nF|N(BUNB)0fyYVDhd3$*n2yaXu9iP4(>IS>wBtb)xn31ai>wslE+Bs zJ~Jkv?kF?vj*y-xY}bW@#3t*@{00m$_s>?(Lo(`wJLKx>6wdV+3uW#%e^oS4=+fzgx9>=&`?U{Fc+o;EHWEtPv;a>eqJvLVuQ>+A}=l z6mS7dv0IP=fBznS81Eqkq4?cGDllReW?}NTYl}x=WK1{2&l1Oi*01}nbxofRW|0jv zoduoG(m;R7lb+9}ucSG@;Yzw}>^`qCc5cSRj zuf{{d4$zv;(TR8a)XSJ;BHJS68f0obMVM!$ph~YkuGN=0Wv*r+gUh?=BugK}i8;)DqqJggh-b+|MAt>feM|V^kX7{dQAZrJGodyXbyU zOM`wisf>&61Q)1Nk?8D<39~ICvk3evq<(Jwuvd@v+}PsVJsGw}38nGPefzpqy6l zQdBxX3lA=mODG!$H z%y^tD*kBWF0xmY0RE!VL1&Y6&@Jf!{BzpYXrxM!M*xWLGg&L+Z+H_dm8hwRu-O`>F z1~hzcsdmlmkIy&0!#jFDe|)n)aXSi;+PvFsK)TcHTn*8S@87jdaBI~#0_pljkMFxi zsl-1}Eg5TYR@R`W0s;xu>_tu@)$$aj(VX2#osbE@Py70i)G5b?rD9BaN1=mSK#8r{FvGM%Gb&^5vy@7hzl3$N{IA~{m06q);UQFT~&Fs5*ldX3D?sS-kmS_qK{ z(DN@o=N4x7htGi1R+>pIZru?Y-R(NMkn(G zN~ieovkE^=ISuwK9Ua0q1*@{7=!puHHJgU!wfISSUt z_CiSfZT`n=aUt(q)^0+AgsH_EPa!XJ2l@-^Gmy8ZvFXser1@V7ECvrm8b8zqg$yfU zV;CmS-{{JE%3SCAMg>P%iyC<86MwW{kFUfzMFfVCBKK>i%q3q17xQZ}hJQ9A9NDur z_(2NY3I6lM#0(Y=#pp*Np&3V7SUXTgi^aNXq(?9zq-P_)-z-6fO z)K+<7+?sf%&==sUntJV-inuA*LiLO7$d(r%J4TW7RFx_y+1g-uDcSFaPkYN0m@0(t ztCF$>ZELbl>6bIoH7hML)7fZX&F3_k?m@w}2>OCOUuo%VHCrH|yvyX_V=)}~Jp(Pl zQLWa_qK96^^z%r z^`8eNV1a{5@+47B!_9-UycWZ8W5q<{BTwCsykBCq&*p{BamLrb)a$NNbVjPsZ8<(~Avkv%|+Gg8EJz{Q9O513@Pg6Ng zBGthb5>N=M%Fyg$=yK~4vlw3fO70VF?Hh7z9jTCG3KOX6x;v^_bvIgweZJ_3M8?;4zqsCo?r&NZTL8ZRZZF{6=-Y+x3;B03A-K+b z8HNq7lT_TA3}zccV-0hq9FG+L!C;y9i4+RrDR6Ci^I1}>gbylf4M?W~BPWOOQBW{; z-Nx-16OM2XrJ=k-92(}nsffrZdDg>D=;i>mmcQOa!Dt1zk2twe=iB97^<3by8evQ` ztBa9fQ~DgmhasAB&iq?G4by5!=Za3plYdY!2g1(_ z@-u)a`F))WvsN3}$8u&@6^Qr7?eiwFcHU}n`c#Q1)!2!8we^dPVwEfDqSbMYA&Dnf zIH-xWpGui5)WlwD(nv6D3c>eE!In`{hcNb~7dx6awI4TEY_@a8Zk_))2#$fGbF25O z2~f`146ZnNmCRy=4pzvxk8VmnS+n@Quf1gOuvTl@dt2>+`EUuJu0z|L$24tr)%T$} zRj-9kOpTFyw{LtFlSG8IpTx|1*@@Puaqj1P$|#8q@>uhm~2#=h}RH419F5EQ(zBbb_bD%+Q<6mdYi zXjZrq(Ww{EVBd&GbNU@JDaz=!qUhJn|bw|6J2L&k2yi5Cx?oKl}60lrABgUuEn;OqD^O_JtH^Jzz%f?b<8$o(dt-GDTp zC+m0Z_2=;`MSQfWhUZ7(*(WC?6YPnCYQ5&vW$0&%Ojxx;%G#;S0$AC8gi~zBs?2Uf zk?NX{ZrM5lU+;gzV;sJ@#}3>X(gA2j@}#vK2yT8V*<7SEw&JIx^d=!Rmbz>0&E61f z!q(oHi*yD$ChPvRG&D<{IvY=LrF8tBw}f4HCJ%+VNK6$rYD#>nwn{dHJ%h#GJUsDK z(dHv8<2gvt)u$Q?yPrw=0QZOvsn72&WyInPEehe6ItJwi@I3!&An%uYIP~kX`~Ehk z{H96FP0?=VS!1>BF}wXn&`32T;=*8c_4V7=6TVChXCbtJ$`r5nW028ifv4OFh2TbtvAe5}S~p%h%72rq^tb4M-8`(*3%Mwbmz zp&P|6){Iuu2yJQSpo!#o+I8(c{EspEvA!{Am!gWD<&HT9$6edKG#{iMDKYKVx;?_q zey#`4qAo<-35p5QgH};LRv#)-IW7^mSX?w@=AwHj5l=x!!baN6u$|$K#%k(_>_EB0 zZOFj`bN$)Q+DbzWwTqVCSm0BlWy|(kH(RRF z`nl~P1Q!dHNIMIJ83S%pm&U6zTt=Hjb00FL2Tl;59bxu>Hd_6blXz^08gqy|EwClA z2vmC?+}+Y~NRBaYB+P5WY^B}#84JOFVm8oY7xw%6;o;g!x zW@$Glc5JZ;t4nr>`$w0mAqJHJx1ze*E>EiwV^}nC$v7u;A^NT3eGwUzOj9{hV##R;5Z!qtjSCaz6{c*W{$kLF7+` ze;Mq0Z0bqPL2|)Cu0|f_Oa4+Tz>w=E-H{yA?sp){d9o)HV9@_6Ku-t5=p64BX6Wvb4u(_HR-j<9K~6NTEU6BMlK8;Z2H z<~DX`!mJj|-LR-@OEY;$;8yZ;!l(WMxRbf$J6K`3iLC0ckA@z5H^ZSSDnG^Zfkr8^ zuPmP<2Yta=eT`obo990RS1;A`>*CXKgmDXOUs*M_9&~Brlz~6{F0I_T;z9(Sapkd zxt#4)jN&9CEoH3mD77;r@?3rw7ZS{?M#-Vo?U0#oZ^>mji>B$b1RA_U9xneKs%Bwl z`NPfs12X+jq3ZuJiT_{t8UFGQ68}Fy_<#2^45Ent-KKv)_{<<@tp5_iPZ$IF8Ag+M zctc>Aldyl0#b*vpRJklbJ-LT8u^@zMrZ+L&?zuSPRmg)teH>pO zd`1hZU!CLE>m;9MMxI*eGGY6*txz;87Kq-YzQ?#b;v>9wVR^c_cv?FaVRW-7h zGGAojs*;d;FE7)zyEM=Ak`Y|>mO5Ee;oF*uqku_v&;f%YCa#5LT;tD*9IPpw=NmV z6m$LELowGsc_{viu4gA@`9q(xf*^Qy5S;zzlMRGrbFhI}_W$$J`wOTCG4+4){vzrB zfbGm61fQ7`M5ME`gSd54RuDBCvzd^gon7I|mQQB#?n1g8u)e=l{oEm;Y%V{|3&J{sWu` zA^raj&LjMP0p~#j`=5aG2!EVL{}VV5>gIn7&i~!jGH5{l z^^uY4zn7||%eAw?77X>uv`>aKs=YRp%L@XFEg7I$Z=SRG(*5V}*WT`)OYN=&AG*CR zIv#SIrUV|=Z#EI($*;lK3sjZl=GiZ5x1>MuCak&+rA08{wCKL!CwLGfbbB2<&EZ6^ zKEl@|GhZ)FcDg&<4qKjfhz}x*|A<^coD}eTNo$#+IGGDQZJf;RHV2oW4h0gf|7yEQ zo%Gd45{xPXIuu-QIH?>OwC{GdZK3hlk+Dvsvsrnb5b*jz{;CyyBFj<+G^hjcACzl( z4w<@}b}_cLBIYq?8MFPi$B&;Ay}CvHroVY!zZ|DBGOO|Q2K6G;pn!SJGipy1-`&c8r0b@24?oqZYb^viJGuT$ID_jB;<~-(6>1#IR9wKF1U4K zO%f%RomK+`kGWz$4i@hx2!x!z1VBFMoS*$dYwHp4-ptq7z|-2Thn`BI0cL0GpfJ|( z3~yX&L~5G6_50blr+u_D;QsM==^;hz@Xead!Q!l3WI+*&D^U^KCrBSLlDtjXC)tcn zFsf$RMWSEnvj$m`)h`kZr6|eKJoEX&o|JU@tQ0RS3R&{8C;Vf8;1M!7R+ju%@OUd~ z;rn8^s9sns-AEN=YpF-$^A}VUXQX#MtUdc@T_yM$)c8E_egVw&%``%aIYh59L1{$=eXvsI(|&-os5oHPdJ)XGa?- zWDbD0Csck$9et#nBVH{c(~~QtKi}ow=UEquI-rhICiLK{u#1=Ti|soJ`cmX8&3LCs zE5*W=Jvv*d-S#^#-h=_b=vmw26 zWV_!;b)}=2AsLGhm8FQ(X3)lC3yTXHbibF3Jf}>1kB5g0>k%0MQ_IRjD=g5E#jMFK zb0fSM#rbe%t+k_@X2KZ;xY-n?WNTh&_oBrSZ$2oBthTYkdPMCl&8dq?%5JKIE`EalnsnUJ1 z@Fi*$2r!YYu%Nz$c(CO4Yyo?XEZ8_U4?9hRCrY5>1J`i+L^Yh>^}Xm3Vr8vdI+xDk zE6SU_pV{ttNSOtu?4&T?IG1hQ8gI&wuE4rm2|KNhRv_QE9bUIV-EOD{R*izAQRpK? zC#J|-9#$K2Nk7^erIc!Wf$=Sjz1K#Q2(7eIHZ-|WFV&IJJ8AYK+2YNyp&%-W90U^9pdw#pcN4)iRvx6Ov{2KYq2HCTDEZsH`SW0el=V4^<8RQF zvv2_Tc{uC5gcV3<@)(HNJeFQbO9=d4A!C#n=-7fJ|3V8wd!(2t-w-T22zz=CNTq_L zfL(JVSD{baUjR@UP}U&eH!0wm*{KvvDZji|_1KxzncJTAmHL_DKos$kT^6ErHhqOD zkER5C3IqiU6*LAgpeH#i-a8#N9`{Edq{!_rxv_h}d@xkxsdBqm6 z+QPfuW@oE=fo13xa6i!&NV`1bUV?y&S>AR?cZ^pgceV}q&XDt8ZwZTYAcXgr7+~Yf zbXj_P^PA6^&j!ji@7dpNni4Q|gtO9e>}Sq)sR*RFWb_1c=elHQ5A%iYOeKbR%OZxc zEsFh}>6|;D&;)&D0Ai8N00h(NabOpvQUR#SRF@)v(_6Y#6z_0iNJ06Y(QZi#PxNIn z2SkC8NA*?kb;+KIw*X%SB}kI|Z~k$!7yjA38WwzKP=b*C){@0Q49KMD;3xs9sgT z+O5{ThiBM5#JjWs*j6!9zy)}2;e&*?j^Dz{9OwU01jZg#mR^0NqLN! zMtfI3S}8rQ?L&G|)b#hmPzQ*79eYc8WBlDK)(6f{pVj-ZFMC5ouMcuudK`gi2Wmrp z-mE3l37ea7FW<5P#MEAEY>=fhWDS(G$0UtYCWZVaObQ#V%2dc$sY;Y-&X_O@jIaug zs60jCyT|v|c~f>#dk+9I2;7Znzvug^D!tx&zfx9?7V#048H{Pf#-ARdw-uI}MkOab zCbmSFuw+)Z;To{GU^kj2ytZUAV9$ymFWEVE2wyy$aFtUc%I?MH0ITIo>5ujZD+i5| zBz0?WwOh2ED*!BIr3a>CNZ5Pph8J#)}(!G^PD%cgNf zxo6bO!5`I^#zyi<~4cO4n_41RZju2Yt42V&;v%U8E$Lf6Lr{3L}39zqmWoe2~IRdkfV zU!6_%4jUyp*@`^j-pRE;&rI94fk9b&j=Tb(p-JdBb>m@ROpPEc@gLhKkDAzVbU#D! zDnh#@*6A6wZRpr|%0JB?KRt8+J&UiI-gSKXinNcKI=t zO+@iwIx|(0(H7*DW*O6UYeluE)<1JE(D8ZCr32B>a38g0>DWc5iKq7w96x^-D{(1@+UO-4sr=sgq3G33GzLf zOHAl7$e+RrTO~#sFD=-={ljpyNH#K4U$^rcI40v;vYK)4nLiLf23e(zMd}m001$#Fs> zdH84G?jx4`fa&;Lf|XSjT!K-g9+p~KKHpr!K6tZWS8{D03+25v(a3uL8kXhH_`!GD zf+zv^v0$Jhc6ld^WO3Kv<6-(1jl*tSejm`yAt1BGS64tK8N}GMCCluLmE3jb?3O#zvg48d_D4MfNX;{;O&s%^tfhYy;Q~ zo}Yqjx|%{>C9N(3EfEl>UJsQdoZolEmQ2QYL)`ZqDSY?zbi6xo$?$*V1*NIz{PJ9I ziyTN9`&?SK+AbN>GfPA3#}M5z<598-w3fK=+_i8{8(sd4xqUf9L~QU{liEtcN9;pv z?Xk^+#}x?Mo4}+_eRYC|5@z8%+%Nm`Rrjj8w#}y@k_vcV>8GnJv4l|2+Uh9BXD-Dz zXeB3iT5Gekb7p0IbvhkKrylvZPuKK_Fp!>+z$UyA%|Y&qJXz_WAK`R|&+zt?(Np{R zpyq?mQuxTUu)8#=GR`G3N~;xQY=*y!a_<)+Weo5Ngy`QNDZ|aUQ7I#m$Vd0QiO=PE86#MQch8c=6YFr+&V9RQRKe4v7_d^rHwB3mf_R7 z)!!&dD?7>@8zQ0(w=7tx>GSsKIyPT~zASXqJu9#0Hz<=AwIlvQK!>&z|IXciK>n>4 z!x7j7@r|6EmH>wR*6L_(x-!3jY*l#`%>s@K3f~*~9L6fBT*M|XRHj)~Vs%M=LRG5x z)zIR`qHwnP>Ohf$mqHK2PEm(S!Rq*bvG$h1jRWn1ZWt%bJmCp5(}dY!W@hG0m^qVV z!Zcy#ILyq<%*@QWneWu8-K}%$-aqS7%dfkvmf9`JmfTN2$UBsh`GtvA+>o-eR*TNm zFkX3+84EL1a9pn=L$3DmGvhXDy4g{K(laFovzjwyQt`*QF>C7a`3KJ9d(LF+)IM)D zVQ84!M-yA-{DhZBi$zp?e=R&)YD;XQXd9c9Qqm4w;k0Jgj=Ppp00zT4jl`I{LfTqI z*b^naX$K@8*vavW!h83~8fWG-O`^1#Z9#VLhvIVCFbHqAhMSXuc#)WgCA%qOfY90K zt-Hs_9n0xlL>edWnLi5S7Nh7H355lbhE48>Si<((VbLewP44CpgS#P8*egtoe@6X9 z&tfU))6ZbzMB^;8SKV>mnzJwE40f=jP9MpS$?uSSCwKXNe>nFshgI^Z=quBn=}8Bq zxmP?1p1UnMROC^bEX)F&OYp_5B%Mg`WoV|i(9dVJumdT8+(2d^iHnD&n5Ckn_DJFj zG|9k8}H&(Z7B*Z>-7iUZf!Dn7p9FXHk2vyC&Lh{sq){4vsJme<4|4_Y zO<{nE_JcIraL6|=gF*b|cTGBWGQ4e!W<=c_X=bE-mSvH>x?eQ28<`!&JiJKTqV;h6 z)xKXQP`O@TpZx7QjYaQO(>q#U`!~d=*_%O|E5Yk&L?le2#_z86^)fF-)#-FNi zR8Nv?kFjM>Tx7gVlYT^KTWA^Oon@Vo^_Wi$no|R%MiHH~yE6L)SA%qcdiFRMBLr$) zv&lU4=RR4^Xg9WC*_VZ@eO6cc^dXD(PHs35h1hSrxAIBZ&||@ehr0E^fQjCxUx~VV zDzH8?G+SzIM@M|04rfsAy>$fdH3jE;mK5+g8ce>mW@4=JQy2`9!Jl^2hFL1 z^@mGEN-Oj?X%`_7=YvLzuiKF6u?v@>(ANB3x}Vo^1!H5Cx2^OOADpe4pW2@yzZ6%C z3hRa3h1Cp=Fa17aj83~MjNI>tIBqxbK1TgN9k)91pBSM3g}(Ue(JptGynL<9ugFSW{9*8pN> zKqoWX`PkkZRZ$l6_1*#O?qDXX>s@i2*lrja9soP${q}cDH;^r`6io%3W*7YB@pQGw ztx8?gqrSX8pHop88xay5(kFXy*OiOFm2+X7LPrThFp(q!G1k^1EtwvF9SYt{W(-Z1 z2f)S16i1<#&wCKPKoJk#DqV2zp7u6=93V+YVEj$GQ1*H^G9zB~*RKxx!ErRw>B9O2 zJl`7FS*2qiCCw3|EDln>XG!IBdfatIT|!Bk_G=D8ji+=*zBH*{6vPBL%qCuG6u_(H z)OUAmR10+vRL%l&owQCFM;k81nBzUy6b7D{(*vs9_1Wzo_{2VZzb;zpTVgsB1SxiD8 zGp2RY+9D0j3QV9C4?@_!bLI8v*XZbMutP^pdwX~*CtvUei`kVLcJlg=jy^zS2kadu zlf7`nuW*FvXXL;g)7N#{1=!FuBcer~jSTa!$Uf9}n+tECE=FX7)BVB5aX?eio5tQb zw)!$}L4n0LX-X;TJT1T)QOucm+gES+T9`bUUxorK;ZA@^Hn|DOZu|oz;nle{2&lyt zaYE77(NRseVA59m%cZ5IhKGlmnxmzMhKJ+KWfc}f1-bI}-feTesX5F<7QOH9HK!!U zHC720a;x}E_<>_L?3g~_pL-U(yheFWg`|+a(KR;)agGe76N&x@Puph~9#G+-Yqz{s zk7wZhi01hc&a`F80P|pp6_%(XDo;mG_=9d4*6Ba-e$Swfv8darxfH)R#`!AJ1>+o9 zsUSn{H})=+l@)a-oQ_%mfu>s|?Us(x7u-@TBw9lfeN3)48Fi%DXq=f&s{2l!wsw&Q z*@#13HVjaw-(y~&dv`et8_k_h5LjOTWP1JHl4AVO+z^Hud_VU_cgbR}RS zSfK1V2hc-4{yi1${k=@eJ6-tDV4K5}M2o&ZQ^LhJOS$MVrdEhB_scM)G7cZFtpi)> z2^HSMhv|qf=@2zUgxOMv`Fw|s{(OZJ^gTMtHeBdczX6aGXRhRoh~&z>!Y)?oZya=c zJ8XZ`5N!Zl1bY^WlW6?nCY;LOJAQn;qISTc`t+~t;Y+x!V1vNrx|k=W@_SlJKcXk> z_SJ>0;!fs!33P@=J~OXB-scByDotM#>Jt6qCLE0qgZ)=!WBcKtJ`$?+y2}zM-u8Q#(k@;r1;IkqgFZ6KaICA&N$wgoRsCxMA<4%}!W%!*N*h zWHpFYrLNS9qKq6hC=AEw4%sae1~ZW^nwzA>hu?HrJ~#Ba8x=sR)wkLS#8; zL+0&&0LW+jb@R+5JiZ~Jlm|3$2Puhg+he_i?Ez{^do4vA$yIZL;>PZuoFUd_vwciQ zRiU@p!_CdnzrYC<>{!VZ=`(WKU+SMdZBpWqS+VuM)OCsyQbNzO1ZoH~;F*q(=qgj^ z9P4*V%nIPsiew`5MIFC$PH{LP^DppSt#aUy-%}H^!t~2Gnxng9TS;_j)=e>1k*D$AO$Genr=x@LZmk{z%B1x~TlO+JRK&-K)he?dFWYT~c+kE7 zpy*v{s*W!CJh1YVW2>8xWZ&hTiMN4@DFeU)gl}6V%`inN91vqwr$K#nTRGLRI&-l5O_re?9@$$Z88`iBNRo+vOa{ALqwj_W< z1HDcf;Sco4DO9X{NQ}Hn#iyiAZ|UUA^q%@G_^6g```?<&l4L*@(9g&5`ZAu!2DYAYlLXpdA(R2Z|2H z0w(8B5Urpnl^0RZGp*N71so~48O^qTJ#~GMWP~`fm`CA<=v{8?$!V*&r9AKx+e0BX z{LqAQnojtH5hl*yXIPB&F$$&sqr{`7Rd*-Ix@}XswIOdfY^i-{kTCEjP^is^MFBy$ z$J!OnzQ?=|9JF&sFIoA@5@uxi91!WGgL)~wTy_p{aLm(LIwy`Dwn#hbhNnm4OFkv+ zbAjJ!A#y(A9p{f7WZJ5@UU{p|aB{VJ1nIYG{|(A}A*e`WfS6{eaN}9rMuC2WR<>ns zGcIp)uJg+Bncl3hMkUtfJRdUn0d-CD`gYEPR~X@H5QbUv98_UuOgMZtia)};3Ds>> zRm~5^G8na3Xv=b?D_|OZwZ&HGB1!w4KQxgQ9`s`ezrk|On{-bNgyNIhzz3#E_)k4lnp;yRm>LEiY&xngxd*vpO zq!7Y)^c~=MtX`*l~%CpE3uBXm0!JdR9~4 z)1Xmu@EsW3uTh}NJD_^8VkvhjfQ}$c7hC>9I0(7xy;`BGf4$l3MY>nfiW3^N;;hD0c@!ZguSGe9rhHn`v=SB1;|rCZ-0~ zI5SFH^78CfW$Rw-@RXW6n4>ig3O12v%h#&U0zW8Lv808{`g1sM{Z|RVyT2Jr;_I$ zA-n-^C5<6_dT){UJv8%=yxb}G(qX<+w5Xb2TETMr3G|e;%N;c7lr|-Wa(GR9e+tRh zV1ZDfISWvJ;MHOj4@TSK>O=Tk;3y1-nl$ein(p!_mJvUPMSH}s#}IaD1V9myaE&#S z@q^r|sA*EHFvgDHOr87peL9Qx>ZJf>d-WruIZ{a2wjz0|20%oNjEH7(4E-2`b+1ub z#>qNG97TntI(Vk50eD!W#4vEwg%$4lO67_Q|EhASW37T4RF!n47=P9up=$;dRyhDomL`cob=wfuv6 z#7zxNoeM2i-zOZ(=(G95KXnYLtVZk0DnPmVASgL5gQI)}QqRX!?$=t$TU-9JPCj|4 ziLHCKanKUhS-9TH7l@5N!50clTu3&M;ZwgtqkQnEhYN~dij!S(PBDX*^B8}jn+DYi z&Hw&;qwTz-sZxQNl7$Uc&Y@Mk)<-N<&Zwayl>|FExGj=6m)VxfVYrc4Co-RC6*Cq! zo|<|>+2Z&kk48Y0=yDM55$feA-(=uBq}?7>M8BEBSsEB$$rFJ)bgDYh&1ee9#d$=c zdJn!t-D+w8GV_@&3l_5z@z<hC&&`PVRbAtDt;f#tZ4Y3*?c+&wT2a1Ci~KxeJS7!x~PvI_5&FyqWwg-@S=3$sM12k~?e$@3d8Q_=q?$XAcotI#evIu*giq zIAPkFi2aB#k?tHL(lnv}gmQQQ*;j>y_Tz3m!e!@4B`XJ+i?MSJ4So`zf!1hFKE zHg?`PUOx%52MqOl{ELl~Kij&!c35Zx^Aav1aeFYksNk;|3f)qqtWnc+Ovd)4w&9K? zNG=SNjM|9UDDTu$8Az?eUd!}t1Jow z#I5p6Y_)3R0YaJkM7iadED4Np26-*7Dwa`i$HXjNM<^V22T-93r|Je8E}&dvZXOSK ztK0mpW*AZIZS(rF>O*;8`?lKCe@LFZ?&5aXt`=S^qJ2ce-e}_EB^_*b(>#92>xYGl z?gd$=mLBo=llKYk%uFo9y2nTnoMa2JT&^YXAdIb+-{Rif{T?@;%bk52!@TQ+u~2}a z5vJ1=4Pu*845hYbn>k@;cZZ+;Vt1#5O;O7|u9#Xv84`6~M8g((Frg}h4l`&SO+oWx z-OI1Z547C~w0v|!Gv&3z54sc;R|z$St+boXY)G%=XU^zj)jbsLh!uKk*Yqk(edwv zo0ojlKOtZ9{=o6#l(0rO514bfmJX1YklC|AE#k6!u&H7vLB5axkJ(fg8D8CV{adEa zlI?Z`7(C^18anF(xKg}t!Wt`M%?bpi4LV+zt*Le*{flbZtyhDew{K`}IxY@7WC}Nu z$;B1RyvKRsjqUM!3J`2*MZeH58AF<7vHK0Frldp$VNL{5>>B}lba#ef+Ru?Gs7(f45F+fe zB@Wr{3NmD^LBF}$4^h0ep2PIHU!8<#zt+SXaN3Q~B5J#Au_AIeFS@#%3`>(8sqM{P zb6pO+fscHV7@4z4M1|f40jCS*)X-%KUDv%W7?1~H zZNF#Is1>!Fz4$%2i1l)EIroIUJRboO5O(uD-_0DPH)}V9VX6_SuBW_XlTBXQ?rFZI zOu+r{uf4$M+pqNg`DFTzMTQN}t(ssw(=hqP?EbE?xXBYA$3u!X5i)(IILAgwe=)1g zm`Pzb?B1Ll8+UR-tA-0_?gh$B+ib9L@}G>6reGY~vx@5`Cbd^|@ZiPOmHs77$!5TB zaZy)Fy&<&ebl4IQqE-N^eP>mKOU7!_vt<)xu{mg|nyx{}FjxpnCX4H`vPAy)-;Qqg z;Yfs>SGS==K4&clQt#zMJZ_bIwW>O8uCsid*VkdDQfx?KtWkC{dW^j6vcsZc-M@L{cNjFX?|#+)G`J%A7R;uaiGV`tL9GDZcOyao{{t8V}j90QE8N8gHF}yw=P#j*2)ILW{w%w?HwfVvL^4YI_TKCx}gW&;@l55AfMN!c<{bM|HH1 zJg;YB@`(jPh%EQ);NVfRN44_7Jl*@Pfhzib-bMP4JWeGpQS8-47e2&9zRTk=uHPYe zf(zE~1ZVN<&Jif2vtt%}jyx4C%07kCdZSs7im(}Y-AvDMJF zYvDOu3-G&xEsn*GePJX1(a|;0crFz=r6+x8Wz^#M+_}>=87@-H6y{LkFM@*w&JgMes{B?v(~`5t=!KZ>+N* z$J2enb|#*Y-l<^Tn{i^-Vgtzu=uDvTxij|Q@ZcLGub|Dpqk^<0#NcwQ#Bst8THis? zy68WCg4LR(MR;h5T?#O75D!@8qLcBDKp8d5N9JfmOWBLU!i5$>2cV4OgpjMC4irhV zZ@;RIU$R7WLvQ!+>nr;wzaE>IdZcP>u<^4$LT|4e_5c|i-&EZZI!b%#*ukNgG#!hl z9aqy%)-=&$f2mWeGaa(`|BeN3{*j;G&`?u@$-<>flWbnDTd~E`3b*G8DfT$z=w}nJ z9|pO?>ax2wda%)Uefw|b2Zzwg9OreKfX-?_$LtY9R4{L^JVKrT<;JhU#WZdEPIWaNlU*0Uc&VGBna;&E{#vg2=Ww5N8BD611pAuUG-21>) zT-7QC=Q8~4G2D3W&T;eU{5xoPp;^@lJcp(;9dp=scss;GB5&N?R6JvQshu}QRKGgU zlXdV=?~j`_HRP6&2@OAHtYC68?PSuHV7+ZvEhn8`Gotg@RxBLQVPk_`pqeosqC-An zH&v1F;N|zYxJRyEik9?(b2NRPfNtrSJpw*UUu$Ik<*MFU$Bv|K8T`Teh+-*UtO~8o z4)*yvoY&8{Ci){BT#R7Qx)=N2=R&bUU%$Beuf2C|S6~1MwK8Y;od3zoUYGulxhiKi zev

      L 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%0A$)xUHs?a7MV)D| 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

      e7pBX%hT;JzD*WSpTeY?0=&JmEFEH7Y}?d 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

      RRn^4J+5`EpQ$nYJtPO;N!CQWVI$^`I48?IW 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 z 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 literal 0 HcmV?d00001 diff --git a/networks/mainnet.md b/networks/mainnet.md index f6161123..91ab8172 100644 --- a/networks/mainnet.md +++ b/networks/mainnet.md @@ -10,6 +10,11 @@ - Implementation: [0xc8970E7C07c251625F9F93cE510b1D9c1a08d299](https://etherscan.io/address/0xc8970E7C07c251625F9F93cE510b1D9c1a08d299) - Transaction: [0x32c727ebb5dbbc1bd89a3a21cf15d9e74dbc688b404b60a286a9ae858c4967e2](https://etherscan.io/tx/0x32c727ebb5dbbc1bd89a3a21cf15d9e74dbc688b404b60a286a9ae858c4967e2) +### Upgrade to v2.0.0 + +- Implementation: [0xe68E649862F7036094f1E4eD5d69a738aCDE666f](https://etherscan.io/address/0xe68E649862F7036094f1E4eD5d69a738aCDE666f) +- Transaction: [0xeaa63d71aee68329346897f1a2f0d29a761c190406db4fb457f3edd9110afaec](https://etherscan.io/tx/0xeaa63d71aee68329346897f1a2f0d29a761c190406db4fb457f3edd9110afaec) + ## Pool Escrow - Contract: [0x2296e122c1a20Fca3CAc3371357BdAd3be0dF079](https://etherscan.io/address/0x2296e122c1a20Fca3CAc3371357BdAd3be0dF079) @@ -40,6 +45,11 @@ - Implementation: [0x610B58583642610967727fe4fadd125a92D6F678](https://etherscan.io/address/0x610B58583642610967727fe4fadd125a92D6F678) - Transaction: [0x647087d8fc2f729e03a0a4e18729e0ae20bdd77f3454e32cd190d0d271255399](https://etherscan.io/tx/0x647087d8fc2f729e03a0a4e18729e0ae20bdd77f3454e32cd190d0d271255399) +### Upgrade to v2.0.0 + +- Implementation: [0x7cA75ccf264b2d9F91D4ABA7639fC7FcC73a7e09](https://etherscan.io/address/0x7cA75ccf264b2d9F91D4ABA7639fC7FcC73a7e09) +- Transaction: [0xeaa63d71aee68329346897f1a2f0d29a761c190406db4fb457f3edd9110afaec](https://etherscan.io/tx/0xeaa63d71aee68329346897f1a2f0d29a761c190406db4fb457f3edd9110afaec) + ## StakeWiseToken - Contract: [0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2](https://etherscan.io/address/0x48C3399719B582dD63eB5AADf12A40B4C3f52FA2) @@ -81,6 +91,11 @@ - Contract: [0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20](https://etherscan.io/address/0xA3F21010e8b9a3930996C8849Df38f9Ca3647c20) - Transaction: [0xbf974737b21c38bb1b95c7b0dc57fe54ab8fcf040fe9ffceac7d920b7e72587a](https://etherscan.io/tx/0xbf974737b21c38bb1b95c7b0dc57fe54ab8fcf040fe9ffceac7d920b7e72587a) +### Upgrade to v2.0.0 + +- Implementation: [0x1d873651c38D912c8A7E1eBfB013Aa96bE5AACBC](https://etherscan.io/address/0x1d873651c38D912c8A7E1eBfB013Aa96bE5AACBC) +- Transaction: [0xeaa63d71aee68329346897f1a2f0d29a761c190406db4fb457f3edd9110afaec](https://etherscan.io/tx/0xeaa63d71aee68329346897f1a2f0d29a761c190406db4fb457f3edd9110afaec) + ## Roles - Contract: [0xC486c10e3611565F5b38b50ad68277b11C889623](https://etherscan.io/address/0xC486c10e3611565F5b38b50ad68277b11C889623)

      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 z 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%0AsU0pDh0D!vU2ET) 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%0Dhm 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

d27j!i{jfFM|U=Y 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%0D_{Cyr}l~Du^@jN4TC*;F}bsSsIDM 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