diff --git a/.gitignore b/.gitignore index cfe668b2..1ec91788 100644 --- a/.gitignore +++ b/.gitignore @@ -1,8 +1,6 @@ # Compiler files cache/ out/ -dist/ -types/ # Ignores development broadcast logs !/broadcast @@ -15,21 +13,17 @@ docs/ # Dotenv file .env -# coverage files +lcov.info coverage/ -node_modules -.env -coverage -coverage.json -typechain -typechain-types -# Hardhat files -cache -artifacts -artifacts-selected +# node +node_modules/ -cache_hardhat +# hardhat +artifacts/ +cache_hardhat/ +typechain-types/ -lcov.info -settings.json \ No newline at end of file +# zerodev orchestra +log/ +.envrc diff --git a/.gitmodules b/.gitmodules index b97d7759..323c6bdb 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,15 +1,9 @@ [submodule "lib/forge-std"] path = lib/forge-std url = https://github.com/foundry-rs/forge-std -[submodule "lib/I4337"] - path = lib/I4337 - url = https://github.com/leekt/I4337 -[submodule "lib/FreshCryptoLib"] - path = lib/FreshCryptoLib - url = https://github.com/rdubois-crypto/FreshCryptoLib -[submodule "lib/p256-verifier"] - path = lib/p256-verifier - url = https://github.com/daimo-eth/p256-verifier [submodule "lib/solady"] path = lib/solady url = https://github.com/vectorized/solady +[submodule "lib/ExcessivelySafeCall"] + path = lib/ExcessivelySafeCall + url = https://github.com/nomad-xyz/ExcessivelySafeCall diff --git a/README.md b/README.md index f2bb9b3e..1e90b362 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,6 @@ Kernel is supported by all major AA SDKs, including: - [ZeroDev](https://docs.zerodev.app/) - [Permissionless.js](https://docs.pimlico.io/permissionless/how-to/accounts/use-kernel-account) - [UserOp.js](https://docs.stackup.sh/docs/useropjs-presets#kernel) -- [Account Kit](https://github.com/alchemyplatform/aa-sdk/tree/main/packages/accounts/src/kernel-zerodev) ## Resources @@ -36,6 +35,18 @@ MIT ## Addresses +
+v3.0 + +| Name | Address | +| -------------------- | ------------------------------------------ | +| Meta Factory | 0xd703aaE79538628d27099B8c4f621bE4CCd142d5 | +| Factory | 0x6723b44Abeec4E71eBE3232BD5B455805baDD22f | +| Kernel | 0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27 | +| ECDSA Validator | 0x8104e3Ad430EA6d354d013A6789fDFc71E671c43 | + +
+
v2.4 diff --git a/audits/chainlight_v3_0.pdf b/audits/chainlight_v3_0.pdf new file mode 100644 index 00000000..ff56c270 Binary files /dev/null and b/audits/chainlight_v3_0.pdf differ diff --git a/audits/kalos_v3_plugins.pdf b/audits/kalos_v3_plugins.pdf new file mode 100644 index 00000000..4f053f2b Binary files /dev/null and b/audits/kalos_v3_plugins.pdf differ diff --git a/broadcast/Deploy.s.sol/1/run-1712893238.json b/broadcast/Deploy.s.sol/1/run-1712893238.json new file mode 100644 index 00000000..d8b1b9b3 --- /dev/null +++ b/broadcast/Deploy.s.sol/1/run-1712893238.json @@ -0,0 +1,107 @@ +{ + "transactions": [ + { + "hash": "0xd86c946e6f30ec0b4705ea39154b4e53c4133f8a5954fc38fa00bd3f9f75131c", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x31", + "chainId": "0x1", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x577e44c80c51789fd019552ec4d081eec41c1ca39e708803bfc30008458c60e8", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x32", + "chainId": "0x1", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x864783", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xd86c946e6f30ec0b4705ea39154b4e53c4133f8a5954fc38fa00bd3f9f75131c", + "transactionIndex": "0x38", + "blockHash": "0x462f20133ad7d590e9912e41441a8c8b5d4402f33ab30c6f6315b0321c7b2c0a", + "blockNumber": "0x12ba2aa", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x2f0dbd9a2", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xf4cd4a", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x462f20133ad7d590e9912e41441a8c8b5d4402f33ab30c6f6315b0321c7b2c0a", + "blockNumber": "0x12ba2aa", + "transactionHash": "0x577e44c80c51789fd019552ec4d081eec41c1ca39e708803bfc30008458c60e8", + "transactionIndex": "0x9e", + "logIndex": "0x19d", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x0", + "transactionHash": "0x577e44c80c51789fd019552ec4d081eec41c1ca39e708803bfc30008458c60e8", + "transactionIndex": "0x9e", + "blockHash": "0x462f20133ad7d590e9912e41441a8c8b5d4402f33ab30c6f6315b0321c7b2c0a", + "blockNumber": "0x12ba2aa", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x2f0dbd9a2", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712893238, + "chain": 1, + "commit": "1ae967d" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/1/run-latest.json b/broadcast/Deploy.s.sol/1/run-latest.json new file mode 100644 index 00000000..d8b1b9b3 --- /dev/null +++ b/broadcast/Deploy.s.sol/1/run-latest.json @@ -0,0 +1,107 @@ +{ + "transactions": [ + { + "hash": "0xd86c946e6f30ec0b4705ea39154b4e53c4133f8a5954fc38fa00bd3f9f75131c", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x31", + "chainId": "0x1", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x577e44c80c51789fd019552ec4d081eec41c1ca39e708803bfc30008458c60e8", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x32", + "chainId": "0x1", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x864783", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xd86c946e6f30ec0b4705ea39154b4e53c4133f8a5954fc38fa00bd3f9f75131c", + "transactionIndex": "0x38", + "blockHash": "0x462f20133ad7d590e9912e41441a8c8b5d4402f33ab30c6f6315b0321c7b2c0a", + "blockNumber": "0x12ba2aa", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x2f0dbd9a2", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xf4cd4a", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x462f20133ad7d590e9912e41441a8c8b5d4402f33ab30c6f6315b0321c7b2c0a", + "blockNumber": "0x12ba2aa", + "transactionHash": "0x577e44c80c51789fd019552ec4d081eec41c1ca39e708803bfc30008458c60e8", + "transactionIndex": "0x9e", + "logIndex": "0x19d", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x0", + "transactionHash": "0x577e44c80c51789fd019552ec4d081eec41c1ca39e708803bfc30008458c60e8", + "transactionIndex": "0x9e", + "blockHash": "0x462f20133ad7d590e9912e41441a8c8b5d4402f33ab30c6f6315b0321c7b2c0a", + "blockNumber": "0x12ba2aa", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x2f0dbd9a2", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712893238, + "chain": 1, + "commit": "1ae967d" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/10/run-1712897446.json b/broadcast/Deploy.s.sol/10/run-1712897446.json new file mode 100644 index 00000000..8d5f9471 --- /dev/null +++ b/broadcast/Deploy.s.sol/10/run-1712897446.json @@ -0,0 +1,113 @@ +{ + "transactions": [ + { + "hash": "0xfae80fa54d2b9cdd31ba12c84746a9239d66ba733b167b1201f994a5f1ec31ea", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x16", + "chainId": "0xa", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x421d8641ae24a2b7dbdf8b1c3688768b223aad7b7d517a3599a90df6d3b991e0", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x17", + "chainId": "0xa", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xcd191", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xfae80fa54d2b9cdd31ba12c84746a9239d66ba733b167b1201f994a5f1ec31ea", + "transactionIndex": "0x4", + "blockHash": "0x673278250070e421099c87832f3639274774fe48aef3d9df9b489f63c67668db", + "blockNumber": "0x71271f3", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x3a2dbfd", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "l1Fee": "0x7be79ca9e", + "l1GasPrice": "0x28bcf798f", + "l1GasUsed": "0x8ac" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xdbf2c", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x673278250070e421099c87832f3639274774fe48aef3d9df9b489f63c67668db", + "blockNumber": "0x71271f3", + "transactionHash": "0x421d8641ae24a2b7dbdf8b1c3688768b223aad7b7d517a3599a90df6d3b991e0", + "transactionIndex": "0x5", + "logIndex": "0x19", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x0", + "transactionHash": "0x421d8641ae24a2b7dbdf8b1c3688768b223aad7b7d517a3599a90df6d3b991e0", + "transactionIndex": "0x5", + "blockHash": "0x673278250070e421099c87832f3639274774fe48aef3d9df9b489f63c67668db", + "blockNumber": "0x71271f3", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x3a2dbfd", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "l1Fee": "0x805ea93a6", + "l1GasPrice": "0x28bcf798f", + "l1GasUsed": "0x8fc" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712897446, + "chain": 10, + "commit": "feedc00" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/10/run-latest.json b/broadcast/Deploy.s.sol/10/run-latest.json new file mode 100644 index 00000000..8d5f9471 --- /dev/null +++ b/broadcast/Deploy.s.sol/10/run-latest.json @@ -0,0 +1,113 @@ +{ + "transactions": [ + { + "hash": "0xfae80fa54d2b9cdd31ba12c84746a9239d66ba733b167b1201f994a5f1ec31ea", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x16", + "chainId": "0xa", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x421d8641ae24a2b7dbdf8b1c3688768b223aad7b7d517a3599a90df6d3b991e0", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x17", + "chainId": "0xa", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xcd191", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xfae80fa54d2b9cdd31ba12c84746a9239d66ba733b167b1201f994a5f1ec31ea", + "transactionIndex": "0x4", + "blockHash": "0x673278250070e421099c87832f3639274774fe48aef3d9df9b489f63c67668db", + "blockNumber": "0x71271f3", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x3a2dbfd", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "l1Fee": "0x7be79ca9e", + "l1GasPrice": "0x28bcf798f", + "l1GasUsed": "0x8ac" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xdbf2c", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x673278250070e421099c87832f3639274774fe48aef3d9df9b489f63c67668db", + "blockNumber": "0x71271f3", + "transactionHash": "0x421d8641ae24a2b7dbdf8b1c3688768b223aad7b7d517a3599a90df6d3b991e0", + "transactionIndex": "0x5", + "logIndex": "0x19", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x0", + "transactionHash": "0x421d8641ae24a2b7dbdf8b1c3688768b223aad7b7d517a3599a90df6d3b991e0", + "transactionIndex": "0x5", + "blockHash": "0x673278250070e421099c87832f3639274774fe48aef3d9df9b489f63c67668db", + "blockNumber": "0x71271f3", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x3a2dbfd", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "l1Fee": "0x805ea93a6", + "l1GasPrice": "0x28bcf798f", + "l1GasUsed": "0x8fc" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712897446, + "chain": 10, + "commit": "feedc00" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/100/run-1712924751.json b/broadcast/Deploy.s.sol/100/run-1712924751.json new file mode 100644 index 00000000..562729cc --- /dev/null +++ b/broadcast/Deploy.s.sol/100/run-1712924751.json @@ -0,0 +1,126 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": null, + "arguments": null, + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xa3646", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "nonce": "0x11", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x12", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f", + "function": null, + "arguments": [ + "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6010c", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27", + "nonce": "0x13", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x14", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x15", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712924751, + "chain": 100, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/100/run-1712924764.json b/broadcast/Deploy.s.sol/100/run-1712924764.json new file mode 100644 index 00000000..42b4cb7a --- /dev/null +++ b/broadcast/Deploy.s.sol/100/run-1712924764.json @@ -0,0 +1,126 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": null, + "arguments": null, + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xa3646", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "nonce": "0x11", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x12", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f", + "function": null, + "arguments": [ + "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6010c", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27", + "nonce": "0x13", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x14", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x15", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712924764, + "chain": 100, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/100/run-1712924828.json b/broadcast/Deploy.s.sol/100/run-1712924828.json new file mode 100644 index 00000000..fa8dcfb1 --- /dev/null +++ b/broadcast/Deploy.s.sol/100/run-1712924828.json @@ -0,0 +1,126 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": null, + "arguments": null, + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xa3646", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "nonce": "0x11", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x12", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f", + "function": null, + "arguments": [ + "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6010c", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27", + "nonce": "0x13", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x14", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x15", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712924828, + "chain": 100, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/100/run-1712925554.json b/broadcast/Deploy.s.sol/100/run-1712925554.json new file mode 100644 index 00000000..e80df368 --- /dev/null +++ b/broadcast/Deploy.s.sol/100/run-1712925554.json @@ -0,0 +1,126 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": null, + "arguments": null, + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xa3646", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "nonce": "0x11", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x12", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f", + "function": null, + "arguments": [ + "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6010c", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27", + "nonce": "0x13", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x14", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x15", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712925554, + "chain": 100, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/100/run-latest.json b/broadcast/Deploy.s.sol/100/run-latest.json new file mode 100644 index 00000000..e80df368 --- /dev/null +++ b/broadcast/Deploy.s.sol/100/run-latest.json @@ -0,0 +1,126 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": null, + "arguments": null, + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xa3646", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "nonce": "0x11", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x12", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f", + "function": null, + "arguments": [ + "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6010c", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27", + "nonce": "0x13", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x14", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x15", + "chainId": "0x64", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712925554, + "chain": 100, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/11155111/run-1710948578.json b/broadcast/Deploy.s.sol/11155111/run-1710948578.json new file mode 100644 index 00000000..5bd2ac26 --- /dev/null +++ b/broadcast/Deploy.s.sol/11155111/run-1710948578.json @@ -0,0 +1,36 @@ +{ + "transactions": [ + { + "hash": "0x1f074aae0216c7f4d13661a11189edb7bf304fd1efbf5c3d6f2f372774d2c89b", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x079D5D8A3275A230AF743cB59c341Ff74B82488D", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee7ca", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006101406040523480156200001257600080fd5b506040516200522a3803806200522a833981016040819052620000359162000168565b306080524660a05260608062000085604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152808501939093528281019190915246606083015230608083015260a0909120610100526001600160a01b03851661012052805163deadbeef60e01b92810192909252805160048184030181526024909201905262000128925090506200019a565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b03191660589290921c91909117905550620001d2565b6000602082840312156200017b57600080fd5b81516001600160a01b03811681146200019357600080fd5b9392505050565b805160208201516001600160581b03198082169291906015831015620001ca5780818460150360031b1b83161693505b505050919050565b60805160a05160c05160e0516101005161012051614fd7620002536000396000818161058801528181610cf60152818161102c015281816113380152818161154e0152818161168101528181611bcb0152611fb60152600061326b01526000613325015260006132ff015260006132af0152600061328c0152614fd76000f3fe60806040526004361061016a5760003560e01c806390ef8862116100d1578063b101dd3a1161008a578063e0dfd36511610064578063e0dfd36514610660578063e9ae5c531461068d578063f1f7f0f9146106a0578063f2dc691d146106ce576101a9565b8063b101dd3a146105ea578063d03c79141461061f578063d691c96414610640576101a9565b806390ef8862146104ed5780639517e29f146105175780639cfd7cff1461052a578063a65d69d414610576578063a71763a8146105c2578063adb610a3146105d5576101a9565b806357b3a5f41161012357806357b3a5f4146104005780636e6fa0c614610447578063721e67f41461046757806383d423591461049f57806384b0196e146104b25780638dd7712f146104da576101a9565b8063112d3a7d146102f457806312af322c146103295780631626ba7e1461034957806319822f7c146103825780631f1b92e3146103a3578063364d7a70146103b6576101a9565b366101a957604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b60006101c06000356001600160e01b0319166106ee565b6040805180820190915281546001600160a01b039081168083526001909301541660208201529150600090606090610280576000806101fd610728565b90925090506001600160a01b03821661022957604051635a93724d60e01b815260040160405180910390fd5b6001600160a01b03811660011461026a5760006102488260003661077d565b9050610253836107ff565b90955093506102648282878761084e565b50610279565b610273826107ff565b90945092505b50506102dd565b82516060906001600160a01b03166001146102a65783516102a39060003661077d565b90505b6102b684602001516000366108c4565b855191945092506001600160a01b03166001146102db5783516102db9082858561084e565b505b816102ea57805160208201fd5b805160208201f35b005b34801561030057600080fd5b5061031461030f3660046143b1565b6108f3565b60405190151581526020015b60405180910390f35b34801561033557600080fd5b506102f2610344366004614424565b6109ed565b34801561035557600080fd5b506103696103643660046144b6565b610b47565b6040516001600160e01b03199091168152602001610320565b61039561039036600461451a565b610ce9565b604051908152602001610320565b6102f26103b1366004614567565b611005565b3480156103c257600080fd5b506103d66103d136600461458d565b6111ec565b60408051825163ffffffff1681526020928301516001600160a01b03169281019290925201610320565b34801561040c57600080fd5b5061042061041b3660046145be565b611255565b6040805182516001600160a01b039081168252602093840151169281019290925201610320565b34801561045357600080fd5b506103146104623660046145db565b61129f565b34801561047357600080fd5b50610487610482366004614612565b6112e8565b60405190516001600160a01b03168152602001610320565b6102f26104ad36600461462f565b61131e565b3480156104be57600080fd5b506104c76114e0565b60405161032097969594939291906146b8565b6102f26104e8366004614751565b611543565b3480156104f957600080fd5b5061050261164a565b60405163ffffffff9091168152602001610320565b6102f26105253660046143b1565b611667565b34801561053657600080fd5b50604080518082018252601b81527f6b65726e656c2e616476616e6365642e76302e332e302d626574610000000000602082015290516103209190614795565b34801561058257600080fd5b506105aa7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610320565b6102f26105d03660046143b1565b611bb1565b3480156105e157600080fd5b50610502611ddb565b3480156105f657600080fd5b506105ff611df8565b604080516001600160a01b03938416815292909116602083015201610320565b34801561062b57600080fd5b5061031461063a3660046147a8565b50600190565b61065361064e3660046144b6565b611e0b565b60405161032091906147c1565b34801561066c57600080fd5b5061068061067b36600461458d565b611eb7565b6040516103209190614825565b6102f261069b3660046144b6565b611f9c565b3480156106ac57600080fd5b506106b5612115565b6040516001600160581b03199091168152602001610320565b3480156106da57600080fd5b506103146106e93660046147a8565b612128565b6001600160e01b03191660009081527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3d6020526040902090565b7f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b547f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3c546001600160a01b0391821692911690565b604051631057c74d60e11b81526060906001600160a01b038516906320af8e9a906107b0903390879087906004016148d2565b6000604051808303816000875af11580156107cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107f7919081019061498d565b949350505050565b6000606060408051368101909152366000823760408051601481019091523360601b90526000803660140183875afa92505060405190503d8152602081013d6000823e3d810160405250915091565b604051630b9dfbed60e11b81526001600160a01b0385169063173bf7da9061087a908690600401614795565b6020604051808303816000875af1158015610899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bd91906149ff565b5050505050565b604051600090828482376000388483885af491503d8152602081013d6000823e3d810160405250935093915050565b60008460010361094457610905612148565b600101600061091a8660581b600160f81b1790565b6001600160581b031916815260208101919091526040016000205463ffffffff16151590506107f7565b8460020361096a5760006109578561216c565b546001600160a01b0316141590506107f7565b8460030361099c57600061097c610728565b509050846001600160a01b0316816001600160a01b0316149150506107f7565b846006036109e2576001600160a01b0384166109cd6109bf600460008688614a21565b6109c891614a4b565b6106ee565b600101546001600160a01b03161490506107f7565b506000949350505050565b60006109f7612148565b805490915060581b6001600160581b03191615610a515760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b6001600160581b03198716610a7957604051631a0a9b9f60e21b815260040160405180910390fd5b86610a8881600160f81b6121a5565b8015610a9d5750610a9d81600160f91b6121a5565b15610abb576040516361c4e91b60e11b815260040160405180910390fd5b815460408051808201909152600181526001600160a01b03891660208201526001600160c81b031990911660588a901c17600160a81b178355610b028982898989896121b8565b8254600160a81b900463ffffffff16836015610b1d83614a8f565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050505050505050565b600080610b52612148565b90506000366000610b6387876123e3565b925092509250610b7a610b738490565b6000612451565b15610b8757835460581b92505b6001600160581b03198316600090815260018501602052604090205464010000000090046001600160a01b0316610bd157604051631a0a9b9f60e21b815260040160405180910390fd5b610bdf83600160f81b612451565b15610c79576000610bf08460581c90565b9050806001600160a01b031663f551e2ee33610c0b8c612463565b86866040518563ffffffff1660e01b8152600401610c2c9493929190614ab2565b602060405180830381865afa158015610c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6d9190614ae4565b95505050505050610ce2565b6000610c858460081b90565b6001600160e01b03198116600090815260038701602052604090205490915060f01b600160f11b811615610ccc57604051635b71057960e01b815260040160405180910390fd5b610cd982338c87876124b9565b96505050505050505b9392505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d34576040516348f5c3ed60e01b815260040160405180910390fd5b6000610d3e612148565b90506000806000610d5288602001356125b9565b91945092509050610d64826000612451565b15610d705750825460581b5b610d7c83828a8a6125e7565b6001600160581b031982166000908152600186016020908152604080832081518083019092525463ffffffff8116825264010000000090046001600160a01b031691810191909152919650610dd29084906121a5565b8015610df057508454815163ffffffff600160c81b90920482169116105b15610e0e57604051633ab3447f60e11b815260040160405180910390fd5b60208101516001600160a01b038116610e3a57604051631a0a9b9f60e21b815260040160405180910390fd5b600089815260208190526040902080546001600160a01b0319166001600160a01b03831690811790915560001901610f0257610e778460006121a5565b8015610edf57506001600160581b031983166000908152600287016020526040812090610ea760608d018d614b01565b610eb691600491600091614a21565b610ebf91614a4b565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610efd57604051631a0a9b9f60e21b815260040160405180910390fd5b610fe8565b610f0d8460006121a5565b8015610f7557506001600160581b031983166000908152600287016020526040812090610f3d60608d018d614b01565b610f4c91600891600491614a21565b610f5591614a4b565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610f9357604051631a0a9b9f60e21b815260040160405180910390fd5b638dd7712f60e01b610fa860608c018c614b01565b610fb791600491600091614a21565b610fc091614a4b565b6001600160e01b03191614610fe85760405163dbbb044b60e01b815260040160405180910390fd5b8715610ff857343434348b335af1505b5050505050509392505050565b600061101f611012612148565b546001600160a81b031690565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061105a5750333014155b156111df5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156110a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c791906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906110ff903390859036906004016148d2565b6000604051808303816000875af115801561111e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611146919081019061498d565b9050611151836128ae565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061117d908490600401614795565b6020604051808303816000875af115801561119c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c091906149ff565b50505050565b6040516348f5c3ed60e01b815260040160405180910390fd5b6111e8826128ae565b5050565b6040805180820190915260008082526020820152611208612148565b6001600160581b03199290921660009081526001909201602090815260409283902083518085019094525463ffffffff8116845264010000000090046001600160a01b0316908301525090565b6040805180820190915260008082526020820152611272826106ee565b6040805180820190915281546001600160a01b039081168252600190920154909116602082015292915050565b60006112a9612148565b6001600160581b031984166000908152600291909101602090815260408083206001600160e01b03198616845290915290205460ff1690505b92915050565b6040805160208101909152600081526113008261216c565b604080516020810190915290546001600160a01b0316815292915050565b600061132b611012612148565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906113665750333014155b156114d55760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156113af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d391906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061140b903390859036906004016148d2565b6000604051808303816000875af115801561142a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611452919081019061498d565b905061145f85858561294c565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061148b908490600401614795565b6020604051808303816000875af11580156114aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ce91906149ff565b50506111c0565b6111c084848461294c565b600f60f81b6060806000808083611531604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b97989097965046955030945091925090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461158c576040516348f5c3ed60e01b815260040160405180910390fd5b6000818152602081905260409020546060906001600160a01b0316600181146115d6576115d3816115c06060870187614b01565b6115ce916004908290614a21565b61077d565b91505b6000806115fd306115ea6060890189614b01565b6115f8916004908290614a21565b6108c4565b90925090506001600160a01b0383166001146116245761161f8385848461084e565b611642565b816116425760405163f21e646b60e01b815260040160405180910390fd5b505050505050565b6000611654612148565b54600160c81b900463ffffffff16919050565b6000611674611012612148565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906116af5750333014155b15611a065760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c91906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611754903390859036906004016148d2565b6000604051808303816000875af1158015611773573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261179b919081019061498d565b9050856001036118785760006117af612148565b905060006117c38760581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff168152909150600090602081016117f56014848a8c614a21565b6117fe91614b47565b60601c9052905060148781013588016034818101929182013591818b01358b019182019101356118328686868686866121b8565b8654600160a81b900463ffffffff1687601561184d83614a8f565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505050505050611990565b856002036118d2576014848101358501603481810192918201359181880135880191820191810135906118c9908a906118b49060008b8d614a21565b6118bd91614b47565b60601c86868686612a10565b50505050611990565b85600303611923576014848101358501603481810192918201359181880135880191820191810135906118c9908a9061190e9060008b8d614a21565b61191791614b47565b60601c86868686612b21565b856006036119775761197261193c600460008688614a21565b61194591614a4b565b8661195460186004888a614a21565b61195d91614b47565b60601c61196d876018818b614a21565b612c58565b611990565b604051631092ef5760e11b815260040160405180910390fd5b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906119bc908490600401614795565b6020604051808303816000875af11580156119db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ff91906149ff565b50506108bd565b84600103611ae1576000611a18612148565b90506000611a2c8660581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff16815290915060009060208101611a5e601484898b614a21565b611a6791614b47565b60601c9052905060148681013587016034818101929182013591818a01358a01918201910135611a9b8686868686866121b8565b8654600160a81b900463ffffffff16876015611ab683614a8f565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050505050506108bd565b84600203611b2657601483810135840160348181019291820135918187013587019182019181013590611b1d9089906118b49060008a8c614a21565b505050506108bd565b84600303611b6257601483810135840160348181019291820135918187013587019182019181013590611b1d90899061190e9060008a8c614a21565b8460060361197757611bac611b7b600460008587614a21565b611b8491614a4b565b85611b93601860048789614a21565b611b9c91614b47565b60601c61196d866018818a614a21565b6108bd565b6000611bbe611012612148565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611bf95750333014155b15611d745760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611c42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6691906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611c9e903390859036906004016148d2565b6000604051808303816000875af1158015611cbd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ce5919081019061498d565b604051638a91b0e360e01b81529091506001600160a01b03861690638a91b0e390611d169087908790600401614b7a565b600060405180830381600087803b158015611d3057600080fd5b505af1158015611d44573d6000803e3d6000fd5b5050604051630b9dfbed60e11b81526001600160a01b038516925063173bf7da91506119bc908490600401614795565b604051638a91b0e360e01b81526001600160a01b03851690638a91b0e390611da29086908690600401614b7a565b600060405180830381600087803b158015611dbc57600080fd5b505af1158015611dd0573d6000803e3d6000fd5b505050505050505050565b6000611de5612148565b54600160a81b900463ffffffff16919050565b600080611e03610728565b915091509091565b60606000611e183361216c565b546001600160a01b0316905080611e425760405163710c949760e01b815260040160405180910390fd5b60606001600160a01b038216600114611e6457611e618260003661077d565b90505b611e6f868686612cde565b92506001600160a01b038216600114611eae57611eae8282600186604051602001611e9a91906147c1565b60405160208183030381529060405261084e565b50509392505050565b60408051606080820183526000808352602083015291810191909152600882901b611ee0612148565b6001600160e01b03198216600090815260039190910160209081526040918290208251606081018452815460f081901b6001600160f01b03191682526201000090046001600160a01b03168184015260018201805485518186028101860187528181529295939493860193830182828015611f8b57602002820191906000526020600020905b815460501b69ffffffffffffffffffff19168152600190910190602001808311611f66575b505050505081525050915050919050565b6000611fa9611012612148565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611fe45750333014155b1561210a5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561202d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205191906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90612089903390859036906004016148d2565b6000604051808303816000875af11580156120a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120d0919081019061498d565b90506120dd858585612cde565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061148b908490600401614795565b6108bd848484612cde565b600061211f612148565b5460581b919050565b6000600882101561213b57506001919050565b506000919050565b919050565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f90565b6001600160a01b031660009081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b6001600160f81b03199081169116141590565b60006121c2612148565b60208701519091506001600160a01b03166121df57600160208701525b85518154600160a81b900463ffffffff9081169116141580612227575085516001600160581b03198816600090815260018301602052604090205463ffffffff918216911610155b1561224557604051633ab3447f60e11b815260040160405180910390fd5b6001600160581b03198716600090815260018083016020908152604090922088518154938a01516001600160a01b031664010000000081026001600160c01b031990951663ffffffff90921691909117939093179055146123055785602001516001600160a01b0316636d61fe7084846040518363ffffffff1660e01b81526004016122d2929190614b7a565b600060405180830381600087803b1580156122ec57600080fd5b505af1158015612300573d6000803e3d6000fd5b505050505b8661231481600160f81b612451565b1561238e5760006123258960581c90565b6040516306d61fe760e41b81529091506001600160a01b03821690636d61fe7090612356908a908a90600401614b7a565b600060405180830381600087803b15801561237057600080fd5b505af1158015612384573d6000803e3d6000fd5b50505050506123d9565b61239c81600160f91b612451565b156123c05760006123ad8960081b90565b90506123ba818888612f0a565b506123d9565b6040516361c4e91b60e11b815260040160405180910390fd5b5050505050505050565b813536600060f883901c8015612409576001811461241e576002811461242f5760206000fd5b60009350600186019250600186039150612449565b601586019250601585039150612449565b6001600160d81b0319841693506005860192506005850391505b509250925092565b6001600160f81b031990811691161490565b604080517f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8360208201529081018290526000906112e2906060015b60405160208183030381529060405280519060200120613269565b60008060003660006124ce8a8a8a8a8a613381565b93509350935093506000806124e28561348d565b50915091508165ffffffffffff1642108061250457508065ffffffffffff1642115b1561252057506001600160e01b031995506125b0945050505050565b6001600160a01b03861663392dffaf6001600160e01b03198e168d6125448e612463565b88886040518663ffffffff1660e01b8152600401612566959493929190614b8e565b602060405180830381865afa158015612583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a79190614ae4565b96505050505050505b95945050505050565b80600881901b8060ff60f084901c1660011981016125df576001600160d81b0319821691505b509193909250565b6000806125f2612148565b905060006125ff85614c18565b9050366000612612610100880188614b01565b909250905061262589600160f81b612451565b1561274e576000638dd7712f60e01b61264160608a018a614b01565b61265091600491600091614a21565b61265991614a4b565b6001600160e01b03191614612692576126756060890189614b01565b61268491600491600091614a21565b61268d91614a4b565b6126b7565b61269f6060890189614b01565b6126ae91600891600491614a21565b6126b791614a4b565b90506126d189826126cc6101008c018c614b01565b6134c0565b604080516020601f8401819004810282018101909252828152939950919550935084908490819084018382808284376000920191909152505050506101008501528454600160a81b900463ffffffff1685601561272d83614a8f565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505b8761275d81600160f81b612451565b156127ec576127e5866127708b60581c90565b6001600160a01b03166397003203878b6040518363ffffffff1660e01b815260040161279d929190614dad565b6020604051808303816000875af11580156127bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e09190614dcf565b613692565b95506128a1565b60006127f88a60081b90565b6001600160e01b03198116600090815260038801602052604090205490915060f01b600160f01b161561283e576040516314b9743f60e01b815260040160405180910390fd5b60008061284d83888888613750565b9150915061285b8983613692565b985061289b89826001600160a01b0316630ccab7a1866001600160e01b0319168b8f6040518463ffffffff1660e01b815260040161279d93929190614de8565b98505050505b5050505050949350505050565b60006128b8612148565b805490915063ffffffff600160c81b9091048116908316116128ed57604051633ab3447f60e11b815260040160405180910390fd5b805463ffffffff60c81b1916600160c81b63ffffffff8481168202929092178084559081048216600160a81b90910490911610156111e857805463ffffffff60a81b198116600160c81b90910463ffffffff16600160a81b0217905550565b6000612956612148565b6001600160581b03198516600090815260018201602052604090208054640100000000600160c01b031916905590508361299481600160f81b612451565b156108bd5760006129a58660581c90565b604051638a91b0e360e01b81529091506001600160a01b03821690638a91b0e3906129d69088908890600401614b7a565b600060405180830381600087803b1580156129f057600080fd5b505af1158015612a04573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b038516612a2357600194505b6000612a2e8761216c565b80546001600160a01b0319166001600160a01b038881169190911782556040516306d61fe760e41b8152919250881690636d61fe7090612a749088908890600401614b7a565b600060405180830381600087803b158015612a8e57600080fd5b505af1158015612aa2573d6000803e3d6000fd5b505050506001600160a01b038616600114612b18576040516306d61fe760e41b81526001600160a01b03871690636d61fe7090612ae59086908690600401614b7a565b600060405180830381600087803b158015612aff57600080fd5b505af1158015612b13573d6000803e3d6000fd5b505050505b50505050505050565b6001600160a01b038516612b3457600194505b7f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b80546001600160a01b0319166001600160a01b03881690811782556040516306d61fe760e41b8152829190636d61fe7090612b969089908990600401614b7a565b600060405180830381600087803b158015612bb057600080fd5b505af1158015612bc4573d6000803e3d6000fd5b50505050600182810180546001600160a01b0319166001600160a01b038a16908117909155146123d9576040516306d61fe760e41b81526001600160a01b03881690636d61fe7090612c1c9087908790600401614b7a565b600060405180830381600087803b158015612c3657600080fd5b505af1158015612c4a573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038316612c6b57600192505b6000612c76866106ee565b80546001600160a01b038087166001600160a01b03199283168117845560018085018054938b16939094169290921790925591925014611642576040516306d61fe760e41b81526001600160a01b03851690636d61fe70906129d69086908690600401614b7a565b606083600881901b612cf482600160f81b612451565b15612d7e5784358501602081019035612d0e836000612451565b15612d2457612d1d8282613a44565b9450612d77565b612d3283600160f81b612451565b15612d4157612d1d8282613b14565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610a48565b5050611eae565b612d89826000612451565b15612eb757600080366000612d9e8989613c41565b6040805160018082528183019092529498509296509094509250816020015b6060815260200190600190039081612dbd5790505096506000612de08682612451565b15612e1457612df185858585613c92565b88600081518110612e0457612e04614e11565b6020026020010181905250612ead565b612e2286600160f81b612451565b15612d4157612e3385858585613cc8565b89600081518110612e4657612e46614e11565b6020908102919091010152905080612ead577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7600089600081518110612e8e57612e8e614e11565b6020026020010151604051612ea4929190614e27565b60405180910390a15b5050505050611eae565b612ec9826001600160f81b0319612451565b15612d41576000612edd6014828789614a21565b612ee691614b47565b60601c9050366000612efb876014818b614a21565b91509150612ead8383836108c4565b6000612f14612148565b9050823583016020810190358060fe811180612f2e575081155b15612f4c5760405163b62d956d60e01b815260040160405180910390fd5b60005b612f5a600184614e40565b8110156130e4576001600160e01b0319881660009081526003860160205260409020600101848483818110612f9157612f91614e11565b9050602002810190612fa39190614b01565b612fb291601691600091614a21565b612fbb91614e53565b81546001810183556000928352602090922090910180546001600160b01b03191660509290921c919091179055838382818110612ffa57612ffa614e11565b905060200281019061300c9190614b01565b61301b91601691600291614a21565b61302491614b47565b60601c636d61fe706001600160e01b03198a1686868581811061304957613049614e11565b905060200281019061305b9190614b01565b613069916016908290614a21565b60405160200161307b93929190614e84565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016130a69190614795565b600060405180830381600087803b1580156130c057600080fd5b505af11580156130d4573d6000803e3d6000fd5b505060019092019150612f4f9050565b50600083836130f4600182614e40565b81811061310357613103614e11565b90506020028101906131159190614b01565b61312491601691600291614a21565b61312d91614b47565b6001600160e01b031989166000908152600387016020526040902080546201000060609390931c92830262010000600160b01b031990911617905590508383613177600182614e40565b81811061318657613186614e11565b90506020028101906131989190614b01565b6131a791600291600091614a21565b6131b091614e9e565b6001600160e01b0319891660008181526003880160205260409020805461ffff191660f09390931c929092179091556001600160a01b03821690636d61fe709086866131fd600182614e40565b81811061320c5761320c614e11565b905060200281019061321e9190614b01565b61322c916016908290614a21565b60405160200161323e93929190614e84565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401612c1c9190614795565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141661335c5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60008036600080613390612148565b60408051610120810182526000808252602082018190529181018290526080810182905260a0810191909152606060c082018190526001600160e01b03198d16908201526001600160a01b038b1660e082015261010081018a90529091506133fa81838a8a613cf9565b8787600081811061340d5761340d614e11565b9091013560f81c60ff1490506134365760405163b32eeb6960e01b815260040160405180910390fd5b613443876001818b614a21565b60608301516001600160e01b0319166000908152600394909401602052604093849020549390920151620100009093046001600160a01b03169c929b509950975095505050505050565b600060a082901c65ffffffffffff1682811560001981016134b25765ffffffffffff92505b508360d01c92509193909250565b6000366000806134ce612148565b905060003660006134e18b8b8b8b613f7d565b8654929550909350915060581b60006134fe82600160f81b612451565b1561358a578554604051637aa8f17760e11b81526001600160a81b038216916001600160a01b03169063f551e2ee906135419030908a908a908a90600401614ab2565b602060405180830381865afa15801561355e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135829190614ae4565b915050613640565b61359882600160f91b612451565b156123c057855460601b60006135b18230898989613381565b60405163392dffaf60e01b8152929e5090985096509091506001600160a01b0382169063392dffaf906135fa906001600160e01b031986169030908c908c908c90600401614b8e565b602060405180830381865afa158015613617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363b9190614ae4565b925050505b630b135d3f60e11b6001600160e01b0319821614613671576040516362467c7760e11b815260040160405180910390fd5b50969b60948a0135909901603481019b506014013599505050505050505050565b600081830160601b8260601b81148460601b8214176001600160a01b03848618161517600181146136c65760019250613748565b6001600160d01b031980851690861681811881831102188686176001600160a01b031617935065ffffffffffff60a01b8616908161370b5765ffffffffffff60a01b91505b5065ffffffffffff60a01b851680613729575065ffffffffffff60a01b5b808218908211021880613742575065ffffffffffff60a01b5b92909217915b505092915050565b600080600061375d612148565b6001600160e01b03198816600090815260038201602052604081209192506001909101905b8154811015613988576000806137bb8484815481106137a3576137a3614e11565b60009182526020909120015460501b90605082901c90565b915091506000898960008181106137d4576137d4614e11565b919091013560f81c91505083810361387b5760006137f6600960018c8e614a21565b6137ff91614ecc565b60c01c90508a60098b6138128483614efa565b9261381f93929190614a21565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008d01528a8a613866836009614efa565b613871928290614a21565b9a509a50506138b5565b838160ff16101561389f57604051630760bdcf60e11b815260040160405180910390fd5b6040805160208101909152600081526101008c01525b600160f01b831660000361397d576000826001600160a01b0316637129edce8e6001600160e01b0319168e6040518363ffffffff1660e01b81526004016138fd929190614f0d565b6020604051808303816000875af115801561391c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139409190614dcf565b9050806001600160a01b0381161561396e57604051631f24c1fb60e11b815260048101879052602401610a48565b6139788a83613692565b995050505b505050600101613782565b508585600081811061399c5761399c614e11565b9091013560f81c60ff1490506139c55760405163b32eeb6960e01b815260040160405180910390fd5b6139d28560018189614a21565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008c01949094525050506001600160e01b03198916815260039092016020525060409020546001600160a01b036201000090910416905094509492505050565b606081806001600160401b03811115613a5f57613a5f6148f7565b604051908082528060200260200182016040528015613a9257816020015b6060815260200190600190039081613a7d5790505b50915060005b818110156137485736858583818110613ab357613ab3614e11565b9050602002810190613ac59190614f26565b9050613aee613ad76020830183614612565b6020830135613ae96040850185614b01565b613c92565b848381518110613b0057613b00614e11565b602090810291909101015250600101613a98565b606081806001600160401b03811115613b2f57613b2f6148f7565b604051908082528060200260200182016040528015613b6257816020015b6060815260200190600190039081613b4d5790505b50915060005b818110156137485736858583818110613b8357613b83614e11565b9050602002810190613b959190614f26565b90506000613bc0613ba96020840184614612565b6020840135613bbb6040860186614b01565b613cc8565b868581518110613bd257613bd2614e11565b6020908102919091010152905080613c37577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb783868581518110613c1857613c18614e11565b6020026020010151604051613c2e929190614e27565b60405180910390a15b5050600101613b68565b6000803681613c536014828789614a21565b613c5c91614b47565b60601c9350613c6f603460148789614a21565b613c7891614f46565b9250613c878560348189614a21565b949793965094505050565b60405181838237600038838387895af1613caf573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b60608401516001600160e01b03191660009081526003840160205260408120600101905b815481101561164257613d3b8282815481106137a3576137a3614e11565b6001600160a01b031660a08801526001600160f01b03191660808701528383600081613d6957613d69614e11565b919091013560f81c8088528290039050613e1d57613d8b600960018587614a21565b613d9491614ecc565b60c01c6020870181905284906009908590613daf9083614efa565b92613dbc93929190614a21565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c0870152602086015184908490613e09906009614efa565b613e14928290614a21565b93509350613e89565b855160ff16811115613e4257604051630760bdcf60e11b815260040160405180910390fd5b613e4f6000808587614a21565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701525b6080860151600160f11b16600003613f755760a0860151606087015160e088015161010089015160c08a015160405163184dfdbb60e11b81526000956001600160a01b03169463309bfb7694613ef0946001600160e01b0319909216939092600401614f64565b602060405180830381865afa158015613f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f319190614dcf565b9050806001600160a01b03811615613f5f57604051631f24c1fb60e11b815260048101849052602401610a48565b613f6d886040015183613692565b604089015250505b600101613d1d565b60003660008036600036600036600080613f988f8e8e614101565b9750975097509750975097509750975060748d013560348e0101995060208a03359850613fc98f89898989896121b8565b600482106140ee576001600160e01b03198e16613fea600460008587614a21565b613ff391614a4b565b6001600160e01b0319161461403d5760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b21039b2b632b1ba37b960811b6044820152606401610a48565b602c821061409b5761408a8e614057601860048688614a21565b61406091614b47565b60601c614071602c60188789614a21565b61407a91614b47565b60601c61196d86602c818a614a21565b6140968f8f60016142b3565b6140ee565b600482146140e25760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606401610a48565b6140ee8f8f60016142b3565b9950505050505050509450945094915050565b6040805180820190915260008082526020820152366000366000366000806000614129612148565b9050614139601460008c8e614a21565b61414291614b47565b60601c89602001906001600160a01b031690816001600160a01b0316815250508060000160159054906101000a900463ffffffff16896000019063ffffffff16908163ffffffff168152505060148b013560348c010197506020880335965060348b013560348c010195506020860335945060548b013560348c01019350602084033592506142a37fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5058d8360000160159054906101000a900463ffffffff168c602001518c8c604051614216929190614f91565b60405180910390208b8b60405161422e929190614f91565b60405180910390208a8a604051614246929190614f91565b6040805191829003822060208301989098526001600160581b03199096169581019590955263ffffffff90931660608501526001600160a01b03909116608084015260a083015260c082015260e08101919091526101000161249e565b9150509397509397509397509397565b60006142bd612148565b6001600160581b03198516600081815260028301602090815260408083206001600160e01b0319891680855290835292819020805488151560ff1990911681179091558151938452918301939093528183015290519192507f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a919081900360600190a150505050565b6001600160a01b038116811461435b57600080fd5b50565b803561214381614346565b60008083601f84011261437b57600080fd5b5081356001600160401b0381111561439257600080fd5b6020830191508360208285010111156143aa57600080fd5b9250929050565b600080600080606085870312156143c757600080fd5b8435935060208501356143d981614346565b925060408501356001600160401b038111156143f457600080fd5b61440087828801614369565b95989497509550505050565b80356001600160581b03198116811461214357600080fd5b6000806000806000806080878903121561443d57600080fd5b6144468761440c565b9550602087013561445681614346565b945060408701356001600160401b038082111561447257600080fd5b61447e8a838b01614369565b9096509450606089013591508082111561449757600080fd5b506144a489828a01614369565b979a9699509497509295939492505050565b6000806000604084860312156144cb57600080fd5b8335925060208401356001600160401b038111156144e857600080fd5b6144f486828701614369565b9497909650939450505050565b6000610120828403121561451457600080fd5b50919050565b60008060006060848603121561452f57600080fd5b83356001600160401b0381111561454557600080fd5b61455186828701614501565b9660208601359650604090950135949350505050565b60006020828403121561457957600080fd5b813563ffffffff81168114610ce257600080fd5b60006020828403121561459f57600080fd5b610ce28261440c565b6001600160e01b03198116811461435b57600080fd5b6000602082840312156145d057600080fd5b8135610ce2816145a8565b600080604083850312156145ee57600080fd5b6145f78361440c565b91506020830135614607816145a8565b809150509250929050565b60006020828403121561462457600080fd5b8135610ce281614346565b60008060006040848603121561464457600080fd5b61464d8461440c565b925060208401356001600160401b038111156144e857600080fd5b60005b8381101561468357818101518382015260200161466b565b50506000910152565b600081518084526146a4816020860160208601614668565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e060208401526146d960e084018a61468c565b83810360408501526146eb818a61468c565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561473f57835183529284019291840191600101614723565b50909c9b505050505050505050505050565b6000806040838503121561476457600080fd5b82356001600160401b0381111561477a57600080fd5b61478685828601614501565b95602094909401359450505050565b602081526000610ce2602083018461468c565b6000602082840312156147ba57600080fd5b5035919050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561481857603f1988860301845261480685835161468c565b945092850192908501906001016147ea565b5092979650505050505050565b602080825282516001600160f01b03191682820152828101516001600160a01b031660408084019190915283015160608084015280516080840181905260009291820190839060a08601905b8083101561489e57835169ffffffffffffffffffff19168252928401926001929092019190840190614871565b509695505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906125b090830184866148a9565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614930576149306148f7565b60405290565b604051601f8201601f191681016001600160401b038111828210171561495e5761495e6148f7565b604052919050565b60006001600160401b0382111561497f5761497f6148f7565b50601f01601f191660200190565b60006020828403121561499f57600080fd5b81516001600160401b038111156149b557600080fd5b8201601f810184136149c657600080fd5b80516149d96149d482614966565b614936565b8181528560208385010111156149ee57600080fd5b6125b0826020830160208601614668565b600060208284031215614a1157600080fd5b81518015158114610ce257600080fd5b60008085851115614a3157600080fd5b83861115614a3e57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156137485760049490940360031b84901b1690921692915050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818103614aa857614aa8614a79565b6001019392505050565b60018060a01b0385168152836020820152606060408201526000614ada6060830184866148a9565b9695505050505050565b600060208284031215614af657600080fd5b8151610ce2816145a8565b6000808335601e19843603018112614b1857600080fd5b8301803591506001600160401b03821115614b3257600080fd5b6020019150368190038213156143aa57600080fd5b6bffffffffffffffffffffffff1981358181169160148510156137485760149490940360031b84901b1690921692915050565b6020815260006107f76020830184866148a9565b85815260018060a01b0385166020820152836040820152608060608201526000614bbc6080830184866148a9565b979650505050505050565b600082601f830112614bd857600080fd5b8135614be66149d482614966565b818152846020838601011115614bfb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215614c2b57600080fd5b614c3361490d565b614c3c8361435e565b81526020830135602082015260408301356001600160401b0380821115614c6257600080fd5b614c6e36838701614bc7565b60408401526060850135915080821115614c8757600080fd5b614c9336838701614bc7565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e0850135915080821115614cca57600080fd5b614cd636838701614bc7565b60e084015261010091508185013581811115614cf157600080fd5b614cfd36828801614bc7565b8385015250505080915050919050565b80516001600160a01b031682526000610120602083015160208501526040830151816040860152614d408286018261468c565b91505060608301518482036060860152614d5a828261468c565b9150506080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152614d92828261468c565b9150506101008084015185830382870152614ada838261468c565b604081526000614dc06040830185614d0d565b90508260208301529392505050565b600060208284031215614de157600080fd5b5051919050565b838152606060208201526000614e016060830185614d0d565b9050826040830152949350505050565b634e487b7160e01b600052603260045260246000fd5b8281526040602082015260006107f7604083018461468c565b818103818111156112e2576112e2614a79565b69ffffffffffffffffffff1981358181169160168510156137485760169490940360031b84901b1690921692915050565b838152818360208301376000910160200190815292915050565b6001600160f01b031981358181169160028510156137485760029490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156137485760089490940360031b84901b1690921692915050565b808201808211156112e2576112e2614a79565b8281526040602082015260006107f76040830184614d0d565b60008235605e19833603018112614f3c57600080fd5b9190910192915050565b803560208310156112e257600019602084900360031b1b1692915050565b84815260018060a01b0384166020820152826040820152608060608201526000614ada608083018461468c565b818382376000910190815291905056fea26469706673582212207aae277b50f37d0f482e9f52c381a27653d542c7dc01e629c367059d5a5f98b264736f6c634300081800330000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x25", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x1f074aae0216c7f4d13661a11189edb7bf304fd1efbf5c3d6f2f372774d2c89b" + ], + "returns": {}, + "timestamp": 1710948578, + "chain": 11155111, + "multi": false, + "commit": "19ba63c" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/11155111/run-1710948591.json b/broadcast/Deploy.s.sol/11155111/run-1710948591.json new file mode 100644 index 00000000..10390adb --- /dev/null +++ b/broadcast/Deploy.s.sol/11155111/run-1710948591.json @@ -0,0 +1,51 @@ +{ + "transactions": [ + { + "hash": "0x1f074aae0216c7f4d13661a11189edb7bf304fd1efbf5c3d6f2f372774d2c89b", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x079D5D8A3275A230AF743cB59c341Ff74B82488D", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee7ca", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006101406040523480156200001257600080fd5b506040516200522a3803806200522a833981016040819052620000359162000168565b306080524660a05260608062000085604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152808501939093528281019190915246606083015230608083015260a0909120610100526001600160a01b03851661012052805163deadbeef60e01b92810192909252805160048184030181526024909201905262000128925090506200019a565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b03191660589290921c91909117905550620001d2565b6000602082840312156200017b57600080fd5b81516001600160a01b03811681146200019357600080fd5b9392505050565b805160208201516001600160581b03198082169291906015831015620001ca5780818460150360031b1b83161693505b505050919050565b60805160a05160c05160e0516101005161012051614fd7620002536000396000818161058801528181610cf60152818161102c015281816113380152818161154e0152818161168101528181611bcb0152611fb60152600061326b01526000613325015260006132ff015260006132af0152600061328c0152614fd76000f3fe60806040526004361061016a5760003560e01c806390ef8862116100d1578063b101dd3a1161008a578063e0dfd36511610064578063e0dfd36514610660578063e9ae5c531461068d578063f1f7f0f9146106a0578063f2dc691d146106ce576101a9565b8063b101dd3a146105ea578063d03c79141461061f578063d691c96414610640576101a9565b806390ef8862146104ed5780639517e29f146105175780639cfd7cff1461052a578063a65d69d414610576578063a71763a8146105c2578063adb610a3146105d5576101a9565b806357b3a5f41161012357806357b3a5f4146104005780636e6fa0c614610447578063721e67f41461046757806383d423591461049f57806384b0196e146104b25780638dd7712f146104da576101a9565b8063112d3a7d146102f457806312af322c146103295780631626ba7e1461034957806319822f7c146103825780631f1b92e3146103a3578063364d7a70146103b6576101a9565b366101a957604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b60006101c06000356001600160e01b0319166106ee565b6040805180820190915281546001600160a01b039081168083526001909301541660208201529150600090606090610280576000806101fd610728565b90925090506001600160a01b03821661022957604051635a93724d60e01b815260040160405180910390fd5b6001600160a01b03811660011461026a5760006102488260003661077d565b9050610253836107ff565b90955093506102648282878761084e565b50610279565b610273826107ff565b90945092505b50506102dd565b82516060906001600160a01b03166001146102a65783516102a39060003661077d565b90505b6102b684602001516000366108c4565b855191945092506001600160a01b03166001146102db5783516102db9082858561084e565b505b816102ea57805160208201fd5b805160208201f35b005b34801561030057600080fd5b5061031461030f3660046143b1565b6108f3565b60405190151581526020015b60405180910390f35b34801561033557600080fd5b506102f2610344366004614424565b6109ed565b34801561035557600080fd5b506103696103643660046144b6565b610b47565b6040516001600160e01b03199091168152602001610320565b61039561039036600461451a565b610ce9565b604051908152602001610320565b6102f26103b1366004614567565b611005565b3480156103c257600080fd5b506103d66103d136600461458d565b6111ec565b60408051825163ffffffff1681526020928301516001600160a01b03169281019290925201610320565b34801561040c57600080fd5b5061042061041b3660046145be565b611255565b6040805182516001600160a01b039081168252602093840151169281019290925201610320565b34801561045357600080fd5b506103146104623660046145db565b61129f565b34801561047357600080fd5b50610487610482366004614612565b6112e8565b60405190516001600160a01b03168152602001610320565b6102f26104ad36600461462f565b61131e565b3480156104be57600080fd5b506104c76114e0565b60405161032097969594939291906146b8565b6102f26104e8366004614751565b611543565b3480156104f957600080fd5b5061050261164a565b60405163ffffffff9091168152602001610320565b6102f26105253660046143b1565b611667565b34801561053657600080fd5b50604080518082018252601b81527f6b65726e656c2e616476616e6365642e76302e332e302d626574610000000000602082015290516103209190614795565b34801561058257600080fd5b506105aa7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610320565b6102f26105d03660046143b1565b611bb1565b3480156105e157600080fd5b50610502611ddb565b3480156105f657600080fd5b506105ff611df8565b604080516001600160a01b03938416815292909116602083015201610320565b34801561062b57600080fd5b5061031461063a3660046147a8565b50600190565b61065361064e3660046144b6565b611e0b565b60405161032091906147c1565b34801561066c57600080fd5b5061068061067b36600461458d565b611eb7565b6040516103209190614825565b6102f261069b3660046144b6565b611f9c565b3480156106ac57600080fd5b506106b5612115565b6040516001600160581b03199091168152602001610320565b3480156106da57600080fd5b506103146106e93660046147a8565b612128565b6001600160e01b03191660009081527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3d6020526040902090565b7f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b547f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3c546001600160a01b0391821692911690565b604051631057c74d60e11b81526060906001600160a01b038516906320af8e9a906107b0903390879087906004016148d2565b6000604051808303816000875af11580156107cf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107f7919081019061498d565b949350505050565b6000606060408051368101909152366000823760408051601481019091523360601b90526000803660140183875afa92505060405190503d8152602081013d6000823e3d810160405250915091565b604051630b9dfbed60e11b81526001600160a01b0385169063173bf7da9061087a908690600401614795565b6020604051808303816000875af1158015610899573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108bd91906149ff565b5050505050565b604051600090828482376000388483885af491503d8152602081013d6000823e3d810160405250935093915050565b60008460010361094457610905612148565b600101600061091a8660581b600160f81b1790565b6001600160581b031916815260208101919091526040016000205463ffffffff16151590506107f7565b8460020361096a5760006109578561216c565b546001600160a01b0316141590506107f7565b8460030361099c57600061097c610728565b509050846001600160a01b0316816001600160a01b0316149150506107f7565b846006036109e2576001600160a01b0384166109cd6109bf600460008688614a21565b6109c891614a4b565b6106ee565b600101546001600160a01b03161490506107f7565b506000949350505050565b60006109f7612148565b805490915060581b6001600160581b03191615610a515760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b6001600160581b03198716610a7957604051631a0a9b9f60e21b815260040160405180910390fd5b86610a8881600160f81b6121a5565b8015610a9d5750610a9d81600160f91b6121a5565b15610abb576040516361c4e91b60e11b815260040160405180910390fd5b815460408051808201909152600181526001600160a01b03891660208201526001600160c81b031990911660588a901c17600160a81b178355610b028982898989896121b8565b8254600160a81b900463ffffffff16836015610b1d83614a8f565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050505050505050565b600080610b52612148565b90506000366000610b6387876123e3565b925092509250610b7a610b738490565b6000612451565b15610b8757835460581b92505b6001600160581b03198316600090815260018501602052604090205464010000000090046001600160a01b0316610bd157604051631a0a9b9f60e21b815260040160405180910390fd5b610bdf83600160f81b612451565b15610c79576000610bf08460581c90565b9050806001600160a01b031663f551e2ee33610c0b8c612463565b86866040518563ffffffff1660e01b8152600401610c2c9493929190614ab2565b602060405180830381865afa158015610c49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c6d9190614ae4565b95505050505050610ce2565b6000610c858460081b90565b6001600160e01b03198116600090815260038701602052604090205490915060f01b600160f11b811615610ccc57604051635b71057960e01b815260040160405180910390fd5b610cd982338c87876124b9565b96505050505050505b9392505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610d34576040516348f5c3ed60e01b815260040160405180910390fd5b6000610d3e612148565b90506000806000610d5288602001356125b9565b91945092509050610d64826000612451565b15610d705750825460581b5b610d7c83828a8a6125e7565b6001600160581b031982166000908152600186016020908152604080832081518083019092525463ffffffff8116825264010000000090046001600160a01b031691810191909152919650610dd29084906121a5565b8015610df057508454815163ffffffff600160c81b90920482169116105b15610e0e57604051633ab3447f60e11b815260040160405180910390fd5b60208101516001600160a01b038116610e3a57604051631a0a9b9f60e21b815260040160405180910390fd5b600089815260208190526040902080546001600160a01b0319166001600160a01b03831690811790915560001901610f0257610e778460006121a5565b8015610edf57506001600160581b031983166000908152600287016020526040812090610ea760608d018d614b01565b610eb691600491600091614a21565b610ebf91614a4b565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610efd57604051631a0a9b9f60e21b815260040160405180910390fd5b610fe8565b610f0d8460006121a5565b8015610f7557506001600160581b031983166000908152600287016020526040812090610f3d60608d018d614b01565b610f4c91600891600491614a21565b610f5591614a4b565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610f9357604051631a0a9b9f60e21b815260040160405180910390fd5b638dd7712f60e01b610fa860608c018c614b01565b610fb791600491600091614a21565b610fc091614a4b565b6001600160e01b03191614610fe85760405163dbbb044b60e01b815260040160405180910390fd5b8715610ff857343434348b335af1505b5050505050509392505050565b600061101f611012612148565b546001600160a81b031690565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061105a5750333014155b156111df5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156110a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c791906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906110ff903390859036906004016148d2565b6000604051808303816000875af115801561111e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611146919081019061498d565b9050611151836128ae565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061117d908490600401614795565b6020604051808303816000875af115801561119c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c091906149ff565b50505050565b6040516348f5c3ed60e01b815260040160405180910390fd5b6111e8826128ae565b5050565b6040805180820190915260008082526020820152611208612148565b6001600160581b03199290921660009081526001909201602090815260409283902083518085019094525463ffffffff8116845264010000000090046001600160a01b0316908301525090565b6040805180820190915260008082526020820152611272826106ee565b6040805180820190915281546001600160a01b039081168252600190920154909116602082015292915050565b60006112a9612148565b6001600160581b031984166000908152600291909101602090815260408083206001600160e01b03198616845290915290205460ff1690505b92915050565b6040805160208101909152600081526113008261216c565b604080516020810190915290546001600160a01b0316815292915050565b600061132b611012612148565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906113665750333014155b156114d55760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156113af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d391906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061140b903390859036906004016148d2565b6000604051808303816000875af115801561142a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611452919081019061498d565b905061145f85858561294c565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061148b908490600401614795565b6020604051808303816000875af11580156114aa573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ce91906149ff565b50506111c0565b6111c084848461294c565b600f60f81b6060806000808083611531604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b97989097965046955030945091925090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461158c576040516348f5c3ed60e01b815260040160405180910390fd5b6000818152602081905260409020546060906001600160a01b0316600181146115d6576115d3816115c06060870187614b01565b6115ce916004908290614a21565b61077d565b91505b6000806115fd306115ea6060890189614b01565b6115f8916004908290614a21565b6108c4565b90925090506001600160a01b0383166001146116245761161f8385848461084e565b611642565b816116425760405163f21e646b60e01b815260040160405180910390fd5b505050505050565b6000611654612148565b54600160c81b900463ffffffff16919050565b6000611674611012612148565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906116af5750333014155b15611a065760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c91906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611754903390859036906004016148d2565b6000604051808303816000875af1158015611773573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261179b919081019061498d565b9050856001036118785760006117af612148565b905060006117c38760581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff168152909150600090602081016117f56014848a8c614a21565b6117fe91614b47565b60601c9052905060148781013588016034818101929182013591818b01358b019182019101356118328686868686866121b8565b8654600160a81b900463ffffffff1687601561184d83614a8f565b91906101000a81548163ffffffff021916908363ffffffff1602179055505050505050505050611990565b856002036118d2576014848101358501603481810192918201359181880135880191820191810135906118c9908a906118b49060008b8d614a21565b6118bd91614b47565b60601c86868686612a10565b50505050611990565b85600303611923576014848101358501603481810192918201359181880135880191820191810135906118c9908a9061190e9060008b8d614a21565b61191791614b47565b60601c86868686612b21565b856006036119775761197261193c600460008688614a21565b61194591614a4b565b8661195460186004888a614a21565b61195d91614b47565b60601c61196d876018818b614a21565b612c58565b611990565b604051631092ef5760e11b815260040160405180910390fd5b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906119bc908490600401614795565b6020604051808303816000875af11580156119db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119ff91906149ff565b50506108bd565b84600103611ae1576000611a18612148565b90506000611a2c8660581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff16815290915060009060208101611a5e601484898b614a21565b611a6791614b47565b60601c9052905060148681013587016034818101929182013591818a01358a01918201910135611a9b8686868686866121b8565b8654600160a81b900463ffffffff16876015611ab683614a8f565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505050505050506108bd565b84600203611b2657601483810135840160348181019291820135918187013587019182019181013590611b1d9089906118b49060008a8c614a21565b505050506108bd565b84600303611b6257601483810135840160348181019291820135918187013587019182019181013590611b1d90899061190e9060008a8c614a21565b8460060361197757611bac611b7b600460008587614a21565b611b8491614a4b565b85611b93601860048789614a21565b611b9c91614b47565b60601c61196d866018818a614a21565b6108bd565b6000611bbe611012612148565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611bf95750333014155b15611d745760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611c42573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c6691906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611c9e903390859036906004016148d2565b6000604051808303816000875af1158015611cbd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ce5919081019061498d565b604051638a91b0e360e01b81529091506001600160a01b03861690638a91b0e390611d169087908790600401614b7a565b600060405180830381600087803b158015611d3057600080fd5b505af1158015611d44573d6000803e3d6000fd5b5050604051630b9dfbed60e11b81526001600160a01b038516925063173bf7da91506119bc908490600401614795565b604051638a91b0e360e01b81526001600160a01b03851690638a91b0e390611da29086908690600401614b7a565b600060405180830381600087803b158015611dbc57600080fd5b505af1158015611dd0573d6000803e3d6000fd5b505050505050505050565b6000611de5612148565b54600160a81b900463ffffffff16919050565b600080611e03610728565b915091509091565b60606000611e183361216c565b546001600160a01b0316905080611e425760405163710c949760e01b815260040160405180910390fd5b60606001600160a01b038216600114611e6457611e618260003661077d565b90505b611e6f868686612cde565b92506001600160a01b038216600114611eae57611eae8282600186604051602001611e9a91906147c1565b60405160208183030381529060405261084e565b50509392505050565b60408051606080820183526000808352602083015291810191909152600882901b611ee0612148565b6001600160e01b03198216600090815260039190910160209081526040918290208251606081018452815460f081901b6001600160f01b03191682526201000090046001600160a01b03168184015260018201805485518186028101860187528181529295939493860193830182828015611f8b57602002820191906000526020600020905b815460501b69ffffffffffffffffffff19168152600190910190602001808311611f66575b505050505081525050915050919050565b6000611fa9611012612148565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611fe45750333014155b1561210a5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561202d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061205191906149ff565b156111c657604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90612089903390859036906004016148d2565b6000604051808303816000875af11580156120a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120d0919081019061498d565b90506120dd858585612cde565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061148b908490600401614795565b6108bd848484612cde565b600061211f612148565b5460581b919050565b6000600882101561213b57506001919050565b506000919050565b919050565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f90565b6001600160a01b031660009081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b6001600160f81b03199081169116141590565b60006121c2612148565b60208701519091506001600160a01b03166121df57600160208701525b85518154600160a81b900463ffffffff9081169116141580612227575085516001600160581b03198816600090815260018301602052604090205463ffffffff918216911610155b1561224557604051633ab3447f60e11b815260040160405180910390fd5b6001600160581b03198716600090815260018083016020908152604090922088518154938a01516001600160a01b031664010000000081026001600160c01b031990951663ffffffff90921691909117939093179055146123055785602001516001600160a01b0316636d61fe7084846040518363ffffffff1660e01b81526004016122d2929190614b7a565b600060405180830381600087803b1580156122ec57600080fd5b505af1158015612300573d6000803e3d6000fd5b505050505b8661231481600160f81b612451565b1561238e5760006123258960581c90565b6040516306d61fe760e41b81529091506001600160a01b03821690636d61fe7090612356908a908a90600401614b7a565b600060405180830381600087803b15801561237057600080fd5b505af1158015612384573d6000803e3d6000fd5b50505050506123d9565b61239c81600160f91b612451565b156123c05760006123ad8960081b90565b90506123ba818888612f0a565b506123d9565b6040516361c4e91b60e11b815260040160405180910390fd5b5050505050505050565b813536600060f883901c8015612409576001811461241e576002811461242f5760206000fd5b60009350600186019250600186039150612449565b601586019250601585039150612449565b6001600160d81b0319841693506005860192506005850391505b509250925092565b6001600160f81b031990811691161490565b604080517f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8360208201529081018290526000906112e2906060015b60405160208183030381529060405280519060200120613269565b60008060003660006124ce8a8a8a8a8a613381565b93509350935093506000806124e28561348d565b50915091508165ffffffffffff1642108061250457508065ffffffffffff1642115b1561252057506001600160e01b031995506125b0945050505050565b6001600160a01b03861663392dffaf6001600160e01b03198e168d6125448e612463565b88886040518663ffffffff1660e01b8152600401612566959493929190614b8e565b602060405180830381865afa158015612583573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a79190614ae4565b96505050505050505b95945050505050565b80600881901b8060ff60f084901c1660011981016125df576001600160d81b0319821691505b509193909250565b6000806125f2612148565b905060006125ff85614c18565b9050366000612612610100880188614b01565b909250905061262589600160f81b612451565b1561274e576000638dd7712f60e01b61264160608a018a614b01565b61265091600491600091614a21565b61265991614a4b565b6001600160e01b03191614612692576126756060890189614b01565b61268491600491600091614a21565b61268d91614a4b565b6126b7565b61269f6060890189614b01565b6126ae91600891600491614a21565b6126b791614a4b565b90506126d189826126cc6101008c018c614b01565b6134c0565b604080516020601f8401819004810282018101909252828152939950919550935084908490819084018382808284376000920191909152505050506101008501528454600160a81b900463ffffffff1685601561272d83614a8f565b91906101000a81548163ffffffff021916908363ffffffff16021790555050505b8761275d81600160f81b612451565b156127ec576127e5866127708b60581c90565b6001600160a01b03166397003203878b6040518363ffffffff1660e01b815260040161279d929190614dad565b6020604051808303816000875af11580156127bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e09190614dcf565b613692565b95506128a1565b60006127f88a60081b90565b6001600160e01b03198116600090815260038801602052604090205490915060f01b600160f01b161561283e576040516314b9743f60e01b815260040160405180910390fd5b60008061284d83888888613750565b9150915061285b8983613692565b985061289b89826001600160a01b0316630ccab7a1866001600160e01b0319168b8f6040518463ffffffff1660e01b815260040161279d93929190614de8565b98505050505b5050505050949350505050565b60006128b8612148565b805490915063ffffffff600160c81b9091048116908316116128ed57604051633ab3447f60e11b815260040160405180910390fd5b805463ffffffff60c81b1916600160c81b63ffffffff8481168202929092178084559081048216600160a81b90910490911610156111e857805463ffffffff60a81b198116600160c81b90910463ffffffff16600160a81b0217905550565b6000612956612148565b6001600160581b03198516600090815260018201602052604090208054640100000000600160c01b031916905590508361299481600160f81b612451565b156108bd5760006129a58660581c90565b604051638a91b0e360e01b81529091506001600160a01b03821690638a91b0e3906129d69088908890600401614b7a565b600060405180830381600087803b1580156129f057600080fd5b505af1158015612a04573d6000803e3d6000fd5b50505050505050505050565b6001600160a01b038516612a2357600194505b6000612a2e8761216c565b80546001600160a01b0319166001600160a01b038881169190911782556040516306d61fe760e41b8152919250881690636d61fe7090612a749088908890600401614b7a565b600060405180830381600087803b158015612a8e57600080fd5b505af1158015612aa2573d6000803e3d6000fd5b505050506001600160a01b038616600114612b18576040516306d61fe760e41b81526001600160a01b03871690636d61fe7090612ae59086908690600401614b7a565b600060405180830381600087803b158015612aff57600080fd5b505af1158015612b13573d6000803e3d6000fd5b505050505b50505050505050565b6001600160a01b038516612b3457600194505b7f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b80546001600160a01b0319166001600160a01b03881690811782556040516306d61fe760e41b8152829190636d61fe7090612b969089908990600401614b7a565b600060405180830381600087803b158015612bb057600080fd5b505af1158015612bc4573d6000803e3d6000fd5b50505050600182810180546001600160a01b0319166001600160a01b038a16908117909155146123d9576040516306d61fe760e41b81526001600160a01b03881690636d61fe7090612c1c9087908790600401614b7a565b600060405180830381600087803b158015612c3657600080fd5b505af1158015612c4a573d6000803e3d6000fd5b505050505050505050505050565b6001600160a01b038316612c6b57600192505b6000612c76866106ee565b80546001600160a01b038087166001600160a01b03199283168117845560018085018054938b16939094169290921790925591925014611642576040516306d61fe760e41b81526001600160a01b03851690636d61fe70906129d69086908690600401614b7a565b606083600881901b612cf482600160f81b612451565b15612d7e5784358501602081019035612d0e836000612451565b15612d2457612d1d8282613a44565b9450612d77565b612d3283600160f81b612451565b15612d4157612d1d8282613b14565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610a48565b5050611eae565b612d89826000612451565b15612eb757600080366000612d9e8989613c41565b6040805160018082528183019092529498509296509094509250816020015b6060815260200190600190039081612dbd5790505096506000612de08682612451565b15612e1457612df185858585613c92565b88600081518110612e0457612e04614e11565b6020026020010181905250612ead565b612e2286600160f81b612451565b15612d4157612e3385858585613cc8565b89600081518110612e4657612e46614e11565b6020908102919091010152905080612ead577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7600089600081518110612e8e57612e8e614e11565b6020026020010151604051612ea4929190614e27565b60405180910390a15b5050505050611eae565b612ec9826001600160f81b0319612451565b15612d41576000612edd6014828789614a21565b612ee691614b47565b60601c9050366000612efb876014818b614a21565b91509150612ead8383836108c4565b6000612f14612148565b9050823583016020810190358060fe811180612f2e575081155b15612f4c5760405163b62d956d60e01b815260040160405180910390fd5b60005b612f5a600184614e40565b8110156130e4576001600160e01b0319881660009081526003860160205260409020600101848483818110612f9157612f91614e11565b9050602002810190612fa39190614b01565b612fb291601691600091614a21565b612fbb91614e53565b81546001810183556000928352602090922090910180546001600160b01b03191660509290921c919091179055838382818110612ffa57612ffa614e11565b905060200281019061300c9190614b01565b61301b91601691600291614a21565b61302491614b47565b60601c636d61fe706001600160e01b03198a1686868581811061304957613049614e11565b905060200281019061305b9190614b01565b613069916016908290614a21565b60405160200161307b93929190614e84565b6040516020818303038152906040526040518263ffffffff1660e01b81526004016130a69190614795565b600060405180830381600087803b1580156130c057600080fd5b505af11580156130d4573d6000803e3d6000fd5b505060019092019150612f4f9050565b50600083836130f4600182614e40565b81811061310357613103614e11565b90506020028101906131159190614b01565b61312491601691600291614a21565b61312d91614b47565b6001600160e01b031989166000908152600387016020526040902080546201000060609390931c92830262010000600160b01b031990911617905590508383613177600182614e40565b81811061318657613186614e11565b90506020028101906131989190614b01565b6131a791600291600091614a21565b6131b091614e9e565b6001600160e01b0319891660008181526003880160205260409020805461ffff191660f09390931c929092179091556001600160a01b03821690636d61fe709086866131fd600182614e40565b81811061320c5761320c614e11565b905060200281019061321e9190614b01565b61322c916016908290614a21565b60405160200161323e93929190614e84565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401612c1c9190614795565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141661335c5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60008036600080613390612148565b60408051610120810182526000808252602082018190529181018290526080810182905260a0810191909152606060c082018190526001600160e01b03198d16908201526001600160a01b038b1660e082015261010081018a90529091506133fa81838a8a613cf9565b8787600081811061340d5761340d614e11565b9091013560f81c60ff1490506134365760405163b32eeb6960e01b815260040160405180910390fd5b613443876001818b614a21565b60608301516001600160e01b0319166000908152600394909401602052604093849020549390920151620100009093046001600160a01b03169c929b509950975095505050505050565b600060a082901c65ffffffffffff1682811560001981016134b25765ffffffffffff92505b508360d01c92509193909250565b6000366000806134ce612148565b905060003660006134e18b8b8b8b613f7d565b8654929550909350915060581b60006134fe82600160f81b612451565b1561358a578554604051637aa8f17760e11b81526001600160a81b038216916001600160a01b03169063f551e2ee906135419030908a908a908a90600401614ab2565b602060405180830381865afa15801561355e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135829190614ae4565b915050613640565b61359882600160f91b612451565b156123c057855460601b60006135b18230898989613381565b60405163392dffaf60e01b8152929e5090985096509091506001600160a01b0382169063392dffaf906135fa906001600160e01b031986169030908c908c908c90600401614b8e565b602060405180830381865afa158015613617573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061363b9190614ae4565b925050505b630b135d3f60e11b6001600160e01b0319821614613671576040516362467c7760e11b815260040160405180910390fd5b50969b60948a0135909901603481019b506014013599505050505050505050565b600081830160601b8260601b81148460601b8214176001600160a01b03848618161517600181146136c65760019250613748565b6001600160d01b031980851690861681811881831102188686176001600160a01b031617935065ffffffffffff60a01b8616908161370b5765ffffffffffff60a01b91505b5065ffffffffffff60a01b851680613729575065ffffffffffff60a01b5b808218908211021880613742575065ffffffffffff60a01b5b92909217915b505092915050565b600080600061375d612148565b6001600160e01b03198816600090815260038201602052604081209192506001909101905b8154811015613988576000806137bb8484815481106137a3576137a3614e11565b60009182526020909120015460501b90605082901c90565b915091506000898960008181106137d4576137d4614e11565b919091013560f81c91505083810361387b5760006137f6600960018c8e614a21565b6137ff91614ecc565b60c01c90508a60098b6138128483614efa565b9261381f93929190614a21565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008d01528a8a613866836009614efa565b613871928290614a21565b9a509a50506138b5565b838160ff16101561389f57604051630760bdcf60e11b815260040160405180910390fd5b6040805160208101909152600081526101008c01525b600160f01b831660000361397d576000826001600160a01b0316637129edce8e6001600160e01b0319168e6040518363ffffffff1660e01b81526004016138fd929190614f0d565b6020604051808303816000875af115801561391c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139409190614dcf565b9050806001600160a01b0381161561396e57604051631f24c1fb60e11b815260048101879052602401610a48565b6139788a83613692565b995050505b505050600101613782565b508585600081811061399c5761399c614e11565b9091013560f81c60ff1490506139c55760405163b32eeb6960e01b815260040160405180910390fd5b6139d28560018189614a21565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008c01949094525050506001600160e01b03198916815260039092016020525060409020546001600160a01b036201000090910416905094509492505050565b606081806001600160401b03811115613a5f57613a5f6148f7565b604051908082528060200260200182016040528015613a9257816020015b6060815260200190600190039081613a7d5790505b50915060005b818110156137485736858583818110613ab357613ab3614e11565b9050602002810190613ac59190614f26565b9050613aee613ad76020830183614612565b6020830135613ae96040850185614b01565b613c92565b848381518110613b0057613b00614e11565b602090810291909101015250600101613a98565b606081806001600160401b03811115613b2f57613b2f6148f7565b604051908082528060200260200182016040528015613b6257816020015b6060815260200190600190039081613b4d5790505b50915060005b818110156137485736858583818110613b8357613b83614e11565b9050602002810190613b959190614f26565b90506000613bc0613ba96020840184614612565b6020840135613bbb6040860186614b01565b613cc8565b868581518110613bd257613bd2614e11565b6020908102919091010152905080613c37577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb783868581518110613c1857613c18614e11565b6020026020010151604051613c2e929190614e27565b60405180910390a15b5050600101613b68565b6000803681613c536014828789614a21565b613c5c91614b47565b60601c9350613c6f603460148789614a21565b613c7891614f46565b9250613c878560348189614a21565b949793965094505050565b60405181838237600038838387895af1613caf573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b60608401516001600160e01b03191660009081526003840160205260408120600101905b815481101561164257613d3b8282815481106137a3576137a3614e11565b6001600160a01b031660a08801526001600160f01b03191660808701528383600081613d6957613d69614e11565b919091013560f81c8088528290039050613e1d57613d8b600960018587614a21565b613d9491614ecc565b60c01c6020870181905284906009908590613daf9083614efa565b92613dbc93929190614a21565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c0870152602086015184908490613e09906009614efa565b613e14928290614a21565b93509350613e89565b855160ff16811115613e4257604051630760bdcf60e11b815260040160405180910390fd5b613e4f6000808587614a21565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701525b6080860151600160f11b16600003613f755760a0860151606087015160e088015161010089015160c08a015160405163184dfdbb60e11b81526000956001600160a01b03169463309bfb7694613ef0946001600160e01b0319909216939092600401614f64565b602060405180830381865afa158015613f0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f319190614dcf565b9050806001600160a01b03811615613f5f57604051631f24c1fb60e11b815260048101849052602401610a48565b613f6d886040015183613692565b604089015250505b600101613d1d565b60003660008036600036600036600080613f988f8e8e614101565b9750975097509750975097509750975060748d013560348e0101995060208a03359850613fc98f89898989896121b8565b600482106140ee576001600160e01b03198e16613fea600460008587614a21565b613ff391614a4b565b6001600160e01b0319161461403d5760405162461bcd60e51b815260206004820152601060248201526f24b73b30b634b21039b2b632b1ba37b960811b6044820152606401610a48565b602c821061409b5761408a8e614057601860048688614a21565b61406091614b47565b60601c614071602c60188789614a21565b61407a91614b47565b60601c61196d86602c818a614a21565b6140968f8f60016142b3565b6140ee565b600482146140e25760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606401610a48565b6140ee8f8f60016142b3565b9950505050505050509450945094915050565b6040805180820190915260008082526020820152366000366000366000806000614129612148565b9050614139601460008c8e614a21565b61414291614b47565b60601c89602001906001600160a01b031690816001600160a01b0316815250508060000160159054906101000a900463ffffffff16896000019063ffffffff16908163ffffffff168152505060148b013560348c010197506020880335965060348b013560348c010195506020860335945060548b013560348c01019350602084033592506142a37fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5058d8360000160159054906101000a900463ffffffff168c602001518c8c604051614216929190614f91565b60405180910390208b8b60405161422e929190614f91565b60405180910390208a8a604051614246929190614f91565b6040805191829003822060208301989098526001600160581b03199096169581019590955263ffffffff90931660608501526001600160a01b03909116608084015260a083015260c082015260e08101919091526101000161249e565b9150509397509397509397509397565b60006142bd612148565b6001600160581b03198516600081815260028301602090815260408083206001600160e01b0319891680855290835292819020805488151560ff1990911681179091558151938452918301939093528183015290519192507f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a919081900360600190a150505050565b6001600160a01b038116811461435b57600080fd5b50565b803561214381614346565b60008083601f84011261437b57600080fd5b5081356001600160401b0381111561439257600080fd5b6020830191508360208285010111156143aa57600080fd5b9250929050565b600080600080606085870312156143c757600080fd5b8435935060208501356143d981614346565b925060408501356001600160401b038111156143f457600080fd5b61440087828801614369565b95989497509550505050565b80356001600160581b03198116811461214357600080fd5b6000806000806000806080878903121561443d57600080fd5b6144468761440c565b9550602087013561445681614346565b945060408701356001600160401b038082111561447257600080fd5b61447e8a838b01614369565b9096509450606089013591508082111561449757600080fd5b506144a489828a01614369565b979a9699509497509295939492505050565b6000806000604084860312156144cb57600080fd5b8335925060208401356001600160401b038111156144e857600080fd5b6144f486828701614369565b9497909650939450505050565b6000610120828403121561451457600080fd5b50919050565b60008060006060848603121561452f57600080fd5b83356001600160401b0381111561454557600080fd5b61455186828701614501565b9660208601359650604090950135949350505050565b60006020828403121561457957600080fd5b813563ffffffff81168114610ce257600080fd5b60006020828403121561459f57600080fd5b610ce28261440c565b6001600160e01b03198116811461435b57600080fd5b6000602082840312156145d057600080fd5b8135610ce2816145a8565b600080604083850312156145ee57600080fd5b6145f78361440c565b91506020830135614607816145a8565b809150509250929050565b60006020828403121561462457600080fd5b8135610ce281614346565b60008060006040848603121561464457600080fd5b61464d8461440c565b925060208401356001600160401b038111156144e857600080fd5b60005b8381101561468357818101518382015260200161466b565b50506000910152565b600081518084526146a4816020860160208601614668565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e060208401526146d960e084018a61468c565b83810360408501526146eb818a61468c565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561473f57835183529284019291840191600101614723565b50909c9b505050505050505050505050565b6000806040838503121561476457600080fd5b82356001600160401b0381111561477a57600080fd5b61478685828601614501565b95602094909401359450505050565b602081526000610ce2602083018461468c565b6000602082840312156147ba57600080fd5b5035919050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561481857603f1988860301845261480685835161468c565b945092850192908501906001016147ea565b5092979650505050505050565b602080825282516001600160f01b03191682820152828101516001600160a01b031660408084019190915283015160608084015280516080840181905260009291820190839060a08601905b8083101561489e57835169ffffffffffffffffffff19168252928401926001929092019190840190614871565b509695505050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b03841681526040602082018190526000906125b090830184866148a9565b634e487b7160e01b600052604160045260246000fd5b60405161012081016001600160401b0381118282101715614930576149306148f7565b60405290565b604051601f8201601f191681016001600160401b038111828210171561495e5761495e6148f7565b604052919050565b60006001600160401b0382111561497f5761497f6148f7565b50601f01601f191660200190565b60006020828403121561499f57600080fd5b81516001600160401b038111156149b557600080fd5b8201601f810184136149c657600080fd5b80516149d96149d482614966565b614936565b8181528560208385010111156149ee57600080fd5b6125b0826020830160208601614668565b600060208284031215614a1157600080fd5b81518015158114610ce257600080fd5b60008085851115614a3157600080fd5b83861115614a3e57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156137485760049490940360031b84901b1690921692915050565b634e487b7160e01b600052601160045260246000fd5b600063ffffffff808316818103614aa857614aa8614a79565b6001019392505050565b60018060a01b0385168152836020820152606060408201526000614ada6060830184866148a9565b9695505050505050565b600060208284031215614af657600080fd5b8151610ce2816145a8565b6000808335601e19843603018112614b1857600080fd5b8301803591506001600160401b03821115614b3257600080fd5b6020019150368190038213156143aa57600080fd5b6bffffffffffffffffffffffff1981358181169160148510156137485760149490940360031b84901b1690921692915050565b6020815260006107f76020830184866148a9565b85815260018060a01b0385166020820152836040820152608060608201526000614bbc6080830184866148a9565b979650505050505050565b600082601f830112614bd857600080fd5b8135614be66149d482614966565b818152846020838601011115614bfb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215614c2b57600080fd5b614c3361490d565b614c3c8361435e565b81526020830135602082015260408301356001600160401b0380821115614c6257600080fd5b614c6e36838701614bc7565b60408401526060850135915080821115614c8757600080fd5b614c9336838701614bc7565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e0850135915080821115614cca57600080fd5b614cd636838701614bc7565b60e084015261010091508185013581811115614cf157600080fd5b614cfd36828801614bc7565b8385015250505080915050919050565b80516001600160a01b031682526000610120602083015160208501526040830151816040860152614d408286018261468c565b91505060608301518482036060860152614d5a828261468c565b9150506080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152614d92828261468c565b9150506101008084015185830382870152614ada838261468c565b604081526000614dc06040830185614d0d565b90508260208301529392505050565b600060208284031215614de157600080fd5b5051919050565b838152606060208201526000614e016060830185614d0d565b9050826040830152949350505050565b634e487b7160e01b600052603260045260246000fd5b8281526040602082015260006107f7604083018461468c565b818103818111156112e2576112e2614a79565b69ffffffffffffffffffff1981358181169160168510156137485760169490940360031b84901b1690921692915050565b838152818360208301376000910160200190815292915050565b6001600160f01b031981358181169160028510156137485760029490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156137485760089490940360031b84901b1690921692915050565b808201808211156112e2576112e2614a79565b8281526040602082015260006107f76040830184614d0d565b60008235605e19833603018112614f3c57600080fd5b9190910192915050565b803560208310156112e257600019602084900360031b1b1692915050565b84815260018060a01b0384166020820152826040820152608060608201526000614ada608083018461468c565b818382376000910190815291905056fea26469706673582212207aae277b50f37d0f482e9f52c381a27653d542c7dc01e629c367059d5a5f98b264736f6c634300081800330000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x25", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x1f074aae0216c7f4d13661a11189edb7bf304fd1efbf5c3d6f2f372774d2c89b", + "transactionIndex": "0x29", + "blockHash": "0xaa19c4052debc48b819d74ece5c03ef460558455a8eae9520fafa3e2c1492d9c", + "blockNumber": "0x544e61", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x5d721d", + "gasUsed": "0x44badd", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d87a4f" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1710948591, + "chain": 11155111, + "multi": false, + "commit": "19ba63c" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/11155111/run-1712078165.json b/broadcast/Deploy.s.sol/11155111/run-1712078165.json new file mode 100644 index 00000000..9403f895 --- /dev/null +++ b/broadcast/Deploy.s.sol/11155111/run-1712078165.json @@ -0,0 +1,50 @@ +{ + "transactions": [ + { + "hash": "0x642f5b8c4b1293c815bce3dabdf8de29c4ce85dc612458b79621bc4bbf5fd919", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xFB642cE6CFFbC38270591dD6F3978deb27FA5B1E", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x784bc8", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006101406040523480156200001257600080fd5b506040516200623f3803806200623f833981016040819052620000359162000168565b306080524660a05260608062000085604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152808501939093528281019190915246606083015230608083015260a0909120610100526001600160a01b03851661012052805163deadbeef60e01b92810192909252805160048184030181526024909201905262000128925090506200019a565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b03191660589290921c91909117905550620001d2565b6000602082840312156200017b57600080fd5b81516001600160a01b03811681146200019357600080fd5b9392505050565b805160208201516001600160581b03198082169291906015831015620001ca5780818460150360031b1b83161693505b505050919050565b60805160a05160c05160e0516101005161012051615fde620002616000396000818161058d01528181610c8701528181610fbd01528181611197015281816114ec0152818161161f015281816117f301528181611ed20152818161257f015261276901526000613e8b01526000613f4501526000613f1f01526000613ecf01526000613eac0152615fde6000f3fe6080604052600436106101855760003560e01c80639517e29f116100d1578063d03c79141161008a578063e6f3d50a11610064578063e6f3d50a146106a7578063e9ae5c53146106ba578063f1f7f0f9146106cd578063f2dc691d146106fb576101c4565b8063d03c791414610639578063d691c9641461065a578063e0dfd3651461067a576101c4565b80639517e29f1461051c5780639cfd7cff1461052f578063a65d69d41461057b578063a71763a8146105c7578063adb610a3146105da578063b8afe17d146105ef576101c4565b806357b3a5f41161013e57806384b0196e1161011857806384b0196e146104975780638dd7712f146104bf57806390ef8862146104d25780639198bdf5146104fc576101c4565b806357b3a5f4146103e55780636e6fa0c61461043f578063721e67f41461045f576101c4565b8063112d3a7d1461031057806312af322c146103455780631626ba7e1461036557806319822f7c1461039e5780631f1b92e3146103bf5780633659cfe6146103d2576101c4565b366101c457604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b60006101db6000356001600160e01b03191661071b565b604080516060808201835283546001600160a01b039081168084526001909501549081166020840152600160a01b900460f81b6001600160f81b03191692820192909252925060009161024157604051631cd4b64760e21b815260040160405180910390fd5b82516060906001600160a01b031660011461026757835161026490600036610755565b90505b60408401516102779060006107d7565b156102935761028984602001516107ee565b90935091506102d8565b60408401516102aa906001600160f81b03196107d7565b156102bf57610289846020015160003661083e565b604051632d6a6bb760e01b815260040160405180910390fd5b83516001600160a01b03166001146102f85783516102f89082858561086d565b508161030657805160208201fd5b805160208201f35b005b34801561031c57600080fd5b5061033061032b3660046151b4565b6108e3565b60405190151581526020015b60405180910390f35b34801561035157600080fd5b5061030e610360366004615227565b6109b8565b34801561037157600080fd5b506103856103803660046152b9565b610ad8565b6040516001600160e01b0319909116815260200161033c565b6103b16103ac36600461531d565b610c7a565b60405190815260200161033c565b61030e6103cd36600461537e565b610f96565b61030e6103e0366004615399565b61117d565b3480156103f157600080fd5b506104056104003660046153cc565b611394565b6040805182516001600160a01b03908116825260208085015190911690820152918101516001600160f81b0319169082015260600161033c565b34801561044b57600080fd5b5061033061045a3660046153e9565b611400565b34801561046b57600080fd5b5061047f61047a366004615399565b611448565b60405190516001600160a01b0316815260200161033c565b3480156104a357600080fd5b506104ac61147e565b60405161033c9796959493929190615470565b61030e6104cd366004615509565b6114e1565b3480156104de57600080fd5b506104e76115e8565b60405163ffffffff909116815260200161033c565b34801561050857600080fd5b5061030e610517366004615622565b611605565b61030e61052a3660046151b4565b6117d9565b34801561053b57600080fd5b50604080518082018252601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152905161033c9190615782565b34801561058757600080fd5b506105af7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161033c565b61030e6105d53660046151b4565b611eb8565b3480156105e657600080fd5b506104e761234e565b3480156105fb57600080fd5b5061060f61060a366004615795565b61236b565b60408051825163ffffffff1681526020928301516001600160a01b0316928101929092520161033c565b34801561064557600080fd5b506103306106543660046157b0565b50600190565b61066d6106683660046152b9565b6123d4565b60405161033c91906157c9565b34801561068657600080fd5b5061069a610695366004615795565b612480565b60405161033c919061582d565b61030e6106b53660046158b1565b612565565b61030e6106c83660046152b9565b61274f565b3480156106d957600080fd5b506106e2612912565b6040516001600160581b0319909116815260200161033c565b34801561070757600080fd5b506103306107163660046157b0565b612925565b6001600160e01b03191660009081527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b6020526040902090565b604051631057c74d60e11b81526060906001600160a01b038516906320af8e9a906107889033908790879060040161595a565b6000604051808303816000875af11580156107a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107cf91908101906159a6565b949350505050565b6001600160f81b0319828116908216145b92915050565b6000606060408051368101909152366000823760408051601481019091523360601b9052600080366014018382885af192505060405190503d8152602081013d6000823e3d810160405250915091565b604051600090828482376000388483885af491503d8152602081013d6000823e3d810160405250935093915050565b604051630b9dfbed60e11b81526001600160a01b0385169063173bf7da90610899908690600401615782565b6020604051808303816000875af11580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc9190615a18565b5050505050565b6000846001036109415760006108f7612945565b600101600061090c8760581b600160f81b1790565b6001600160581b031916815260208101919091526040016000205464010000000090046001600160a01b0316141590506107cf565b8460020361096757600061095485612969565b546001600160a01b0316141590506107cf565b846003036109ad576001600160a01b03841661099861098a600460008688615a3a565b61099391615a64565b61071b565b600101546001600160a01b03161490506107cf565b506000949350505050565b60006109c2612945565b805490915060581b6001600160581b03191615610a1c5760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b6001600160581b03198716610a4457604051631a0a9b9f60e21b815260040160405180910390fd5b86610a5381600160f81b6129a2565b8015610a685750610a6881600160f91b6129a2565b15610a86576040516361c4e91b60e11b815260040160405180910390fd5b815460408051808201909152600181526001600160a01b03891660208201526001600160c81b031990911660588a901c17600160a81b178355610acd8982898989896129b5565b505050505050505050565b600080610ae3612945565b90506000366000610af48787612b80565b925092509250610b0b610b048490565b60006107d7565b15610b1857835460581b92505b6001600160581b03198316600090815260018501602052604090205464010000000090046001600160a01b0316610b6257604051631a0a9b9f60e21b815260040160405180910390fd5b610b7083600160f81b6107d7565b15610c0a576000610b818460581c90565b9050806001600160a01b031663f551e2ee33610b9c8c612bee565b86866040518563ffffffff1660e01b8152600401610bbd9493929190615a92565b602060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe9190615ac4565b95505050505050610c73565b6000610c168460081b90565b6001600160e01b03198116600090815260038701602052604090205490915060f01b600160f11b811615610c5d57604051635b71057960e01b815260040160405180910390fd5b610c6a82338c8787612c44565b96505050505050505b9392505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cc5576040516348f5c3ed60e01b815260040160405180910390fd5b6000610ccf612945565b90506000806000610ce38860200135612d44565b91945092509050610cf58260006107d7565b15610d015750825460581b5b610d0d83828a8a612d72565b6001600160581b031982166000908152600186016020908152604080832081518083019092525463ffffffff8116825264010000000090046001600160a01b031691810191909152919650610d639084906129a2565b8015610d8157508454815163ffffffff600160c81b90920482169116105b15610d9f57604051633ab3447f60e11b815260040160405180910390fd5b60208101516001600160a01b038116610dcb57604051631a0a9b9f60e21b815260040160405180910390fd5b600089815260208190526040902080546001600160a01b0319166001600160a01b03831690811790915560001901610e9357610e088460006129a2565b8015610e7057506001600160581b031983166000908152600287016020526040812090610e3860608d018d615ae1565b610e4791600491600091615a3a565b610e5091615a64565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610e8e57604051631a0a9b9f60e21b815260040160405180910390fd5b610f79565b610e9e8460006129a2565b8015610f0657506001600160581b031983166000908152600287016020526040812090610ece60608d018d615ae1565b610edd91600891600491615a3a565b610ee691615a64565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610f2457604051631a0a9b9f60e21b815260040160405180910390fd5b638dd7712f60e01b610f3960608c018c615ae1565b610f4891600491600091615a3a565b610f5191615a64565b6001600160e01b03191614610f795760405163dbbb044b60e01b815260040160405180910390fd5b8715610f8957343434348b335af1505b5050505050509392505050565b6000610fb0610fa3612945565b546001600160a81b031690565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590610feb5750333014155b156111705760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110589190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906110909033908590369060040161595a565b6000604051808303816000875af11580156110af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110d791908101906159a6565b90506110e283612f6e565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615782565b6020604051808303816000875af115801561112d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111519190615a18565b50505050565b6040516348f5c3ed60e01b815260040160405180910390fd5b61117982612f6e565b5050565b600061118a610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906111c55750333014155b156113385760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061126a9033908590369060040161595a565b6000604051808303816000875af1158015611289573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112b191908101906159a6565b9050827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55826001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615782565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8290556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60408051606081018252600080825260208201819052918101919091526113ba8261071b565b6040805160608101825282546001600160a01b0390811682526001909301549283166020820152600160a01b90920460f81b6001600160f81b0319169082015292915050565b600061140a612945565b6001600160581b031984166000908152600291909101602090815260408083206001600160e01b03198616845290915290205460ff16905092915050565b60408051602081019091526000815261146082612969565b604080516020810190915290546001600160a01b0316815292915050565b600f60f81b60608060008080836114cf604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b97989097965046955030945091925090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461152a576040516348f5c3ed60e01b815260040160405180910390fd5b6000818152602081905260409020546060906001600160a01b031660018114611574576115718161155e6060870187615ae1565b61156c916004908290615a3a565b610755565b91505b60008061159b306115886060890189615ae1565b611596916004908290615a3a565b61083e565b90925090506001600160a01b0383166001146115c2576115bd8385848461086d565b6115e0565b816115e05760405163f21e646b60e01b815260040160405180910390fd5b505050505050565b60006115f2612945565b54600160c81b900463ffffffff16919050565b6000611612610fa3612945565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061164d5750333014155b156117c05760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906116f29033908590369060040161595a565b6000604051808303816000875af1158015611711573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261173991908101906159a6565b905061174a89898989898989613050565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611776908490600401615782565b6020604051808303816000875af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190615a18565b50506117cf565b6117cf88888888888888613050565b5050505050505050565b60006117e6610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906118215750333014155b15611c3e5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561186a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188e9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906118c69033908590369060040161595a565b6000604051808303816000875af11580156118e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261190d91908101906159a6565b9050856001036119b0576000611921612945565b905060006119358760581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff168152909150600090602081016119676014848a8c615a3a565b61197091615b27565b60601c9052905060148781013588016034818101929182013591818b01358b019182019101356119a4868686868686613145565b50505050505050611bc8565b85600203611a17576014848101358501603481810192918201359181880135880191820191810135906000906119e890828a8c615a3a565b6119f191615b27565b60601c9050611a028a8686846131cf565b611a0d818484613260565b5050505050611bc8565b85600303611aa75760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c615a3a565b611a5891615a64565b8a611a67601860048c8e615a3a565b611a7091615b27565b60601c87876133b0565b611a9e611a8b601860048a8c615a3a565b611a9491615b27565b60601c8383613260565b50505050611bc8565b85600403611b0b576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b600060405180830381600087803b158015611af757600080fd5b505af1158015611a9e573d6000803e3d6000fd5b85600503611b41576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b85600603611b77576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b85600703611baf5760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c615a3a565b604051631092ef5760e11b815260040160405180910390fd5b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611bf4908490600401615782565b6020604051808303816000875af1158015611c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c379190615a18565b50506108dc565b84600103611cdf576000611c50612945565b90506000611c648660581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff16815290915060009060208101611c96601484898b615a3a565b611c9f91615b27565b60601c9052905060148681013587016034818101929182013591818a01358a01918201910135611cd3868686868686613145565b505050505050506108dc565b84600203611d4657601483810135840160348181019291820135918187013587019182019181013590600090611d179082898b615a3a565b611d2091615b27565b60601c9050611d31898686846131cf565b611d3c818484613260565b50505050506108dc565b84600303611db05760188381013584016038818101929182013591818701358701918201910135611d96611d7e60046000898b615a3a565b611d8791615a64565b89611a67601860048b8d615a3a565b611da7611a8b60186004898b615a3a565b505050506108dc565b84600403611e14576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b600060405180830381600087803b158015611e0057600080fd5b505af1158015611da7573d6000803e3d6000fd5b84600503611e4a576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b84600603611e80576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b84600703611baf5760188381013584016038818101929182013591818701358701918201910135611d96611d7e60046000898b615a3a565b6000611ec5610fa3612945565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611f005750333014155b156121a45760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611fa59033908590369060040161595a565b6000604051808303816000875af1158015611fc4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fec91908101906159a6565b90506000198603612039576120378585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b505b8560010361207457600061204b612945565b9050600061205f8760581b600160f81b1790565b905061206c81878761359a565b505050611bc8565b8560020361208d576120878585856136f2565b50611bc8565b856003036120cc5760006120a46004828688615a3a565b6120ad91615a64565b90506120c5816120c0866004818a615a3a565b61375d565b5050611bc8565b85600403612114576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b8560050361215c576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b85600603611baf576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b60001985036121ef576121ed8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b505b8460010361222a576000612201612945565b905060006122158660581b600160f81b1790565b905061222281868661359a565b5050506108dc565b846002036122435761223d8484846136f2565b506108dc565b8460030361227657600061225a6004828587615a3a565b61226391615a64565b9050611c37816120c08560048189615a3a565b846004036122be5761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b846005036123065761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b84600603611baf5761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b6000612358612945565b54600160a81b900463ffffffff16919050565b6040805180820190915260008082526020820152612387612945565b6001600160581b03199290921660009081526001909201602090815260409283902083518085019094525463ffffffff8116845264010000000090046001600160a01b0316908301525090565b606060006123e133612969565b546001600160a01b031690508061240b5760405163710c949760e01b815260040160405180910390fd5b60606001600160a01b03821660011461242d5761242a82600036610755565b90505b6124388686866137ee565b92506001600160a01b03821660011461247757612477828260018660405160200161246391906157c9565b60405160208183030381529060405261086d565b50509392505050565b60408051606080820183526000808352602083015291810191909152600882901b6124a9612945565b6001600160e01b03198216600090815260039190910160209081526040918290208251606081018452815460f081901b6001600160f01b03191682526201000090046001600160a01b0316818401526001820180548551818602810186018752818152929593949386019383018282801561255457602002820191906000526020600020905b815460501b69ffffffffffffffffffff1916815260019091019060200180831161252f575b505050505081525050915050919050565b6000612572610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906125ad5750333014155b1561272c5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156125f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261a9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906126529033908590369060040161595a565b6000604051808303816000875af1158015612671573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261269991908101906159a6565b905060006126a888888861359a565b90506126b5818686613a13565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906126e2908490600401615782565b6020604051808303816000875af1158015612701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127259190615a18565b50506115e0565b600061273987878761359a565b9050612746818585613a13565b50505050505050565b600061275c610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906127975750333014155b156129075760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156127e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128049190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061283c9033908590369060040161595a565b6000604051808303816000875af115801561285b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261288391908101906159a6565b90506128908585856137ee565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906128bd908490600401615782565b6020604051808303816000875af11580156128dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129009190615a18565b5050611151565b6108dc8484846137ee565b600061291c612945565b5460581b919050565b6000600882101561293857506001919050565b506000919050565b919050565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f90565b6001600160a01b031660009081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b6001600160f81b03199081169116141590565b60006129bf612945565b60208701519091506001600160a01b03166129dc57600160208701525b85518154600160a81b900463ffffffff9081169116141580612a24575085516001600160581b03198816600090815260018301602052604090205463ffffffff918216911610155b15612a4257604051633ab3447f60e11b815260040160405180910390fd5b6001600160581b03198716600090815260018083016020908152604090922088518154938a01516001600160a01b031664010000000081026001600160c01b031990951663ffffffff9092169190911793909317905514612aac57612aac86602001518484613260565b86612abb81600160f81b6107d7565b15612b35576000612acc8960581c90565b6040516306d61fe760e41b81529091506001600160a01b03821690636d61fe7090612afd908a908a90600401615b5a565b600060405180830381600087803b158015612b1757600080fd5b505af1158015612b2b573d6000803e3d6000fd5b50505050506117cf565b612b4381600160f91b6107d7565b15612b67576000612b548960081b90565b9050612b61818888613aba565b506117cf565b6040516361c4e91b60e11b815260040160405180910390fd5b813536600060f883901c8015612ba65760018114612bbb5760028114612bcc5760206000fd5b60009350600186019250600186039150612be6565b601586019250601585039150612be6565b6001600160d81b0319841693506005860192506005850391505b509250925092565b604080517f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8360208201529081018290526000906107e8906060015b60405160208183030381529060405280519060200120613e89565b6000806000366000612c598a8a8a8a8a613fa1565b9350935093509350600080612c6d856140ad565b50915091508165ffffffffffff16421080612c8f57508065ffffffffffff1642115b15612cab57506001600160e01b03199550612d3b945050505050565b6001600160a01b03861663392dffaf6001600160e01b03198e168d612ccf8e612bee565b88886040518663ffffffff1660e01b8152600401612cf1959493929190615b6e565b602060405180830381865afa158015612d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d329190615ac4565b96505050505050505b95945050505050565b80600881901b8060ff60f084901c166001198101612d6a576001600160d81b0319821691505b509193909250565b600080612d7d612945565b90506000612d8a85615bf8565b9050366000612d9d610100880188615ae1565b9092509050612db089600160f81b6107d7565b15612e0e57612dcc88612dc76101008a018a615ae1565b6140e0565b604080516020601f8401819004810282018101909252828152939850919450925083908390819084018382808284376000920191909152505050506101008401525b87612e1d81600160f81b6107d7565b15612eac57612ea586612e308b60581c90565b6001600160a01b03166397003203878b6040518363ffffffff1660e01b8152600401612e5d929190615d8d565b6020604051808303816000875af1158015612e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea09190615daf565b6142b1565b9550612f61565b6000612eb88a60081b90565b6001600160e01b03198116600090815260038801602052604090205490915060f01b600160f01b1615612efe576040516314b9743f60e01b815260040160405180910390fd5b600080612f0d8388888861436f565b91509150612f1b89836142b1565b9850612f5b89826001600160a01b0316630ccab7a1866001600160e01b0319168b8f6040518463ffffffff1660e01b8152600401612e5d93929190615dc8565b98505050505b5050505050949350505050565b6000612f78612945565b805490915063ffffffff80841691612f9a91600a91600160a81b900416615e07565b63ffffffff161015612fbf5760405163e60fd64760e01b815260040160405180910390fd5b805463ffffffff600160c81b909104811690831611612ff157604051633ab3447f60e11b815260040160405180910390fd5b805463ffffffff60c81b1916600160c81b63ffffffff8481168202929092178084559081048216600160a81b909104909116101561117957805463ffffffff60a81b198116600160c81b90910463ffffffff16600160a81b0217905550565b600061305a612945565b905060005b87811015613100576130f889898381811061307c5761307c615e2b565b90506020020160208101906130919190615795565b8883815181106130a3576130a3615e2b565b60200260200101518888858181106130bd576130bd615e2b565b90506020028101906130cf9190615ae1565b8888878181106130e1576130e1615e2b565b90506020028101906130f39190615ae1565b6129b5565b60010161305f565b508054600160a81b900463ffffffff1681601561311c83615e41565b91906101000a81548163ffffffff021916908363ffffffff160217905550505050505050505050565b600061314f612945565b80546001600160581b03198916600090815260018301602052604090205491925063ffffffff600160a81b90910481169116036131c1578054600160a81b900463ffffffff168160156131a183615e41565b91906101000a81548163ffffffff021916908363ffffffff160217905550505b6127468787878787876129b5565b6001600160a01b0381166131e1575060015b60006131ec85612969565b80546001600160a01b0319166001600160a01b038481169190911782556040516306d61fe760e41b8152919250861690636d61fe70906132329087908790600401615b5a565b600060405180830381600087803b15801561324c57600080fd5b505af1158015610acd573d6000803e3d6000fd5b6001600160a01b038316158061327f57506001600160a01b0383166001145b1561328957505050565b60405163d60b347f60e01b81523060048201526001600160a01b0384169063d60b347f90602401602060405180830381865afa1580156132cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f19190615a18565b61335c576001600160a01b038316636d61fe706133118360018187615a3a565b6040518363ffffffff1660e01b815260040161332e929190615b5a565b600060405180830381600087803b15801561334857600080fd5b505af1158015612746573d6000803e3d6000fd5b6001600160f81b0319828260008161337657613376615e2b565b9050013560f81c60f81b6001600160f81b031916036133ab576001600160a01b038316636d61fe706133118360018187615a3a565b505050565b6001600160a01b0383166133c357600192505b60006133ce8661071b565b90506000838360008181106133e5576133e5615e2b565b9050013560f81c60f81b90506133ff81600060f81b6107d7565b15613474576001600160a01b038616636d61fe706134208560018189615a3a565b6040518363ffffffff1660e01b815260040161343d929190615b5a565b600060405180830381600087803b15801561345757600080fd5b505af115801561346b573d6000803e3d6000fd5b505050506134a4565b613486816001600160f81b03196129a2565b156134a457604051632d6a6bb760e01b815260040160405180910390fd5b81546001600160a01b039586166001600160a01b03199091161782556001909101805460f89290921c600160a01b026001600160a81b0319909216959094169490941793909317909155505050565b600061354d835a600080638a91b0e360e01b876040516024016135169190615782565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261464f565b50604080516001600160a01b038616815282151560208201529192507f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3910160405180910390a192915050565b6000806135a5612945565b805490915060581b6001600160581b0319908116908616036136155760405162461bcd60e51b8152602060048201526024808201527f526f6f742076616c696461746f722063616e6e6f7420626520756e696e7374616044820152631b1b195960e21b6064820152608401610a13565b6001600160581b03198516600090815260018201602052604090208054640100000000600160c01b0319811690915564010000000090046001600160a01b031691508461366681600160f81b6107d7565b156136c05760006136778760581c90565b90506136b98187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b5050612477565b6136ce81600160f91b6107d7565b15612b675760006136df8760081b90565b90506136ec8187876146d9565b50612477565b6000806136fe85612969565b80546001600160a01b031981168255604080516020601f88018190048102820181019092528681526001600160a01b0390921694509192506124779187919087908790819084018382808284376000920191909152506134f392505050565b6000806137698561071b565b80546001600160a01b0319811682556001820154604080516020601f89018190048102820181019092528781526001600160a01b0393841696509394506137cf93919092169187908790819084018382808284376000920191909152506134f392505050565b5060010180546001600160a81b03191660ff60a01b1790559392505050565b606083600881901b61380482600160f81b6107d7565b15613887578435850160208101903561381e8360006107d7565b156138345761382d8282614851565b94506136b9565b61384283600160f81b6107d7565b156138515761382d8282614921565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610a13565b6138928260006107d7565b156139c0576000803660006138a78989614a4e565b6040805160018082528183019092529498509296509094509250816020015b60608152602001906001900390816138c657905050965060006138e986826107d7565b1561391d576138fa85858585614a9f565b8860008151811061390d5761390d615e2b565b60200260200101819052506139b6565b61392b86600160f81b6107d7565b156138515761393c85858585614ad5565b8960008151811061394f5761394f615e2b565b60209081029190910101529050806139b6577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb760008960008151811061399757613997615e2b565b60200260200101516040516139ad929190615e64565b60405180910390a15b5050505050612477565b6139d2826001600160f81b03196107d7565b156138515760006139e66014828789615a3a565b6139ef91615b27565b60601c9050366000613a04876014818b615a3a565b915091506139b683838361083e565b6001600160a01b0383161580613a3257506001600160a01b0383166001145b15613a3c57505050565b6001600160f81b03198282600081613a5657613a56615e2b565b9050013560f81c60f81b6001600160f81b031916036133ab5761115183613a808360018187615a3a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b6000613ac4612945565b90508235830160208101903560fe811180613add575080155b15613afb5760405163b62d956d60e01b815260040160405180910390fd5b6001600160e01b03198616600090815260038401602052604090206001015415613b49576001600160e01b0319861660009081526003840160205260408120613b4991600190910190615112565b60005b6000198201811015613cdb576001600160e01b0319871660009081526003850160205260409020600101838383818110613b8857613b88615e2b565b9050602002810190613b9a9190615ae1565b613ba991601691600091615a3a565b613bb291615e7d565b81546001810183556000928352602090922090910180546001600160b01b03191660509290921c919091179055828282818110613bf157613bf1615e2b565b9050602002810190613c039190615ae1565b613c1291601691600291615a3a565b613c1b91615b27565b60601c636d61fe706001600160e01b03198916858585818110613c4057613c40615e2b565b9050602002810190613c529190615ae1565b613c60916016908290615a3a565b604051602001613c7293929190615eae565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613c9d9190615782565b600060405180830381600087803b158015613cb757600080fd5b505af1158015613ccb573d6000803e3d6000fd5b505060019092019150613b4c9050565b50600082826000198101818110613cf457613cf4615e2b565b9050602002810190613d069190615ae1565b613d1591601691600291615a3a565b613d1e91615b27565b6001600160e01b031988166000908152600386016020526040902080546201000060609390931c92830262010000600160b01b0319909116179055905082826000198101818110613d7157613d71615e2b565b9050602002810190613d839190615ae1565b613d9291600291600091615a3a565b613d9b91615ec8565b6001600160e01b0319881660008181526003870160205260409020805461ffff191660f09390931c929092179091556001600160a01b03821690636d61fe709085856000198101818110613df157613df1615e2b565b9050602002810190613e039190615ae1565b613e11916016908290615a3a565b604051602001613e2393929190615eae565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613e4e9190615782565b600060405180830381600087803b158015613e6857600080fd5b505af1158015613e7c573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416613f7c5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60008036600080613fb0612945565b60408051610120810182526000808252602082018190529181018290526080810182905260a0810191909152606060c082018190526001600160e01b03198d16908201526001600160a01b038b1660e082015261010081018a905290915061401a81838a8a614b06565b8787600081811061402d5761402d615e2b565b9091013560f81c60ff1490506140565760405163b32eeb6960e01b815260040160405180910390fd5b614063876001818b615a3a565b60608301516001600160e01b0319166000908152600394909401602052604093849020549390920151620100009093046001600160a01b03169c929b509950975095505050505050565b600060a082901c65ffffffffffff1682811560001981016140d25765ffffffffffff92505b508360d01c92509193909250565b6000366000806140ee612945565b905060003660006141008a8a8a614d73565b8654929550909350915060581b600061411d82600160f81b6107d7565b156141a9578554604051637aa8f17760e11b81526001600160a81b038216916001600160a01b03169063f551e2ee906141609030908a908a908a90600401615a92565b602060405180830381865afa15801561417d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a19190615ac4565b91505061425f565b6141b782600160f91b6107d7565b15612b6757855460601b60006141d08230898989613fa1565b60405163392dffaf60e01b8152929e5090985096509091506001600160a01b0382169063392dffaf90614219906001600160e01b031986169030908c908c908c90600401615b6e565b602060405180830381865afa158015614236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061425a9190615ac4565b925050505b630b135d3f60e11b6001600160e01b0319821614614290576040516362467c7760e11b815260040160405180910390fd5b50969a60948a0135909901603481019a506014013598975050505050505050565b600081830160601b8260601b81148460601b8214176001600160a01b03848618161517600181146142e55760019250614367565b6001600160d01b031980851690861681811881831102188686176001600160a01b031617935065ffffffffffff60a01b8616908161432a5765ffffffffffff60a01b91505b5065ffffffffffff60a01b851680614348575065ffffffffffff60a01b5b808218908211021880614361575065ffffffffffff60a01b5b92909217915b505092915050565b600080600061437c612945565b6001600160e01b03198816600090815260038201602052604081209192506001909101905b8154811015614593576000806143da8484815481106143c2576143c2615e2b565b60009182526020909120015460501b90605082901c90565b915091506000898960008181106143f3576143f3615e2b565b919091013560f81c915050838103614486576000614415600960018c8e615a3a565b61441e91615ef6565b60c01c90506144336009808301908c8e615a3a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008d015261447c8a60098301818e615a3a565b9a509a50506144c0565b838160ff1610156144aa57604051630760bdcf60e11b815260040160405180910390fd5b6040805160208101909152600081526101008c01525b600160f01b8316600003614588576000826001600160a01b0316637129edce8e6001600160e01b0319168e6040518363ffffffff1660e01b8152600401614508929190615f24565b6020604051808303816000875af1158015614527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061454b9190615daf565b9050806001600160a01b0381161561457957604051631f24c1fb60e11b815260048101879052602401610a13565b6145838a836142b1565b995050505b5050506001016143a1565b50858560008181106145a7576145a7615e2b565b9091013560f81c60ff1490506145d05760405163b32eeb6960e01b815260040160405180910390fd5b6145dd8560018189615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008c01949094525050506001600160e01b03198916815260039092016020525060409020546001600160a01b036201000090910416905094509492505050565b6000606060008060008661ffff166001600160401b0381111561467457614674615591565b6040519080825280601f01601f19166020018201604052801561469e576020820181803683370190505b5090506000808751602089018b8e8ef191503d9250868311156146bf578692505b828152826000602083013e90999098509650505050505050565b8135820160208101903560006146ed612945565b6001600160e01b0319871660009081526003919091016020526040902060018082015491925061471d9190615f3d565b821461473c5760405163013dcc8d60e31b815260040160405180910390fd5b6001810160005b81548110156147c95760006147638383815481106143c2576143c2615e2b565b9150506147bf818a6001600160e01b03191688888681811061478757614787615e2b565b90506020028101906147999190615ae1565b6040516020016147ab93929190615eae565b6040516020818303038152906040526134f3565b5050600101614743565b506147d2612945565b6001600160e01b031988166000908152600391909101602052604081206147fe91600190910190615112565b815461483a906201000090046001600160a01b03166001600160e01b03198916868661482b600182615f50565b81811061478757614787615e2b565b505080546001600160b01b03191690555050505050565b606081806001600160401b0381111561486c5761486c615591565b60405190808252806020026020018201604052801561489f57816020015b606081526020019060019003908161488a5790505b50915060005b8181101561436757368585838181106148c0576148c0615e2b565b90506020028101906148d29190615f63565b90506148fb6148e46020830183615399565b60208301356148f66040850185615ae1565b614a9f565b84838151811061490d5761490d615e2b565b6020908102919091010152506001016148a5565b606081806001600160401b0381111561493c5761493c615591565b60405190808252806020026020018201604052801561496f57816020015b606081526020019060019003908161495a5790505b50915060005b81811015614367573685858381811061499057614990615e2b565b90506020028101906149a29190615f63565b905060006149cd6149b66020840184615399565b60208401356149c86040860186615ae1565b614ad5565b8685815181106149df576149df615e2b565b6020908102919091010152905080614a44577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb783868581518110614a2557614a25615e2b565b6020026020010151604051614a3b929190615e64565b60405180910390a15b5050600101614975565b6000803681614a606014828789615a3a565b614a6991615b27565b60601c9350614a7c603460148789615a3a565b614a8591615f83565b9250614a948560348189615a3a565b949793965094505050565b60405181838237600038838387895af1614abc573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b60608401516001600160e01b03191660009081526003840160205260408120600101905b81548110156115e057614b488282815481106143c2576143c2615e2b565b6001600160a01b031660a08801526001600160f01b03191660808701528383600081614b7657614b76615e2b565b919091013560f81c8088528290039050614c1357614b98600960018587615a3a565b614ba191615ef6565b60c01c60208701819052614bbc906009908101908587615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701526020860151614c0a9084906009018187615a3a565b93509350614c7f565b855160ff16811115614c3857604051630760bdcf60e11b815260040160405180910390fd5b614c456000808587615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701525b6080860151600160f11b16600003614d6b5760a0860151606087015160e088015161010089015160c08a015160405163184dfdbb60e11b81526000956001600160a01b03169463309bfb7694614ce6946001600160e01b0319909216939092600401615fa1565b602060405180830381865afa158015614d03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d279190615daf565b9050806001600160a01b03811615614d5557604051631f24c1fb60e11b815260048101849052602401610a13565b614d638860400151836142b1565b604089015250505b600101614b2a565b60003660008036600036600036600080614d8e8e8e8e614dfd565b9750975097509750975097509750975060748d013560348e0101995060208a03359850614dbf8e8989898989613145565b614dc98383614fb2565b614deb8e614ddb600460008688615a3a565b614de491615a64565b600161507f565b99505050505050505093509350939050565b6040805180820190915260008082526020820152366000366000366000806000614e25612945565b9050614e35601460008c8e615a3a565b614e3e91615b27565b60601c89602001906001600160a01b031690816001600160a01b0316815250508060000160159054906101000a900463ffffffff16896000019063ffffffff16908163ffffffff168152505060148b013560348c010197506020880335965060348b013560348c010195506020860335945060548b013560348c0101935060208403359250614fa27fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c50560001b8d8360000160159054906101000a900463ffffffff168c602001518c8c604051614f15929190615fce565b60405180910390208b8b604051614f2d929190615fce565b60405180910390208a8a604051614f45929190615fce565b6040805191829003822060208301989098526001600160581b03199096169581019590955263ffffffff90931660608501526001600160a01b03909116608084015260a083015260c082015260e081019190915261010001612c29565b9150509397509397509397509397565b6000614fc16004828486615a3a565b614fca91615a64565b9050600482106133ab57602c821061503857602c838101358401604c8181019291820135918187013587019182019101356150278561500d601860048a8c615a3a565b61501691615b27565b60601c611a67602c60188b8d615a3a565b612746611a8b602c6018898b615a3a565b600482146133ab5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606401610a13565b6000615089612945565b6001600160581b03198516600081815260028301602090815260408083206001600160e01b0319891680855290835292819020805488151560ff1990911681179091558151938452918301939093528183015290519192507f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a919081900360600190a150505050565b50805460008255906000526020600020908101906151309190615133565b50565b5b808211156151485760008155600101615134565b5090565b6001600160a01b038116811461513057600080fd5b80356129408161514c565b60008083601f84011261517e57600080fd5b5081356001600160401b0381111561519557600080fd5b6020830191508360208285010111156151ad57600080fd5b9250929050565b600080600080606085870312156151ca57600080fd5b8435935060208501356151dc8161514c565b925060408501356001600160401b038111156151f757600080fd5b6152038782880161516c565b95989497509550505050565b80356001600160581b03198116811461294057600080fd5b6000806000806000806080878903121561524057600080fd5b6152498761520f565b955060208701356152598161514c565b945060408701356001600160401b038082111561527557600080fd5b6152818a838b0161516c565b9096509450606089013591508082111561529a57600080fd5b506152a789828a0161516c565b979a9699509497509295939492505050565b6000806000604084860312156152ce57600080fd5b8335925060208401356001600160401b038111156152eb57600080fd5b6152f78682870161516c565b9497909650939450505050565b6000610120828403121561531757600080fd5b50919050565b60008060006060848603121561533257600080fd5b83356001600160401b0381111561534857600080fd5b61535486828701615304565b9660208601359650604090950135949350505050565b803563ffffffff8116811461294057600080fd5b60006020828403121561539057600080fd5b610c738261536a565b6000602082840312156153ab57600080fd5b8135610c738161514c565b6001600160e01b03198116811461513057600080fd5b6000602082840312156153de57600080fd5b8135610c73816153b6565b600080604083850312156153fc57600080fd5b6154058361520f565b91506020830135615415816153b6565b809150509250929050565b60005b8381101561543b578181015183820152602001615423565b50506000910152565b6000815180845261545c816020860160208601615420565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e0602084015261549160e084018a615444565b83810360408501526154a3818a615444565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b818110156154f7578351835292840192918401916001016154db565b50909c9b505050505050505050505050565b6000806040838503121561551c57600080fd5b82356001600160401b0381111561553257600080fd5b61553e85828601615304565b95602094909401359450505050565b60008083601f84011261555f57600080fd5b5081356001600160401b0381111561557657600080fd5b6020830191508360208260051b85010111156151ad57600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156155c9576155c9615591565b60405290565b60405161012081016001600160401b03811182821017156155c9576155c9615591565b604051601f8201601f191681016001600160401b038111828210171561561a5761561a615591565b604052919050565b60008060008060008060006080888a03121561563d57600080fd5b6001600160401b03808935111561565357600080fd5b6156608a8a358b0161554d565b909850965060208901358181111561567757600080fd5b8901601f81018b1361568857600080fd5b80358281111561569a5761569a615591565b6156a960208260051b016155f2565b8082825260208201915060208360061b85010192508d8311156156cb57600080fd5b6020840193505b82841015615727576040848f0312156156ea57600080fd5b6156f26155a7565b6156fb8561536a565b8152602085013561570b8161514c565b80602083015250808352506020820191506040840193506156d2565b985050505060408901358181111561573e57600080fd5b61574a8b828c0161554d565b90965094505060608901358181111561576257600080fd5b61576e8b828c0161554d565b999c989b5096995094979396939450505050565b602081526000610c736020830184615444565b6000602082840312156157a757600080fd5b610c738261520f565b6000602082840312156157c257600080fd5b5035919050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561582057603f1988860301845261580e858351615444565b945092850192908501906001016157f2565b5092979650505050505050565b602080825282516001600160f01b03191682820152828101516001600160a01b031660408084019190915283015160608084015280516080840181905260009291820190839060a08601905b808310156158a657835169ffffffffffffffffffff19168252928401926001929092019190840190615879565b509695505050505050565b6000806000806000606086880312156158c957600080fd5b6158d28661520f565b945060208601356001600160401b03808211156158ee57600080fd5b6158fa89838a0161516c565b9096509450604088013591508082111561591357600080fd5b506159208882890161516c565b969995985093965092949392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612d3b9083018486615931565b60006001600160401b0382111561599857615998615591565b50601f01601f191660200190565b6000602082840312156159b857600080fd5b81516001600160401b038111156159ce57600080fd5b8201601f810184136159df57600080fd5b80516159f26159ed8261597f565b6155f2565b818152856020838501011115615a0757600080fd5b612d3b826020830160208601615420565b600060208284031215615a2a57600080fd5b81518015158114610c7357600080fd5b60008085851115615a4a57600080fd5b83861115615a5757600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156143675760049490940360031b84901b1690921692915050565b60018060a01b0385168152836020820152606060408201526000615aba606083018486615931565b9695505050505050565b600060208284031215615ad657600080fd5b8151610c73816153b6565b6000808335601e19843603018112615af857600080fd5b8301803591506001600160401b03821115615b1257600080fd5b6020019150368190038213156151ad57600080fd5b6bffffffffffffffffffffffff1981358181169160148510156143675760149490940360031b84901b1690921692915050565b6020815260006107cf602083018486615931565b85815260018060a01b0385166020820152836040820152608060608201526000615b9c608083018486615931565b979650505050505050565b600082601f830112615bb857600080fd5b8135615bc66159ed8261597f565b818152846020838601011115615bdb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215615c0b57600080fd5b615c136155cf565b615c1c83615161565b81526020830135602082015260408301356001600160401b0380821115615c4257600080fd5b615c4e36838701615ba7565b60408401526060850135915080821115615c6757600080fd5b615c7336838701615ba7565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e0850135915080821115615caa57600080fd5b615cb636838701615ba7565b60e084015261010091508185013581811115615cd157600080fd5b615cdd36828801615ba7565b8385015250505080915050919050565b80516001600160a01b031682526000610120602083015160208501526040830151816040860152615d2082860182615444565b91505060608301518482036060860152615d3a8282615444565b9150506080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152615d728282615444565b9150506101008084015185830382870152615aba8382615444565b604081526000615da06040830185615ced565b90508260208301529392505050565b600060208284031215615dc157600080fd5b5051919050565b838152606060208201526000615de16060830185615ced565b9050826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115615e2457615e24615df1565b5092915050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff808316818103615e5a57615e5a615df1565b6001019392505050565b8281526040602082015260006107cf6040830184615444565b69ffffffffffffffffffff1981358181169160168510156143675760169490940360031b84901b1690921692915050565b838152818360208301376000910160200190815292915050565b6001600160f01b031981358181169160028510156143675760029490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156143675760089490940360031b84901b1690921692915050565b8281526040602082015260006107cf6040830184615ced565b808201808211156107e8576107e8615df1565b818103818111156107e8576107e8615df1565b60008235605e19833603018112615f7957600080fd5b9190910192915050565b803560208310156107e857600019602084900360031b1b1692915050565b84815260018060a01b0384166020820152826040820152608060608201526000615aba6080830184615444565b8183823760009101908152919050560000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x2d", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x642f5b8c4b1293c815bce3dabdf8de29c4ce85dc612458b79621bc4bbf5fd919", + "transactionIndex": "0x0", + "blockHash": "0xd5cf29816629d8195d2d5bdfdef484be5e43da8d8a3e87b4066b15f36af4fb47", + "blockNumber": "0x55acac", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x524718", + "gasUsed": "0x524718", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xc5c9a23a" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712078165, + "chain": 11155111, + "commit": "ef4e38d" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/11155111/run-1712078188.json b/broadcast/Deploy.s.sol/11155111/run-1712078188.json new file mode 100644 index 00000000..d2d0d3fd --- /dev/null +++ b/broadcast/Deploy.s.sol/11155111/run-1712078188.json @@ -0,0 +1,50 @@ +{ + "transactions": [ + { + "hash": "0x642f5b8c4b1293c815bce3dabdf8de29c4ce85dc612458b79621bc4bbf5fd919", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xFB642cE6CFFbC38270591dD6F3978deb27FA5B1E", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x784bc8", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006101406040523480156200001257600080fd5b506040516200623f3803806200623f833981016040819052620000359162000168565b306080524660a05260608062000085604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152808501939093528281019190915246606083015230608083015260a0909120610100526001600160a01b03851661012052805163deadbeef60e01b92810192909252805160048184030181526024909201905262000128925090506200019a565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b03191660589290921c91909117905550620001d2565b6000602082840312156200017b57600080fd5b81516001600160a01b03811681146200019357600080fd5b9392505050565b805160208201516001600160581b03198082169291906015831015620001ca5780818460150360031b1b83161693505b505050919050565b60805160a05160c05160e0516101005161012051615fde620002616000396000818161058d01528181610c8701528181610fbd01528181611197015281816114ec0152818161161f015281816117f301528181611ed20152818161257f015261276901526000613e8b01526000613f4501526000613f1f01526000613ecf01526000613eac0152615fde6000f3fe6080604052600436106101855760003560e01c80639517e29f116100d1578063d03c79141161008a578063e6f3d50a11610064578063e6f3d50a146106a7578063e9ae5c53146106ba578063f1f7f0f9146106cd578063f2dc691d146106fb576101c4565b8063d03c791414610639578063d691c9641461065a578063e0dfd3651461067a576101c4565b80639517e29f1461051c5780639cfd7cff1461052f578063a65d69d41461057b578063a71763a8146105c7578063adb610a3146105da578063b8afe17d146105ef576101c4565b806357b3a5f41161013e57806384b0196e1161011857806384b0196e146104975780638dd7712f146104bf57806390ef8862146104d25780639198bdf5146104fc576101c4565b806357b3a5f4146103e55780636e6fa0c61461043f578063721e67f41461045f576101c4565b8063112d3a7d1461031057806312af322c146103455780631626ba7e1461036557806319822f7c1461039e5780631f1b92e3146103bf5780633659cfe6146103d2576101c4565b366101c457604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b60006101db6000356001600160e01b03191661071b565b604080516060808201835283546001600160a01b039081168084526001909501549081166020840152600160a01b900460f81b6001600160f81b03191692820192909252925060009161024157604051631cd4b64760e21b815260040160405180910390fd5b82516060906001600160a01b031660011461026757835161026490600036610755565b90505b60408401516102779060006107d7565b156102935761028984602001516107ee565b90935091506102d8565b60408401516102aa906001600160f81b03196107d7565b156102bf57610289846020015160003661083e565b604051632d6a6bb760e01b815260040160405180910390fd5b83516001600160a01b03166001146102f85783516102f89082858561086d565b508161030657805160208201fd5b805160208201f35b005b34801561031c57600080fd5b5061033061032b3660046151b4565b6108e3565b60405190151581526020015b60405180910390f35b34801561035157600080fd5b5061030e610360366004615227565b6109b8565b34801561037157600080fd5b506103856103803660046152b9565b610ad8565b6040516001600160e01b0319909116815260200161033c565b6103b16103ac36600461531d565b610c7a565b60405190815260200161033c565b61030e6103cd36600461537e565b610f96565b61030e6103e0366004615399565b61117d565b3480156103f157600080fd5b506104056104003660046153cc565b611394565b6040805182516001600160a01b03908116825260208085015190911690820152918101516001600160f81b0319169082015260600161033c565b34801561044b57600080fd5b5061033061045a3660046153e9565b611400565b34801561046b57600080fd5b5061047f61047a366004615399565b611448565b60405190516001600160a01b0316815260200161033c565b3480156104a357600080fd5b506104ac61147e565b60405161033c9796959493929190615470565b61030e6104cd366004615509565b6114e1565b3480156104de57600080fd5b506104e76115e8565b60405163ffffffff909116815260200161033c565b34801561050857600080fd5b5061030e610517366004615622565b611605565b61030e61052a3660046151b4565b6117d9565b34801561053b57600080fd5b50604080518082018252601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152905161033c9190615782565b34801561058757600080fd5b506105af7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161033c565b61030e6105d53660046151b4565b611eb8565b3480156105e657600080fd5b506104e761234e565b3480156105fb57600080fd5b5061060f61060a366004615795565b61236b565b60408051825163ffffffff1681526020928301516001600160a01b0316928101929092520161033c565b34801561064557600080fd5b506103306106543660046157b0565b50600190565b61066d6106683660046152b9565b6123d4565b60405161033c91906157c9565b34801561068657600080fd5b5061069a610695366004615795565b612480565b60405161033c919061582d565b61030e6106b53660046158b1565b612565565b61030e6106c83660046152b9565b61274f565b3480156106d957600080fd5b506106e2612912565b6040516001600160581b0319909116815260200161033c565b34801561070757600080fd5b506103306107163660046157b0565b612925565b6001600160e01b03191660009081527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b6020526040902090565b604051631057c74d60e11b81526060906001600160a01b038516906320af8e9a906107889033908790879060040161595a565b6000604051808303816000875af11580156107a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107cf91908101906159a6565b949350505050565b6001600160f81b0319828116908216145b92915050565b6000606060408051368101909152366000823760408051601481019091523360601b9052600080366014018382885af192505060405190503d8152602081013d6000823e3d810160405250915091565b604051600090828482376000388483885af491503d8152602081013d6000823e3d810160405250935093915050565b604051630b9dfbed60e11b81526001600160a01b0385169063173bf7da90610899908690600401615782565b6020604051808303816000875af11580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc9190615a18565b5050505050565b6000846001036109415760006108f7612945565b600101600061090c8760581b600160f81b1790565b6001600160581b031916815260208101919091526040016000205464010000000090046001600160a01b0316141590506107cf565b8460020361096757600061095485612969565b546001600160a01b0316141590506107cf565b846003036109ad576001600160a01b03841661099861098a600460008688615a3a565b61099391615a64565b61071b565b600101546001600160a01b03161490506107cf565b506000949350505050565b60006109c2612945565b805490915060581b6001600160581b03191615610a1c5760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b6001600160581b03198716610a4457604051631a0a9b9f60e21b815260040160405180910390fd5b86610a5381600160f81b6129a2565b8015610a685750610a6881600160f91b6129a2565b15610a86576040516361c4e91b60e11b815260040160405180910390fd5b815460408051808201909152600181526001600160a01b03891660208201526001600160c81b031990911660588a901c17600160a81b178355610acd8982898989896129b5565b505050505050505050565b600080610ae3612945565b90506000366000610af48787612b80565b925092509250610b0b610b048490565b60006107d7565b15610b1857835460581b92505b6001600160581b03198316600090815260018501602052604090205464010000000090046001600160a01b0316610b6257604051631a0a9b9f60e21b815260040160405180910390fd5b610b7083600160f81b6107d7565b15610c0a576000610b818460581c90565b9050806001600160a01b031663f551e2ee33610b9c8c612bee565b86866040518563ffffffff1660e01b8152600401610bbd9493929190615a92565b602060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe9190615ac4565b95505050505050610c73565b6000610c168460081b90565b6001600160e01b03198116600090815260038701602052604090205490915060f01b600160f11b811615610c5d57604051635b71057960e01b815260040160405180910390fd5b610c6a82338c8787612c44565b96505050505050505b9392505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cc5576040516348f5c3ed60e01b815260040160405180910390fd5b6000610ccf612945565b90506000806000610ce38860200135612d44565b91945092509050610cf58260006107d7565b15610d015750825460581b5b610d0d83828a8a612d72565b6001600160581b031982166000908152600186016020908152604080832081518083019092525463ffffffff8116825264010000000090046001600160a01b031691810191909152919650610d639084906129a2565b8015610d8157508454815163ffffffff600160c81b90920482169116105b15610d9f57604051633ab3447f60e11b815260040160405180910390fd5b60208101516001600160a01b038116610dcb57604051631a0a9b9f60e21b815260040160405180910390fd5b600089815260208190526040902080546001600160a01b0319166001600160a01b03831690811790915560001901610e9357610e088460006129a2565b8015610e7057506001600160581b031983166000908152600287016020526040812090610e3860608d018d615ae1565b610e4791600491600091615a3a565b610e5091615a64565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610e8e57604051631a0a9b9f60e21b815260040160405180910390fd5b610f79565b610e9e8460006129a2565b8015610f0657506001600160581b031983166000908152600287016020526040812090610ece60608d018d615ae1565b610edd91600891600491615a3a565b610ee691615a64565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610f2457604051631a0a9b9f60e21b815260040160405180910390fd5b638dd7712f60e01b610f3960608c018c615ae1565b610f4891600491600091615a3a565b610f5191615a64565b6001600160e01b03191614610f795760405163dbbb044b60e01b815260040160405180910390fd5b8715610f8957343434348b335af1505b5050505050509392505050565b6000610fb0610fa3612945565b546001600160a81b031690565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590610feb5750333014155b156111705760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110589190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906110909033908590369060040161595a565b6000604051808303816000875af11580156110af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110d791908101906159a6565b90506110e283612f6e565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615782565b6020604051808303816000875af115801561112d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111519190615a18565b50505050565b6040516348f5c3ed60e01b815260040160405180910390fd5b61117982612f6e565b5050565b600061118a610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906111c55750333014155b156113385760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061126a9033908590369060040161595a565b6000604051808303816000875af1158015611289573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112b191908101906159a6565b9050827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55826001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615782565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8290556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60408051606081018252600080825260208201819052918101919091526113ba8261071b565b6040805160608101825282546001600160a01b0390811682526001909301549283166020820152600160a01b90920460f81b6001600160f81b0319169082015292915050565b600061140a612945565b6001600160581b031984166000908152600291909101602090815260408083206001600160e01b03198616845290915290205460ff16905092915050565b60408051602081019091526000815261146082612969565b604080516020810190915290546001600160a01b0316815292915050565b600f60f81b60608060008080836114cf604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b97989097965046955030945091925090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461152a576040516348f5c3ed60e01b815260040160405180910390fd5b6000818152602081905260409020546060906001600160a01b031660018114611574576115718161155e6060870187615ae1565b61156c916004908290615a3a565b610755565b91505b60008061159b306115886060890189615ae1565b611596916004908290615a3a565b61083e565b90925090506001600160a01b0383166001146115c2576115bd8385848461086d565b6115e0565b816115e05760405163f21e646b60e01b815260040160405180910390fd5b505050505050565b60006115f2612945565b54600160c81b900463ffffffff16919050565b6000611612610fa3612945565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061164d5750333014155b156117c05760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906116f29033908590369060040161595a565b6000604051808303816000875af1158015611711573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261173991908101906159a6565b905061174a89898989898989613050565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611776908490600401615782565b6020604051808303816000875af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190615a18565b50506117cf565b6117cf88888888888888613050565b5050505050505050565b60006117e6610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906118215750333014155b15611c3e5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561186a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188e9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906118c69033908590369060040161595a565b6000604051808303816000875af11580156118e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261190d91908101906159a6565b9050856001036119b0576000611921612945565b905060006119358760581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff168152909150600090602081016119676014848a8c615a3a565b61197091615b27565b60601c9052905060148781013588016034818101929182013591818b01358b019182019101356119a4868686868686613145565b50505050505050611bc8565b85600203611a17576014848101358501603481810192918201359181880135880191820191810135906000906119e890828a8c615a3a565b6119f191615b27565b60601c9050611a028a8686846131cf565b611a0d818484613260565b5050505050611bc8565b85600303611aa75760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c615a3a565b611a5891615a64565b8a611a67601860048c8e615a3a565b611a7091615b27565b60601c87876133b0565b611a9e611a8b601860048a8c615a3a565b611a9491615b27565b60601c8383613260565b50505050611bc8565b85600403611b0b576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b600060405180830381600087803b158015611af757600080fd5b505af1158015611a9e573d6000803e3d6000fd5b85600503611b41576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b85600603611b77576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b85600703611baf5760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c615a3a565b604051631092ef5760e11b815260040160405180910390fd5b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611bf4908490600401615782565b6020604051808303816000875af1158015611c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c379190615a18565b50506108dc565b84600103611cdf576000611c50612945565b90506000611c648660581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff16815290915060009060208101611c96601484898b615a3a565b611c9f91615b27565b60601c9052905060148681013587016034818101929182013591818a01358a01918201910135611cd3868686868686613145565b505050505050506108dc565b84600203611d4657601483810135840160348181019291820135918187013587019182019181013590600090611d179082898b615a3a565b611d2091615b27565b60601c9050611d31898686846131cf565b611d3c818484613260565b50505050506108dc565b84600303611db05760188381013584016038818101929182013591818701358701918201910135611d96611d7e60046000898b615a3a565b611d8791615a64565b89611a67601860048b8d615a3a565b611da7611a8b60186004898b615a3a565b505050506108dc565b84600403611e14576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b600060405180830381600087803b158015611e0057600080fd5b505af1158015611da7573d6000803e3d6000fd5b84600503611e4a576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b84600603611e80576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b84600703611baf5760188381013584016038818101929182013591818701358701918201910135611d96611d7e60046000898b615a3a565b6000611ec5610fa3612945565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611f005750333014155b156121a45760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611fa59033908590369060040161595a565b6000604051808303816000875af1158015611fc4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fec91908101906159a6565b90506000198603612039576120378585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b505b8560010361207457600061204b612945565b9050600061205f8760581b600160f81b1790565b905061206c81878761359a565b505050611bc8565b8560020361208d576120878585856136f2565b50611bc8565b856003036120cc5760006120a46004828688615a3a565b6120ad91615a64565b90506120c5816120c0866004818a615a3a565b61375d565b5050611bc8565b85600403612114576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b8560050361215c576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b85600603611baf576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b60001985036121ef576121ed8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b505b8460010361222a576000612201612945565b905060006122158660581b600160f81b1790565b905061222281868661359a565b5050506108dc565b846002036122435761223d8484846136f2565b506108dc565b8460030361227657600061225a6004828587615a3a565b61226391615a64565b9050611c37816120c08560048189615a3a565b846004036122be5761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b846005036123065761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b84600603611baf5761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b6000612358612945565b54600160a81b900463ffffffff16919050565b6040805180820190915260008082526020820152612387612945565b6001600160581b03199290921660009081526001909201602090815260409283902083518085019094525463ffffffff8116845264010000000090046001600160a01b0316908301525090565b606060006123e133612969565b546001600160a01b031690508061240b5760405163710c949760e01b815260040160405180910390fd5b60606001600160a01b03821660011461242d5761242a82600036610755565b90505b6124388686866137ee565b92506001600160a01b03821660011461247757612477828260018660405160200161246391906157c9565b60405160208183030381529060405261086d565b50509392505050565b60408051606080820183526000808352602083015291810191909152600882901b6124a9612945565b6001600160e01b03198216600090815260039190910160209081526040918290208251606081018452815460f081901b6001600160f01b03191682526201000090046001600160a01b0316818401526001820180548551818602810186018752818152929593949386019383018282801561255457602002820191906000526020600020905b815460501b69ffffffffffffffffffff1916815260019091019060200180831161252f575b505050505081525050915050919050565b6000612572610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906125ad5750333014155b1561272c5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156125f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261a9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906126529033908590369060040161595a565b6000604051808303816000875af1158015612671573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261269991908101906159a6565b905060006126a888888861359a565b90506126b5818686613a13565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906126e2908490600401615782565b6020604051808303816000875af1158015612701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127259190615a18565b50506115e0565b600061273987878761359a565b9050612746818585613a13565b50505050505050565b600061275c610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906127975750333014155b156129075760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156127e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128049190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061283c9033908590369060040161595a565b6000604051808303816000875af115801561285b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261288391908101906159a6565b90506128908585856137ee565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906128bd908490600401615782565b6020604051808303816000875af11580156128dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129009190615a18565b5050611151565b6108dc8484846137ee565b600061291c612945565b5460581b919050565b6000600882101561293857506001919050565b506000919050565b919050565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f90565b6001600160a01b031660009081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b6001600160f81b03199081169116141590565b60006129bf612945565b60208701519091506001600160a01b03166129dc57600160208701525b85518154600160a81b900463ffffffff9081169116141580612a24575085516001600160581b03198816600090815260018301602052604090205463ffffffff918216911610155b15612a4257604051633ab3447f60e11b815260040160405180910390fd5b6001600160581b03198716600090815260018083016020908152604090922088518154938a01516001600160a01b031664010000000081026001600160c01b031990951663ffffffff9092169190911793909317905514612aac57612aac86602001518484613260565b86612abb81600160f81b6107d7565b15612b35576000612acc8960581c90565b6040516306d61fe760e41b81529091506001600160a01b03821690636d61fe7090612afd908a908a90600401615b5a565b600060405180830381600087803b158015612b1757600080fd5b505af1158015612b2b573d6000803e3d6000fd5b50505050506117cf565b612b4381600160f91b6107d7565b15612b67576000612b548960081b90565b9050612b61818888613aba565b506117cf565b6040516361c4e91b60e11b815260040160405180910390fd5b813536600060f883901c8015612ba65760018114612bbb5760028114612bcc5760206000fd5b60009350600186019250600186039150612be6565b601586019250601585039150612be6565b6001600160d81b0319841693506005860192506005850391505b509250925092565b604080517f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8360208201529081018290526000906107e8906060015b60405160208183030381529060405280519060200120613e89565b6000806000366000612c598a8a8a8a8a613fa1565b9350935093509350600080612c6d856140ad565b50915091508165ffffffffffff16421080612c8f57508065ffffffffffff1642115b15612cab57506001600160e01b03199550612d3b945050505050565b6001600160a01b03861663392dffaf6001600160e01b03198e168d612ccf8e612bee565b88886040518663ffffffff1660e01b8152600401612cf1959493929190615b6e565b602060405180830381865afa158015612d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d329190615ac4565b96505050505050505b95945050505050565b80600881901b8060ff60f084901c166001198101612d6a576001600160d81b0319821691505b509193909250565b600080612d7d612945565b90506000612d8a85615bf8565b9050366000612d9d610100880188615ae1565b9092509050612db089600160f81b6107d7565b15612e0e57612dcc88612dc76101008a018a615ae1565b6140e0565b604080516020601f8401819004810282018101909252828152939850919450925083908390819084018382808284376000920191909152505050506101008401525b87612e1d81600160f81b6107d7565b15612eac57612ea586612e308b60581c90565b6001600160a01b03166397003203878b6040518363ffffffff1660e01b8152600401612e5d929190615d8d565b6020604051808303816000875af1158015612e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea09190615daf565b6142b1565b9550612f61565b6000612eb88a60081b90565b6001600160e01b03198116600090815260038801602052604090205490915060f01b600160f01b1615612efe576040516314b9743f60e01b815260040160405180910390fd5b600080612f0d8388888861436f565b91509150612f1b89836142b1565b9850612f5b89826001600160a01b0316630ccab7a1866001600160e01b0319168b8f6040518463ffffffff1660e01b8152600401612e5d93929190615dc8565b98505050505b5050505050949350505050565b6000612f78612945565b805490915063ffffffff80841691612f9a91600a91600160a81b900416615e07565b63ffffffff161015612fbf5760405163e60fd64760e01b815260040160405180910390fd5b805463ffffffff600160c81b909104811690831611612ff157604051633ab3447f60e11b815260040160405180910390fd5b805463ffffffff60c81b1916600160c81b63ffffffff8481168202929092178084559081048216600160a81b909104909116101561117957805463ffffffff60a81b198116600160c81b90910463ffffffff16600160a81b0217905550565b600061305a612945565b905060005b87811015613100576130f889898381811061307c5761307c615e2b565b90506020020160208101906130919190615795565b8883815181106130a3576130a3615e2b565b60200260200101518888858181106130bd576130bd615e2b565b90506020028101906130cf9190615ae1565b8888878181106130e1576130e1615e2b565b90506020028101906130f39190615ae1565b6129b5565b60010161305f565b508054600160a81b900463ffffffff1681601561311c83615e41565b91906101000a81548163ffffffff021916908363ffffffff160217905550505050505050505050565b600061314f612945565b80546001600160581b03198916600090815260018301602052604090205491925063ffffffff600160a81b90910481169116036131c1578054600160a81b900463ffffffff168160156131a183615e41565b91906101000a81548163ffffffff021916908363ffffffff160217905550505b6127468787878787876129b5565b6001600160a01b0381166131e1575060015b60006131ec85612969565b80546001600160a01b0319166001600160a01b038481169190911782556040516306d61fe760e41b8152919250861690636d61fe70906132329087908790600401615b5a565b600060405180830381600087803b15801561324c57600080fd5b505af1158015610acd573d6000803e3d6000fd5b6001600160a01b038316158061327f57506001600160a01b0383166001145b1561328957505050565b60405163d60b347f60e01b81523060048201526001600160a01b0384169063d60b347f90602401602060405180830381865afa1580156132cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f19190615a18565b61335c576001600160a01b038316636d61fe706133118360018187615a3a565b6040518363ffffffff1660e01b815260040161332e929190615b5a565b600060405180830381600087803b15801561334857600080fd5b505af1158015612746573d6000803e3d6000fd5b6001600160f81b0319828260008161337657613376615e2b565b9050013560f81c60f81b6001600160f81b031916036133ab576001600160a01b038316636d61fe706133118360018187615a3a565b505050565b6001600160a01b0383166133c357600192505b60006133ce8661071b565b90506000838360008181106133e5576133e5615e2b565b9050013560f81c60f81b90506133ff81600060f81b6107d7565b15613474576001600160a01b038616636d61fe706134208560018189615a3a565b6040518363ffffffff1660e01b815260040161343d929190615b5a565b600060405180830381600087803b15801561345757600080fd5b505af115801561346b573d6000803e3d6000fd5b505050506134a4565b613486816001600160f81b03196129a2565b156134a457604051632d6a6bb760e01b815260040160405180910390fd5b81546001600160a01b039586166001600160a01b03199091161782556001909101805460f89290921c600160a01b026001600160a81b0319909216959094169490941793909317909155505050565b600061354d835a600080638a91b0e360e01b876040516024016135169190615782565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261464f565b50604080516001600160a01b038616815282151560208201529192507f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3910160405180910390a192915050565b6000806135a5612945565b805490915060581b6001600160581b0319908116908616036136155760405162461bcd60e51b8152602060048201526024808201527f526f6f742076616c696461746f722063616e6e6f7420626520756e696e7374616044820152631b1b195960e21b6064820152608401610a13565b6001600160581b03198516600090815260018201602052604090208054640100000000600160c01b0319811690915564010000000090046001600160a01b031691508461366681600160f81b6107d7565b156136c05760006136778760581c90565b90506136b98187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b5050612477565b6136ce81600160f91b6107d7565b15612b675760006136df8760081b90565b90506136ec8187876146d9565b50612477565b6000806136fe85612969565b80546001600160a01b031981168255604080516020601f88018190048102820181019092528681526001600160a01b0390921694509192506124779187919087908790819084018382808284376000920191909152506134f392505050565b6000806137698561071b565b80546001600160a01b0319811682556001820154604080516020601f89018190048102820181019092528781526001600160a01b0393841696509394506137cf93919092169187908790819084018382808284376000920191909152506134f392505050565b5060010180546001600160a81b03191660ff60a01b1790559392505050565b606083600881901b61380482600160f81b6107d7565b15613887578435850160208101903561381e8360006107d7565b156138345761382d8282614851565b94506136b9565b61384283600160f81b6107d7565b156138515761382d8282614921565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610a13565b6138928260006107d7565b156139c0576000803660006138a78989614a4e565b6040805160018082528183019092529498509296509094509250816020015b60608152602001906001900390816138c657905050965060006138e986826107d7565b1561391d576138fa85858585614a9f565b8860008151811061390d5761390d615e2b565b60200260200101819052506139b6565b61392b86600160f81b6107d7565b156138515761393c85858585614ad5565b8960008151811061394f5761394f615e2b565b60209081029190910101529050806139b6577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb760008960008151811061399757613997615e2b565b60200260200101516040516139ad929190615e64565b60405180910390a15b5050505050612477565b6139d2826001600160f81b03196107d7565b156138515760006139e66014828789615a3a565b6139ef91615b27565b60601c9050366000613a04876014818b615a3a565b915091506139b683838361083e565b6001600160a01b0383161580613a3257506001600160a01b0383166001145b15613a3c57505050565b6001600160f81b03198282600081613a5657613a56615e2b565b9050013560f81c60f81b6001600160f81b031916036133ab5761115183613a808360018187615a3a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b6000613ac4612945565b90508235830160208101903560fe811180613add575080155b15613afb5760405163b62d956d60e01b815260040160405180910390fd5b6001600160e01b03198616600090815260038401602052604090206001015415613b49576001600160e01b0319861660009081526003840160205260408120613b4991600190910190615112565b60005b6000198201811015613cdb576001600160e01b0319871660009081526003850160205260409020600101838383818110613b8857613b88615e2b565b9050602002810190613b9a9190615ae1565b613ba991601691600091615a3a565b613bb291615e7d565b81546001810183556000928352602090922090910180546001600160b01b03191660509290921c919091179055828282818110613bf157613bf1615e2b565b9050602002810190613c039190615ae1565b613c1291601691600291615a3a565b613c1b91615b27565b60601c636d61fe706001600160e01b03198916858585818110613c4057613c40615e2b565b9050602002810190613c529190615ae1565b613c60916016908290615a3a565b604051602001613c7293929190615eae565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613c9d9190615782565b600060405180830381600087803b158015613cb757600080fd5b505af1158015613ccb573d6000803e3d6000fd5b505060019092019150613b4c9050565b50600082826000198101818110613cf457613cf4615e2b565b9050602002810190613d069190615ae1565b613d1591601691600291615a3a565b613d1e91615b27565b6001600160e01b031988166000908152600386016020526040902080546201000060609390931c92830262010000600160b01b0319909116179055905082826000198101818110613d7157613d71615e2b565b9050602002810190613d839190615ae1565b613d9291600291600091615a3a565b613d9b91615ec8565b6001600160e01b0319881660008181526003870160205260409020805461ffff191660f09390931c929092179091556001600160a01b03821690636d61fe709085856000198101818110613df157613df1615e2b565b9050602002810190613e039190615ae1565b613e11916016908290615a3a565b604051602001613e2393929190615eae565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613e4e9190615782565b600060405180830381600087803b158015613e6857600080fd5b505af1158015613e7c573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416613f7c5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60008036600080613fb0612945565b60408051610120810182526000808252602082018190529181018290526080810182905260a0810191909152606060c082018190526001600160e01b03198d16908201526001600160a01b038b1660e082015261010081018a905290915061401a81838a8a614b06565b8787600081811061402d5761402d615e2b565b9091013560f81c60ff1490506140565760405163b32eeb6960e01b815260040160405180910390fd5b614063876001818b615a3a565b60608301516001600160e01b0319166000908152600394909401602052604093849020549390920151620100009093046001600160a01b03169c929b509950975095505050505050565b600060a082901c65ffffffffffff1682811560001981016140d25765ffffffffffff92505b508360d01c92509193909250565b6000366000806140ee612945565b905060003660006141008a8a8a614d73565b8654929550909350915060581b600061411d82600160f81b6107d7565b156141a9578554604051637aa8f17760e11b81526001600160a81b038216916001600160a01b03169063f551e2ee906141609030908a908a908a90600401615a92565b602060405180830381865afa15801561417d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a19190615ac4565b91505061425f565b6141b782600160f91b6107d7565b15612b6757855460601b60006141d08230898989613fa1565b60405163392dffaf60e01b8152929e5090985096509091506001600160a01b0382169063392dffaf90614219906001600160e01b031986169030908c908c908c90600401615b6e565b602060405180830381865afa158015614236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061425a9190615ac4565b925050505b630b135d3f60e11b6001600160e01b0319821614614290576040516362467c7760e11b815260040160405180910390fd5b50969a60948a0135909901603481019a506014013598975050505050505050565b600081830160601b8260601b81148460601b8214176001600160a01b03848618161517600181146142e55760019250614367565b6001600160d01b031980851690861681811881831102188686176001600160a01b031617935065ffffffffffff60a01b8616908161432a5765ffffffffffff60a01b91505b5065ffffffffffff60a01b851680614348575065ffffffffffff60a01b5b808218908211021880614361575065ffffffffffff60a01b5b92909217915b505092915050565b600080600061437c612945565b6001600160e01b03198816600090815260038201602052604081209192506001909101905b8154811015614593576000806143da8484815481106143c2576143c2615e2b565b60009182526020909120015460501b90605082901c90565b915091506000898960008181106143f3576143f3615e2b565b919091013560f81c915050838103614486576000614415600960018c8e615a3a565b61441e91615ef6565b60c01c90506144336009808301908c8e615a3a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008d015261447c8a60098301818e615a3a565b9a509a50506144c0565b838160ff1610156144aa57604051630760bdcf60e11b815260040160405180910390fd5b6040805160208101909152600081526101008c01525b600160f01b8316600003614588576000826001600160a01b0316637129edce8e6001600160e01b0319168e6040518363ffffffff1660e01b8152600401614508929190615f24565b6020604051808303816000875af1158015614527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061454b9190615daf565b9050806001600160a01b0381161561457957604051631f24c1fb60e11b815260048101879052602401610a13565b6145838a836142b1565b995050505b5050506001016143a1565b50858560008181106145a7576145a7615e2b565b9091013560f81c60ff1490506145d05760405163b32eeb6960e01b815260040160405180910390fd5b6145dd8560018189615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008c01949094525050506001600160e01b03198916815260039092016020525060409020546001600160a01b036201000090910416905094509492505050565b6000606060008060008661ffff166001600160401b0381111561467457614674615591565b6040519080825280601f01601f19166020018201604052801561469e576020820181803683370190505b5090506000808751602089018b8e8ef191503d9250868311156146bf578692505b828152826000602083013e90999098509650505050505050565b8135820160208101903560006146ed612945565b6001600160e01b0319871660009081526003919091016020526040902060018082015491925061471d9190615f3d565b821461473c5760405163013dcc8d60e31b815260040160405180910390fd5b6001810160005b81548110156147c95760006147638383815481106143c2576143c2615e2b565b9150506147bf818a6001600160e01b03191688888681811061478757614787615e2b565b90506020028101906147999190615ae1565b6040516020016147ab93929190615eae565b6040516020818303038152906040526134f3565b5050600101614743565b506147d2612945565b6001600160e01b031988166000908152600391909101602052604081206147fe91600190910190615112565b815461483a906201000090046001600160a01b03166001600160e01b03198916868661482b600182615f50565b81811061478757614787615e2b565b505080546001600160b01b03191690555050505050565b606081806001600160401b0381111561486c5761486c615591565b60405190808252806020026020018201604052801561489f57816020015b606081526020019060019003908161488a5790505b50915060005b8181101561436757368585838181106148c0576148c0615e2b565b90506020028101906148d29190615f63565b90506148fb6148e46020830183615399565b60208301356148f66040850185615ae1565b614a9f565b84838151811061490d5761490d615e2b565b6020908102919091010152506001016148a5565b606081806001600160401b0381111561493c5761493c615591565b60405190808252806020026020018201604052801561496f57816020015b606081526020019060019003908161495a5790505b50915060005b81811015614367573685858381811061499057614990615e2b565b90506020028101906149a29190615f63565b905060006149cd6149b66020840184615399565b60208401356149c86040860186615ae1565b614ad5565b8685815181106149df576149df615e2b565b6020908102919091010152905080614a44577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb783868581518110614a2557614a25615e2b565b6020026020010151604051614a3b929190615e64565b60405180910390a15b5050600101614975565b6000803681614a606014828789615a3a565b614a6991615b27565b60601c9350614a7c603460148789615a3a565b614a8591615f83565b9250614a948560348189615a3a565b949793965094505050565b60405181838237600038838387895af1614abc573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b60608401516001600160e01b03191660009081526003840160205260408120600101905b81548110156115e057614b488282815481106143c2576143c2615e2b565b6001600160a01b031660a08801526001600160f01b03191660808701528383600081614b7657614b76615e2b565b919091013560f81c8088528290039050614c1357614b98600960018587615a3a565b614ba191615ef6565b60c01c60208701819052614bbc906009908101908587615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701526020860151614c0a9084906009018187615a3a565b93509350614c7f565b855160ff16811115614c3857604051630760bdcf60e11b815260040160405180910390fd5b614c456000808587615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701525b6080860151600160f11b16600003614d6b5760a0860151606087015160e088015161010089015160c08a015160405163184dfdbb60e11b81526000956001600160a01b03169463309bfb7694614ce6946001600160e01b0319909216939092600401615fa1565b602060405180830381865afa158015614d03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d279190615daf565b9050806001600160a01b03811615614d5557604051631f24c1fb60e11b815260048101849052602401610a13565b614d638860400151836142b1565b604089015250505b600101614b2a565b60003660008036600036600036600080614d8e8e8e8e614dfd565b9750975097509750975097509750975060748d013560348e0101995060208a03359850614dbf8e8989898989613145565b614dc98383614fb2565b614deb8e614ddb600460008688615a3a565b614de491615a64565b600161507f565b99505050505050505093509350939050565b6040805180820190915260008082526020820152366000366000366000806000614e25612945565b9050614e35601460008c8e615a3a565b614e3e91615b27565b60601c89602001906001600160a01b031690816001600160a01b0316815250508060000160159054906101000a900463ffffffff16896000019063ffffffff16908163ffffffff168152505060148b013560348c010197506020880335965060348b013560348c010195506020860335945060548b013560348c0101935060208403359250614fa27fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c50560001b8d8360000160159054906101000a900463ffffffff168c602001518c8c604051614f15929190615fce565b60405180910390208b8b604051614f2d929190615fce565b60405180910390208a8a604051614f45929190615fce565b6040805191829003822060208301989098526001600160581b03199096169581019590955263ffffffff90931660608501526001600160a01b03909116608084015260a083015260c082015260e081019190915261010001612c29565b9150509397509397509397509397565b6000614fc16004828486615a3a565b614fca91615a64565b9050600482106133ab57602c821061503857602c838101358401604c8181019291820135918187013587019182019101356150278561500d601860048a8c615a3a565b61501691615b27565b60601c611a67602c60188b8d615a3a565b612746611a8b602c6018898b615a3a565b600482146133ab5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606401610a13565b6000615089612945565b6001600160581b03198516600081815260028301602090815260408083206001600160e01b0319891680855290835292819020805488151560ff1990911681179091558151938452918301939093528183015290519192507f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a919081900360600190a150505050565b50805460008255906000526020600020908101906151309190615133565b50565b5b808211156151485760008155600101615134565b5090565b6001600160a01b038116811461513057600080fd5b80356129408161514c565b60008083601f84011261517e57600080fd5b5081356001600160401b0381111561519557600080fd5b6020830191508360208285010111156151ad57600080fd5b9250929050565b600080600080606085870312156151ca57600080fd5b8435935060208501356151dc8161514c565b925060408501356001600160401b038111156151f757600080fd5b6152038782880161516c565b95989497509550505050565b80356001600160581b03198116811461294057600080fd5b6000806000806000806080878903121561524057600080fd5b6152498761520f565b955060208701356152598161514c565b945060408701356001600160401b038082111561527557600080fd5b6152818a838b0161516c565b9096509450606089013591508082111561529a57600080fd5b506152a789828a0161516c565b979a9699509497509295939492505050565b6000806000604084860312156152ce57600080fd5b8335925060208401356001600160401b038111156152eb57600080fd5b6152f78682870161516c565b9497909650939450505050565b6000610120828403121561531757600080fd5b50919050565b60008060006060848603121561533257600080fd5b83356001600160401b0381111561534857600080fd5b61535486828701615304565b9660208601359650604090950135949350505050565b803563ffffffff8116811461294057600080fd5b60006020828403121561539057600080fd5b610c738261536a565b6000602082840312156153ab57600080fd5b8135610c738161514c565b6001600160e01b03198116811461513057600080fd5b6000602082840312156153de57600080fd5b8135610c73816153b6565b600080604083850312156153fc57600080fd5b6154058361520f565b91506020830135615415816153b6565b809150509250929050565b60005b8381101561543b578181015183820152602001615423565b50506000910152565b6000815180845261545c816020860160208601615420565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e0602084015261549160e084018a615444565b83810360408501526154a3818a615444565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b818110156154f7578351835292840192918401916001016154db565b50909c9b505050505050505050505050565b6000806040838503121561551c57600080fd5b82356001600160401b0381111561553257600080fd5b61553e85828601615304565b95602094909401359450505050565b60008083601f84011261555f57600080fd5b5081356001600160401b0381111561557657600080fd5b6020830191508360208260051b85010111156151ad57600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156155c9576155c9615591565b60405290565b60405161012081016001600160401b03811182821017156155c9576155c9615591565b604051601f8201601f191681016001600160401b038111828210171561561a5761561a615591565b604052919050565b60008060008060008060006080888a03121561563d57600080fd5b6001600160401b03808935111561565357600080fd5b6156608a8a358b0161554d565b909850965060208901358181111561567757600080fd5b8901601f81018b1361568857600080fd5b80358281111561569a5761569a615591565b6156a960208260051b016155f2565b8082825260208201915060208360061b85010192508d8311156156cb57600080fd5b6020840193505b82841015615727576040848f0312156156ea57600080fd5b6156f26155a7565b6156fb8561536a565b8152602085013561570b8161514c565b80602083015250808352506020820191506040840193506156d2565b985050505060408901358181111561573e57600080fd5b61574a8b828c0161554d565b90965094505060608901358181111561576257600080fd5b61576e8b828c0161554d565b999c989b5096995094979396939450505050565b602081526000610c736020830184615444565b6000602082840312156157a757600080fd5b610c738261520f565b6000602082840312156157c257600080fd5b5035919050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561582057603f1988860301845261580e858351615444565b945092850192908501906001016157f2565b5092979650505050505050565b602080825282516001600160f01b03191682820152828101516001600160a01b031660408084019190915283015160608084015280516080840181905260009291820190839060a08601905b808310156158a657835169ffffffffffffffffffff19168252928401926001929092019190840190615879565b509695505050505050565b6000806000806000606086880312156158c957600080fd5b6158d28661520f565b945060208601356001600160401b03808211156158ee57600080fd5b6158fa89838a0161516c565b9096509450604088013591508082111561591357600080fd5b506159208882890161516c565b969995985093965092949392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612d3b9083018486615931565b60006001600160401b0382111561599857615998615591565b50601f01601f191660200190565b6000602082840312156159b857600080fd5b81516001600160401b038111156159ce57600080fd5b8201601f810184136159df57600080fd5b80516159f26159ed8261597f565b6155f2565b818152856020838501011115615a0757600080fd5b612d3b826020830160208601615420565b600060208284031215615a2a57600080fd5b81518015158114610c7357600080fd5b60008085851115615a4a57600080fd5b83861115615a5757600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156143675760049490940360031b84901b1690921692915050565b60018060a01b0385168152836020820152606060408201526000615aba606083018486615931565b9695505050505050565b600060208284031215615ad657600080fd5b8151610c73816153b6565b6000808335601e19843603018112615af857600080fd5b8301803591506001600160401b03821115615b1257600080fd5b6020019150368190038213156151ad57600080fd5b6bffffffffffffffffffffffff1981358181169160148510156143675760149490940360031b84901b1690921692915050565b6020815260006107cf602083018486615931565b85815260018060a01b0385166020820152836040820152608060608201526000615b9c608083018486615931565b979650505050505050565b600082601f830112615bb857600080fd5b8135615bc66159ed8261597f565b818152846020838601011115615bdb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215615c0b57600080fd5b615c136155cf565b615c1c83615161565b81526020830135602082015260408301356001600160401b0380821115615c4257600080fd5b615c4e36838701615ba7565b60408401526060850135915080821115615c6757600080fd5b615c7336838701615ba7565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e0850135915080821115615caa57600080fd5b615cb636838701615ba7565b60e084015261010091508185013581811115615cd157600080fd5b615cdd36828801615ba7565b8385015250505080915050919050565b80516001600160a01b031682526000610120602083015160208501526040830151816040860152615d2082860182615444565b91505060608301518482036060860152615d3a8282615444565b9150506080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152615d728282615444565b9150506101008084015185830382870152615aba8382615444565b604081526000615da06040830185615ced565b90508260208301529392505050565b600060208284031215615dc157600080fd5b5051919050565b838152606060208201526000615de16060830185615ced565b9050826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115615e2457615e24615df1565b5092915050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff808316818103615e5a57615e5a615df1565b6001019392505050565b8281526040602082015260006107cf6040830184615444565b69ffffffffffffffffffff1981358181169160168510156143675760169490940360031b84901b1690921692915050565b838152818360208301376000910160200190815292915050565b6001600160f01b031981358181169160028510156143675760029490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156143675760089490940360031b84901b1690921692915050565b8281526040602082015260006107cf6040830184615ced565b808201808211156107e8576107e8615df1565b818103818111156107e8576107e8615df1565b60008235605e19833603018112615f7957600080fd5b9190910192915050565b803560208310156107e857600019602084900360031b1b1692915050565b84815260018060a01b0384166020820152826040820152608060608201526000615aba6080830184615444565b8183823760009101908152919050560000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x2d", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x642f5b8c4b1293c815bce3dabdf8de29c4ce85dc612458b79621bc4bbf5fd919", + "transactionIndex": "0x0", + "blockHash": "0xd5cf29816629d8195d2d5bdfdef484be5e43da8d8a3e87b4066b15f36af4fb47", + "blockNumber": "0x55acac", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x524718", + "gasUsed": "0x524718", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xc5c9a23a" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712078188, + "chain": 11155111, + "commit": "ef4e38d" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/11155111/run-1712078215.json b/broadcast/Deploy.s.sol/11155111/run-1712078215.json new file mode 100644 index 00000000..fa5500ab --- /dev/null +++ b/broadcast/Deploy.s.sol/11155111/run-1712078215.json @@ -0,0 +1,50 @@ +{ + "transactions": [ + { + "hash": "0x642f5b8c4b1293c815bce3dabdf8de29c4ce85dc612458b79621bc4bbf5fd919", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xFB642cE6CFFbC38270591dD6F3978deb27FA5B1E", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x784bc8", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006101406040523480156200001257600080fd5b506040516200623f3803806200623f833981016040819052620000359162000168565b306080524660a05260608062000085604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152808501939093528281019190915246606083015230608083015260a0909120610100526001600160a01b03851661012052805163deadbeef60e01b92810192909252805160048184030181526024909201905262000128925090506200019a565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b03191660589290921c91909117905550620001d2565b6000602082840312156200017b57600080fd5b81516001600160a01b03811681146200019357600080fd5b9392505050565b805160208201516001600160581b03198082169291906015831015620001ca5780818460150360031b1b83161693505b505050919050565b60805160a05160c05160e0516101005161012051615fde620002616000396000818161058d01528181610c8701528181610fbd01528181611197015281816114ec0152818161161f015281816117f301528181611ed20152818161257f015261276901526000613e8b01526000613f4501526000613f1f01526000613ecf01526000613eac0152615fde6000f3fe6080604052600436106101855760003560e01c80639517e29f116100d1578063d03c79141161008a578063e6f3d50a11610064578063e6f3d50a146106a7578063e9ae5c53146106ba578063f1f7f0f9146106cd578063f2dc691d146106fb576101c4565b8063d03c791414610639578063d691c9641461065a578063e0dfd3651461067a576101c4565b80639517e29f1461051c5780639cfd7cff1461052f578063a65d69d41461057b578063a71763a8146105c7578063adb610a3146105da578063b8afe17d146105ef576101c4565b806357b3a5f41161013e57806384b0196e1161011857806384b0196e146104975780638dd7712f146104bf57806390ef8862146104d25780639198bdf5146104fc576101c4565b806357b3a5f4146103e55780636e6fa0c61461043f578063721e67f41461045f576101c4565b8063112d3a7d1461031057806312af322c146103455780631626ba7e1461036557806319822f7c1461039e5780631f1b92e3146103bf5780633659cfe6146103d2576101c4565b366101c457604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b60006101db6000356001600160e01b03191661071b565b604080516060808201835283546001600160a01b039081168084526001909501549081166020840152600160a01b900460f81b6001600160f81b03191692820192909252925060009161024157604051631cd4b64760e21b815260040160405180910390fd5b82516060906001600160a01b031660011461026757835161026490600036610755565b90505b60408401516102779060006107d7565b156102935761028984602001516107ee565b90935091506102d8565b60408401516102aa906001600160f81b03196107d7565b156102bf57610289846020015160003661083e565b604051632d6a6bb760e01b815260040160405180910390fd5b83516001600160a01b03166001146102f85783516102f89082858561086d565b508161030657805160208201fd5b805160208201f35b005b34801561031c57600080fd5b5061033061032b3660046151b4565b6108e3565b60405190151581526020015b60405180910390f35b34801561035157600080fd5b5061030e610360366004615227565b6109b8565b34801561037157600080fd5b506103856103803660046152b9565b610ad8565b6040516001600160e01b0319909116815260200161033c565b6103b16103ac36600461531d565b610c7a565b60405190815260200161033c565b61030e6103cd36600461537e565b610f96565b61030e6103e0366004615399565b61117d565b3480156103f157600080fd5b506104056104003660046153cc565b611394565b6040805182516001600160a01b03908116825260208085015190911690820152918101516001600160f81b0319169082015260600161033c565b34801561044b57600080fd5b5061033061045a3660046153e9565b611400565b34801561046b57600080fd5b5061047f61047a366004615399565b611448565b60405190516001600160a01b0316815260200161033c565b3480156104a357600080fd5b506104ac61147e565b60405161033c9796959493929190615470565b61030e6104cd366004615509565b6114e1565b3480156104de57600080fd5b506104e76115e8565b60405163ffffffff909116815260200161033c565b34801561050857600080fd5b5061030e610517366004615622565b611605565b61030e61052a3660046151b4565b6117d9565b34801561053b57600080fd5b50604080518082018252601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152905161033c9190615782565b34801561058757600080fd5b506105af7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161033c565b61030e6105d53660046151b4565b611eb8565b3480156105e657600080fd5b506104e761234e565b3480156105fb57600080fd5b5061060f61060a366004615795565b61236b565b60408051825163ffffffff1681526020928301516001600160a01b0316928101929092520161033c565b34801561064557600080fd5b506103306106543660046157b0565b50600190565b61066d6106683660046152b9565b6123d4565b60405161033c91906157c9565b34801561068657600080fd5b5061069a610695366004615795565b612480565b60405161033c919061582d565b61030e6106b53660046158b1565b612565565b61030e6106c83660046152b9565b61274f565b3480156106d957600080fd5b506106e2612912565b6040516001600160581b0319909116815260200161033c565b34801561070757600080fd5b506103306107163660046157b0565b612925565b6001600160e01b03191660009081527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b6020526040902090565b604051631057c74d60e11b81526060906001600160a01b038516906320af8e9a906107889033908790879060040161595a565b6000604051808303816000875af11580156107a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107cf91908101906159a6565b949350505050565b6001600160f81b0319828116908216145b92915050565b6000606060408051368101909152366000823760408051601481019091523360601b9052600080366014018382885af192505060405190503d8152602081013d6000823e3d810160405250915091565b604051600090828482376000388483885af491503d8152602081013d6000823e3d810160405250935093915050565b604051630b9dfbed60e11b81526001600160a01b0385169063173bf7da90610899908690600401615782565b6020604051808303816000875af11580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc9190615a18565b5050505050565b6000846001036109415760006108f7612945565b600101600061090c8760581b600160f81b1790565b6001600160581b031916815260208101919091526040016000205464010000000090046001600160a01b0316141590506107cf565b8460020361096757600061095485612969565b546001600160a01b0316141590506107cf565b846003036109ad576001600160a01b03841661099861098a600460008688615a3a565b61099391615a64565b61071b565b600101546001600160a01b03161490506107cf565b506000949350505050565b60006109c2612945565b805490915060581b6001600160581b03191615610a1c5760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b6001600160581b03198716610a4457604051631a0a9b9f60e21b815260040160405180910390fd5b86610a5381600160f81b6129a2565b8015610a685750610a6881600160f91b6129a2565b15610a86576040516361c4e91b60e11b815260040160405180910390fd5b815460408051808201909152600181526001600160a01b03891660208201526001600160c81b031990911660588a901c17600160a81b178355610acd8982898989896129b5565b505050505050505050565b600080610ae3612945565b90506000366000610af48787612b80565b925092509250610b0b610b048490565b60006107d7565b15610b1857835460581b92505b6001600160581b03198316600090815260018501602052604090205464010000000090046001600160a01b0316610b6257604051631a0a9b9f60e21b815260040160405180910390fd5b610b7083600160f81b6107d7565b15610c0a576000610b818460581c90565b9050806001600160a01b031663f551e2ee33610b9c8c612bee565b86866040518563ffffffff1660e01b8152600401610bbd9493929190615a92565b602060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe9190615ac4565b95505050505050610c73565b6000610c168460081b90565b6001600160e01b03198116600090815260038701602052604090205490915060f01b600160f11b811615610c5d57604051635b71057960e01b815260040160405180910390fd5b610c6a82338c8787612c44565b96505050505050505b9392505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cc5576040516348f5c3ed60e01b815260040160405180910390fd5b6000610ccf612945565b90506000806000610ce38860200135612d44565b91945092509050610cf58260006107d7565b15610d015750825460581b5b610d0d83828a8a612d72565b6001600160581b031982166000908152600186016020908152604080832081518083019092525463ffffffff8116825264010000000090046001600160a01b031691810191909152919650610d639084906129a2565b8015610d8157508454815163ffffffff600160c81b90920482169116105b15610d9f57604051633ab3447f60e11b815260040160405180910390fd5b60208101516001600160a01b038116610dcb57604051631a0a9b9f60e21b815260040160405180910390fd5b600089815260208190526040902080546001600160a01b0319166001600160a01b03831690811790915560001901610e9357610e088460006129a2565b8015610e7057506001600160581b031983166000908152600287016020526040812090610e3860608d018d615ae1565b610e4791600491600091615a3a565b610e5091615a64565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610e8e57604051631a0a9b9f60e21b815260040160405180910390fd5b610f79565b610e9e8460006129a2565b8015610f0657506001600160581b031983166000908152600287016020526040812090610ece60608d018d615ae1565b610edd91600891600491615a3a565b610ee691615a64565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610f2457604051631a0a9b9f60e21b815260040160405180910390fd5b638dd7712f60e01b610f3960608c018c615ae1565b610f4891600491600091615a3a565b610f5191615a64565b6001600160e01b03191614610f795760405163dbbb044b60e01b815260040160405180910390fd5b8715610f8957343434348b335af1505b5050505050509392505050565b6000610fb0610fa3612945565b546001600160a81b031690565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590610feb5750333014155b156111705760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110589190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906110909033908590369060040161595a565b6000604051808303816000875af11580156110af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110d791908101906159a6565b90506110e283612f6e565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615782565b6020604051808303816000875af115801561112d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111519190615a18565b50505050565b6040516348f5c3ed60e01b815260040160405180910390fd5b61117982612f6e565b5050565b600061118a610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906111c55750333014155b156113385760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061126a9033908590369060040161595a565b6000604051808303816000875af1158015611289573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112b191908101906159a6565b9050827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55826001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615782565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8290556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60408051606081018252600080825260208201819052918101919091526113ba8261071b565b6040805160608101825282546001600160a01b0390811682526001909301549283166020820152600160a01b90920460f81b6001600160f81b0319169082015292915050565b600061140a612945565b6001600160581b031984166000908152600291909101602090815260408083206001600160e01b03198616845290915290205460ff16905092915050565b60408051602081019091526000815261146082612969565b604080516020810190915290546001600160a01b0316815292915050565b600f60f81b60608060008080836114cf604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b97989097965046955030945091925090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461152a576040516348f5c3ed60e01b815260040160405180910390fd5b6000818152602081905260409020546060906001600160a01b031660018114611574576115718161155e6060870187615ae1565b61156c916004908290615a3a565b610755565b91505b60008061159b306115886060890189615ae1565b611596916004908290615a3a565b61083e565b90925090506001600160a01b0383166001146115c2576115bd8385848461086d565b6115e0565b816115e05760405163f21e646b60e01b815260040160405180910390fd5b505050505050565b60006115f2612945565b54600160c81b900463ffffffff16919050565b6000611612610fa3612945565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061164d5750333014155b156117c05760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906116f29033908590369060040161595a565b6000604051808303816000875af1158015611711573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261173991908101906159a6565b905061174a89898989898989613050565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611776908490600401615782565b6020604051808303816000875af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190615a18565b50506117cf565b6117cf88888888888888613050565b5050505050505050565b60006117e6610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906118215750333014155b15611c3e5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561186a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188e9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906118c69033908590369060040161595a565b6000604051808303816000875af11580156118e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261190d91908101906159a6565b9050856001036119b0576000611921612945565b905060006119358760581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff168152909150600090602081016119676014848a8c615a3a565b61197091615b27565b60601c9052905060148781013588016034818101929182013591818b01358b019182019101356119a4868686868686613145565b50505050505050611bc8565b85600203611a17576014848101358501603481810192918201359181880135880191820191810135906000906119e890828a8c615a3a565b6119f191615b27565b60601c9050611a028a8686846131cf565b611a0d818484613260565b5050505050611bc8565b85600303611aa75760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c615a3a565b611a5891615a64565b8a611a67601860048c8e615a3a565b611a7091615b27565b60601c87876133b0565b611a9e611a8b601860048a8c615a3a565b611a9491615b27565b60601c8383613260565b50505050611bc8565b85600403611b0b576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b600060405180830381600087803b158015611af757600080fd5b505af1158015611a9e573d6000803e3d6000fd5b85600503611b41576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b85600603611b77576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b85600703611baf5760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c615a3a565b604051631092ef5760e11b815260040160405180910390fd5b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611bf4908490600401615782565b6020604051808303816000875af1158015611c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c379190615a18565b50506108dc565b84600103611cdf576000611c50612945565b90506000611c648660581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff16815290915060009060208101611c96601484898b615a3a565b611c9f91615b27565b60601c9052905060148681013587016034818101929182013591818a01358a01918201910135611cd3868686868686613145565b505050505050506108dc565b84600203611d4657601483810135840160348181019291820135918187013587019182019181013590600090611d179082898b615a3a565b611d2091615b27565b60601c9050611d31898686846131cf565b611d3c818484613260565b50505050506108dc565b84600303611db05760188381013584016038818101929182013591818701358701918201910135611d96611d7e60046000898b615a3a565b611d8791615a64565b89611a67601860048b8d615a3a565b611da7611a8b60186004898b615a3a565b505050506108dc565b84600403611e14576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b600060405180830381600087803b158015611e0057600080fd5b505af1158015611da7573d6000803e3d6000fd5b84600503611e4a576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b84600603611e80576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b84600703611baf5760188381013584016038818101929182013591818701358701918201910135611d96611d7e60046000898b615a3a565b6000611ec5610fa3612945565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611f005750333014155b156121a45760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611fa59033908590369060040161595a565b6000604051808303816000875af1158015611fc4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fec91908101906159a6565b90506000198603612039576120378585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b505b8560010361207457600061204b612945565b9050600061205f8760581b600160f81b1790565b905061206c81878761359a565b505050611bc8565b8560020361208d576120878585856136f2565b50611bc8565b856003036120cc5760006120a46004828688615a3a565b6120ad91615a64565b90506120c5816120c0866004818a615a3a565b61375d565b5050611bc8565b85600403612114576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b8560050361215c576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b85600603611baf576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b60001985036121ef576121ed8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b505b8460010361222a576000612201612945565b905060006122158660581b600160f81b1790565b905061222281868661359a565b5050506108dc565b846002036122435761223d8484846136f2565b506108dc565b8460030361227657600061225a6004828587615a3a565b61226391615a64565b9050611c37816120c08560048189615a3a565b846004036122be5761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b846005036123065761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b84600603611baf5761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b6000612358612945565b54600160a81b900463ffffffff16919050565b6040805180820190915260008082526020820152612387612945565b6001600160581b03199290921660009081526001909201602090815260409283902083518085019094525463ffffffff8116845264010000000090046001600160a01b0316908301525090565b606060006123e133612969565b546001600160a01b031690508061240b5760405163710c949760e01b815260040160405180910390fd5b60606001600160a01b03821660011461242d5761242a82600036610755565b90505b6124388686866137ee565b92506001600160a01b03821660011461247757612477828260018660405160200161246391906157c9565b60405160208183030381529060405261086d565b50509392505050565b60408051606080820183526000808352602083015291810191909152600882901b6124a9612945565b6001600160e01b03198216600090815260039190910160209081526040918290208251606081018452815460f081901b6001600160f01b03191682526201000090046001600160a01b0316818401526001820180548551818602810186018752818152929593949386019383018282801561255457602002820191906000526020600020905b815460501b69ffffffffffffffffffff1916815260019091019060200180831161252f575b505050505081525050915050919050565b6000612572610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906125ad5750333014155b1561272c5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156125f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261a9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906126529033908590369060040161595a565b6000604051808303816000875af1158015612671573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261269991908101906159a6565b905060006126a888888861359a565b90506126b5818686613a13565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906126e2908490600401615782565b6020604051808303816000875af1158015612701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127259190615a18565b50506115e0565b600061273987878761359a565b9050612746818585613a13565b50505050505050565b600061275c610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906127975750333014155b156129075760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156127e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128049190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061283c9033908590369060040161595a565b6000604051808303816000875af115801561285b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261288391908101906159a6565b90506128908585856137ee565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906128bd908490600401615782565b6020604051808303816000875af11580156128dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129009190615a18565b5050611151565b6108dc8484846137ee565b600061291c612945565b5460581b919050565b6000600882101561293857506001919050565b506000919050565b919050565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f90565b6001600160a01b031660009081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b6001600160f81b03199081169116141590565b60006129bf612945565b60208701519091506001600160a01b03166129dc57600160208701525b85518154600160a81b900463ffffffff9081169116141580612a24575085516001600160581b03198816600090815260018301602052604090205463ffffffff918216911610155b15612a4257604051633ab3447f60e11b815260040160405180910390fd5b6001600160581b03198716600090815260018083016020908152604090922088518154938a01516001600160a01b031664010000000081026001600160c01b031990951663ffffffff9092169190911793909317905514612aac57612aac86602001518484613260565b86612abb81600160f81b6107d7565b15612b35576000612acc8960581c90565b6040516306d61fe760e41b81529091506001600160a01b03821690636d61fe7090612afd908a908a90600401615b5a565b600060405180830381600087803b158015612b1757600080fd5b505af1158015612b2b573d6000803e3d6000fd5b50505050506117cf565b612b4381600160f91b6107d7565b15612b67576000612b548960081b90565b9050612b61818888613aba565b506117cf565b6040516361c4e91b60e11b815260040160405180910390fd5b813536600060f883901c8015612ba65760018114612bbb5760028114612bcc5760206000fd5b60009350600186019250600186039150612be6565b601586019250601585039150612be6565b6001600160d81b0319841693506005860192506005850391505b509250925092565b604080517f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8360208201529081018290526000906107e8906060015b60405160208183030381529060405280519060200120613e89565b6000806000366000612c598a8a8a8a8a613fa1565b9350935093509350600080612c6d856140ad565b50915091508165ffffffffffff16421080612c8f57508065ffffffffffff1642115b15612cab57506001600160e01b03199550612d3b945050505050565b6001600160a01b03861663392dffaf6001600160e01b03198e168d612ccf8e612bee565b88886040518663ffffffff1660e01b8152600401612cf1959493929190615b6e565b602060405180830381865afa158015612d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d329190615ac4565b96505050505050505b95945050505050565b80600881901b8060ff60f084901c166001198101612d6a576001600160d81b0319821691505b509193909250565b600080612d7d612945565b90506000612d8a85615bf8565b9050366000612d9d610100880188615ae1565b9092509050612db089600160f81b6107d7565b15612e0e57612dcc88612dc76101008a018a615ae1565b6140e0565b604080516020601f8401819004810282018101909252828152939850919450925083908390819084018382808284376000920191909152505050506101008401525b87612e1d81600160f81b6107d7565b15612eac57612ea586612e308b60581c90565b6001600160a01b03166397003203878b6040518363ffffffff1660e01b8152600401612e5d929190615d8d565b6020604051808303816000875af1158015612e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea09190615daf565b6142b1565b9550612f61565b6000612eb88a60081b90565b6001600160e01b03198116600090815260038801602052604090205490915060f01b600160f01b1615612efe576040516314b9743f60e01b815260040160405180910390fd5b600080612f0d8388888861436f565b91509150612f1b89836142b1565b9850612f5b89826001600160a01b0316630ccab7a1866001600160e01b0319168b8f6040518463ffffffff1660e01b8152600401612e5d93929190615dc8565b98505050505b5050505050949350505050565b6000612f78612945565b805490915063ffffffff80841691612f9a91600a91600160a81b900416615e07565b63ffffffff161015612fbf5760405163e60fd64760e01b815260040160405180910390fd5b805463ffffffff600160c81b909104811690831611612ff157604051633ab3447f60e11b815260040160405180910390fd5b805463ffffffff60c81b1916600160c81b63ffffffff8481168202929092178084559081048216600160a81b909104909116101561117957805463ffffffff60a81b198116600160c81b90910463ffffffff16600160a81b0217905550565b600061305a612945565b905060005b87811015613100576130f889898381811061307c5761307c615e2b565b90506020020160208101906130919190615795565b8883815181106130a3576130a3615e2b565b60200260200101518888858181106130bd576130bd615e2b565b90506020028101906130cf9190615ae1565b8888878181106130e1576130e1615e2b565b90506020028101906130f39190615ae1565b6129b5565b60010161305f565b508054600160a81b900463ffffffff1681601561311c83615e41565b91906101000a81548163ffffffff021916908363ffffffff160217905550505050505050505050565b600061314f612945565b80546001600160581b03198916600090815260018301602052604090205491925063ffffffff600160a81b90910481169116036131c1578054600160a81b900463ffffffff168160156131a183615e41565b91906101000a81548163ffffffff021916908363ffffffff160217905550505b6127468787878787876129b5565b6001600160a01b0381166131e1575060015b60006131ec85612969565b80546001600160a01b0319166001600160a01b038481169190911782556040516306d61fe760e41b8152919250861690636d61fe70906132329087908790600401615b5a565b600060405180830381600087803b15801561324c57600080fd5b505af1158015610acd573d6000803e3d6000fd5b6001600160a01b038316158061327f57506001600160a01b0383166001145b1561328957505050565b60405163d60b347f60e01b81523060048201526001600160a01b0384169063d60b347f90602401602060405180830381865afa1580156132cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f19190615a18565b61335c576001600160a01b038316636d61fe706133118360018187615a3a565b6040518363ffffffff1660e01b815260040161332e929190615b5a565b600060405180830381600087803b15801561334857600080fd5b505af1158015612746573d6000803e3d6000fd5b6001600160f81b0319828260008161337657613376615e2b565b9050013560f81c60f81b6001600160f81b031916036133ab576001600160a01b038316636d61fe706133118360018187615a3a565b505050565b6001600160a01b0383166133c357600192505b60006133ce8661071b565b90506000838360008181106133e5576133e5615e2b565b9050013560f81c60f81b90506133ff81600060f81b6107d7565b15613474576001600160a01b038616636d61fe706134208560018189615a3a565b6040518363ffffffff1660e01b815260040161343d929190615b5a565b600060405180830381600087803b15801561345757600080fd5b505af115801561346b573d6000803e3d6000fd5b505050506134a4565b613486816001600160f81b03196129a2565b156134a457604051632d6a6bb760e01b815260040160405180910390fd5b81546001600160a01b039586166001600160a01b03199091161782556001909101805460f89290921c600160a01b026001600160a81b0319909216959094169490941793909317909155505050565b600061354d835a600080638a91b0e360e01b876040516024016135169190615782565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261464f565b50604080516001600160a01b038616815282151560208201529192507f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3910160405180910390a192915050565b6000806135a5612945565b805490915060581b6001600160581b0319908116908616036136155760405162461bcd60e51b8152602060048201526024808201527f526f6f742076616c696461746f722063616e6e6f7420626520756e696e7374616044820152631b1b195960e21b6064820152608401610a13565b6001600160581b03198516600090815260018201602052604090208054640100000000600160c01b0319811690915564010000000090046001600160a01b031691508461366681600160f81b6107d7565b156136c05760006136778760581c90565b90506136b98187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b5050612477565b6136ce81600160f91b6107d7565b15612b675760006136df8760081b90565b90506136ec8187876146d9565b50612477565b6000806136fe85612969565b80546001600160a01b031981168255604080516020601f88018190048102820181019092528681526001600160a01b0390921694509192506124779187919087908790819084018382808284376000920191909152506134f392505050565b6000806137698561071b565b80546001600160a01b0319811682556001820154604080516020601f89018190048102820181019092528781526001600160a01b0393841696509394506137cf93919092169187908790819084018382808284376000920191909152506134f392505050565b5060010180546001600160a81b03191660ff60a01b1790559392505050565b606083600881901b61380482600160f81b6107d7565b15613887578435850160208101903561381e8360006107d7565b156138345761382d8282614851565b94506136b9565b61384283600160f81b6107d7565b156138515761382d8282614921565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610a13565b6138928260006107d7565b156139c0576000803660006138a78989614a4e565b6040805160018082528183019092529498509296509094509250816020015b60608152602001906001900390816138c657905050965060006138e986826107d7565b1561391d576138fa85858585614a9f565b8860008151811061390d5761390d615e2b565b60200260200101819052506139b6565b61392b86600160f81b6107d7565b156138515761393c85858585614ad5565b8960008151811061394f5761394f615e2b565b60209081029190910101529050806139b6577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb760008960008151811061399757613997615e2b565b60200260200101516040516139ad929190615e64565b60405180910390a15b5050505050612477565b6139d2826001600160f81b03196107d7565b156138515760006139e66014828789615a3a565b6139ef91615b27565b60601c9050366000613a04876014818b615a3a565b915091506139b683838361083e565b6001600160a01b0383161580613a3257506001600160a01b0383166001145b15613a3c57505050565b6001600160f81b03198282600081613a5657613a56615e2b565b9050013560f81c60f81b6001600160f81b031916036133ab5761115183613a808360018187615a3a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b6000613ac4612945565b90508235830160208101903560fe811180613add575080155b15613afb5760405163b62d956d60e01b815260040160405180910390fd5b6001600160e01b03198616600090815260038401602052604090206001015415613b49576001600160e01b0319861660009081526003840160205260408120613b4991600190910190615112565b60005b6000198201811015613cdb576001600160e01b0319871660009081526003850160205260409020600101838383818110613b8857613b88615e2b565b9050602002810190613b9a9190615ae1565b613ba991601691600091615a3a565b613bb291615e7d565b81546001810183556000928352602090922090910180546001600160b01b03191660509290921c919091179055828282818110613bf157613bf1615e2b565b9050602002810190613c039190615ae1565b613c1291601691600291615a3a565b613c1b91615b27565b60601c636d61fe706001600160e01b03198916858585818110613c4057613c40615e2b565b9050602002810190613c529190615ae1565b613c60916016908290615a3a565b604051602001613c7293929190615eae565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613c9d9190615782565b600060405180830381600087803b158015613cb757600080fd5b505af1158015613ccb573d6000803e3d6000fd5b505060019092019150613b4c9050565b50600082826000198101818110613cf457613cf4615e2b565b9050602002810190613d069190615ae1565b613d1591601691600291615a3a565b613d1e91615b27565b6001600160e01b031988166000908152600386016020526040902080546201000060609390931c92830262010000600160b01b0319909116179055905082826000198101818110613d7157613d71615e2b565b9050602002810190613d839190615ae1565b613d9291600291600091615a3a565b613d9b91615ec8565b6001600160e01b0319881660008181526003870160205260409020805461ffff191660f09390931c929092179091556001600160a01b03821690636d61fe709085856000198101818110613df157613df1615e2b565b9050602002810190613e039190615ae1565b613e11916016908290615a3a565b604051602001613e2393929190615eae565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613e4e9190615782565b600060405180830381600087803b158015613e6857600080fd5b505af1158015613e7c573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416613f7c5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60008036600080613fb0612945565b60408051610120810182526000808252602082018190529181018290526080810182905260a0810191909152606060c082018190526001600160e01b03198d16908201526001600160a01b038b1660e082015261010081018a905290915061401a81838a8a614b06565b8787600081811061402d5761402d615e2b565b9091013560f81c60ff1490506140565760405163b32eeb6960e01b815260040160405180910390fd5b614063876001818b615a3a565b60608301516001600160e01b0319166000908152600394909401602052604093849020549390920151620100009093046001600160a01b03169c929b509950975095505050505050565b600060a082901c65ffffffffffff1682811560001981016140d25765ffffffffffff92505b508360d01c92509193909250565b6000366000806140ee612945565b905060003660006141008a8a8a614d73565b8654929550909350915060581b600061411d82600160f81b6107d7565b156141a9578554604051637aa8f17760e11b81526001600160a81b038216916001600160a01b03169063f551e2ee906141609030908a908a908a90600401615a92565b602060405180830381865afa15801561417d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a19190615ac4565b91505061425f565b6141b782600160f91b6107d7565b15612b6757855460601b60006141d08230898989613fa1565b60405163392dffaf60e01b8152929e5090985096509091506001600160a01b0382169063392dffaf90614219906001600160e01b031986169030908c908c908c90600401615b6e565b602060405180830381865afa158015614236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061425a9190615ac4565b925050505b630b135d3f60e11b6001600160e01b0319821614614290576040516362467c7760e11b815260040160405180910390fd5b50969a60948a0135909901603481019a506014013598975050505050505050565b600081830160601b8260601b81148460601b8214176001600160a01b03848618161517600181146142e55760019250614367565b6001600160d01b031980851690861681811881831102188686176001600160a01b031617935065ffffffffffff60a01b8616908161432a5765ffffffffffff60a01b91505b5065ffffffffffff60a01b851680614348575065ffffffffffff60a01b5b808218908211021880614361575065ffffffffffff60a01b5b92909217915b505092915050565b600080600061437c612945565b6001600160e01b03198816600090815260038201602052604081209192506001909101905b8154811015614593576000806143da8484815481106143c2576143c2615e2b565b60009182526020909120015460501b90605082901c90565b915091506000898960008181106143f3576143f3615e2b565b919091013560f81c915050838103614486576000614415600960018c8e615a3a565b61441e91615ef6565b60c01c90506144336009808301908c8e615a3a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008d015261447c8a60098301818e615a3a565b9a509a50506144c0565b838160ff1610156144aa57604051630760bdcf60e11b815260040160405180910390fd5b6040805160208101909152600081526101008c01525b600160f01b8316600003614588576000826001600160a01b0316637129edce8e6001600160e01b0319168e6040518363ffffffff1660e01b8152600401614508929190615f24565b6020604051808303816000875af1158015614527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061454b9190615daf565b9050806001600160a01b0381161561457957604051631f24c1fb60e11b815260048101879052602401610a13565b6145838a836142b1565b995050505b5050506001016143a1565b50858560008181106145a7576145a7615e2b565b9091013560f81c60ff1490506145d05760405163b32eeb6960e01b815260040160405180910390fd5b6145dd8560018189615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008c01949094525050506001600160e01b03198916815260039092016020525060409020546001600160a01b036201000090910416905094509492505050565b6000606060008060008661ffff166001600160401b0381111561467457614674615591565b6040519080825280601f01601f19166020018201604052801561469e576020820181803683370190505b5090506000808751602089018b8e8ef191503d9250868311156146bf578692505b828152826000602083013e90999098509650505050505050565b8135820160208101903560006146ed612945565b6001600160e01b0319871660009081526003919091016020526040902060018082015491925061471d9190615f3d565b821461473c5760405163013dcc8d60e31b815260040160405180910390fd5b6001810160005b81548110156147c95760006147638383815481106143c2576143c2615e2b565b9150506147bf818a6001600160e01b03191688888681811061478757614787615e2b565b90506020028101906147999190615ae1565b6040516020016147ab93929190615eae565b6040516020818303038152906040526134f3565b5050600101614743565b506147d2612945565b6001600160e01b031988166000908152600391909101602052604081206147fe91600190910190615112565b815461483a906201000090046001600160a01b03166001600160e01b03198916868661482b600182615f50565b81811061478757614787615e2b565b505080546001600160b01b03191690555050505050565b606081806001600160401b0381111561486c5761486c615591565b60405190808252806020026020018201604052801561489f57816020015b606081526020019060019003908161488a5790505b50915060005b8181101561436757368585838181106148c0576148c0615e2b565b90506020028101906148d29190615f63565b90506148fb6148e46020830183615399565b60208301356148f66040850185615ae1565b614a9f565b84838151811061490d5761490d615e2b565b6020908102919091010152506001016148a5565b606081806001600160401b0381111561493c5761493c615591565b60405190808252806020026020018201604052801561496f57816020015b606081526020019060019003908161495a5790505b50915060005b81811015614367573685858381811061499057614990615e2b565b90506020028101906149a29190615f63565b905060006149cd6149b66020840184615399565b60208401356149c86040860186615ae1565b614ad5565b8685815181106149df576149df615e2b565b6020908102919091010152905080614a44577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb783868581518110614a2557614a25615e2b565b6020026020010151604051614a3b929190615e64565b60405180910390a15b5050600101614975565b6000803681614a606014828789615a3a565b614a6991615b27565b60601c9350614a7c603460148789615a3a565b614a8591615f83565b9250614a948560348189615a3a565b949793965094505050565b60405181838237600038838387895af1614abc573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b60608401516001600160e01b03191660009081526003840160205260408120600101905b81548110156115e057614b488282815481106143c2576143c2615e2b565b6001600160a01b031660a08801526001600160f01b03191660808701528383600081614b7657614b76615e2b565b919091013560f81c8088528290039050614c1357614b98600960018587615a3a565b614ba191615ef6565b60c01c60208701819052614bbc906009908101908587615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701526020860151614c0a9084906009018187615a3a565b93509350614c7f565b855160ff16811115614c3857604051630760bdcf60e11b815260040160405180910390fd5b614c456000808587615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701525b6080860151600160f11b16600003614d6b5760a0860151606087015160e088015161010089015160c08a015160405163184dfdbb60e11b81526000956001600160a01b03169463309bfb7694614ce6946001600160e01b0319909216939092600401615fa1565b602060405180830381865afa158015614d03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d279190615daf565b9050806001600160a01b03811615614d5557604051631f24c1fb60e11b815260048101849052602401610a13565b614d638860400151836142b1565b604089015250505b600101614b2a565b60003660008036600036600036600080614d8e8e8e8e614dfd565b9750975097509750975097509750975060748d013560348e0101995060208a03359850614dbf8e8989898989613145565b614dc98383614fb2565b614deb8e614ddb600460008688615a3a565b614de491615a64565b600161507f565b99505050505050505093509350939050565b6040805180820190915260008082526020820152366000366000366000806000614e25612945565b9050614e35601460008c8e615a3a565b614e3e91615b27565b60601c89602001906001600160a01b031690816001600160a01b0316815250508060000160159054906101000a900463ffffffff16896000019063ffffffff16908163ffffffff168152505060148b013560348c010197506020880335965060348b013560348c010195506020860335945060548b013560348c0101935060208403359250614fa27fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c50560001b8d8360000160159054906101000a900463ffffffff168c602001518c8c604051614f15929190615fce565b60405180910390208b8b604051614f2d929190615fce565b60405180910390208a8a604051614f45929190615fce565b6040805191829003822060208301989098526001600160581b03199096169581019590955263ffffffff90931660608501526001600160a01b03909116608084015260a083015260c082015260e081019190915261010001612c29565b9150509397509397509397509397565b6000614fc16004828486615a3a565b614fca91615a64565b9050600482106133ab57602c821061503857602c838101358401604c8181019291820135918187013587019182019101356150278561500d601860048a8c615a3a565b61501691615b27565b60601c611a67602c60188b8d615a3a565b612746611a8b602c6018898b615a3a565b600482146133ab5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606401610a13565b6000615089612945565b6001600160581b03198516600081815260028301602090815260408083206001600160e01b0319891680855290835292819020805488151560ff1990911681179091558151938452918301939093528183015290519192507f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a919081900360600190a150505050565b50805460008255906000526020600020908101906151309190615133565b50565b5b808211156151485760008155600101615134565b5090565b6001600160a01b038116811461513057600080fd5b80356129408161514c565b60008083601f84011261517e57600080fd5b5081356001600160401b0381111561519557600080fd5b6020830191508360208285010111156151ad57600080fd5b9250929050565b600080600080606085870312156151ca57600080fd5b8435935060208501356151dc8161514c565b925060408501356001600160401b038111156151f757600080fd5b6152038782880161516c565b95989497509550505050565b80356001600160581b03198116811461294057600080fd5b6000806000806000806080878903121561524057600080fd5b6152498761520f565b955060208701356152598161514c565b945060408701356001600160401b038082111561527557600080fd5b6152818a838b0161516c565b9096509450606089013591508082111561529a57600080fd5b506152a789828a0161516c565b979a9699509497509295939492505050565b6000806000604084860312156152ce57600080fd5b8335925060208401356001600160401b038111156152eb57600080fd5b6152f78682870161516c565b9497909650939450505050565b6000610120828403121561531757600080fd5b50919050565b60008060006060848603121561533257600080fd5b83356001600160401b0381111561534857600080fd5b61535486828701615304565b9660208601359650604090950135949350505050565b803563ffffffff8116811461294057600080fd5b60006020828403121561539057600080fd5b610c738261536a565b6000602082840312156153ab57600080fd5b8135610c738161514c565b6001600160e01b03198116811461513057600080fd5b6000602082840312156153de57600080fd5b8135610c73816153b6565b600080604083850312156153fc57600080fd5b6154058361520f565b91506020830135615415816153b6565b809150509250929050565b60005b8381101561543b578181015183820152602001615423565b50506000910152565b6000815180845261545c816020860160208601615420565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e0602084015261549160e084018a615444565b83810360408501526154a3818a615444565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b818110156154f7578351835292840192918401916001016154db565b50909c9b505050505050505050505050565b6000806040838503121561551c57600080fd5b82356001600160401b0381111561553257600080fd5b61553e85828601615304565b95602094909401359450505050565b60008083601f84011261555f57600080fd5b5081356001600160401b0381111561557657600080fd5b6020830191508360208260051b85010111156151ad57600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156155c9576155c9615591565b60405290565b60405161012081016001600160401b03811182821017156155c9576155c9615591565b604051601f8201601f191681016001600160401b038111828210171561561a5761561a615591565b604052919050565b60008060008060008060006080888a03121561563d57600080fd5b6001600160401b03808935111561565357600080fd5b6156608a8a358b0161554d565b909850965060208901358181111561567757600080fd5b8901601f81018b1361568857600080fd5b80358281111561569a5761569a615591565b6156a960208260051b016155f2565b8082825260208201915060208360061b85010192508d8311156156cb57600080fd5b6020840193505b82841015615727576040848f0312156156ea57600080fd5b6156f26155a7565b6156fb8561536a565b8152602085013561570b8161514c565b80602083015250808352506020820191506040840193506156d2565b985050505060408901358181111561573e57600080fd5b61574a8b828c0161554d565b90965094505060608901358181111561576257600080fd5b61576e8b828c0161554d565b999c989b5096995094979396939450505050565b602081526000610c736020830184615444565b6000602082840312156157a757600080fd5b610c738261520f565b6000602082840312156157c257600080fd5b5035919050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561582057603f1988860301845261580e858351615444565b945092850192908501906001016157f2565b5092979650505050505050565b602080825282516001600160f01b03191682820152828101516001600160a01b031660408084019190915283015160608084015280516080840181905260009291820190839060a08601905b808310156158a657835169ffffffffffffffffffff19168252928401926001929092019190840190615879565b509695505050505050565b6000806000806000606086880312156158c957600080fd5b6158d28661520f565b945060208601356001600160401b03808211156158ee57600080fd5b6158fa89838a0161516c565b9096509450604088013591508082111561591357600080fd5b506159208882890161516c565b969995985093965092949392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612d3b9083018486615931565b60006001600160401b0382111561599857615998615591565b50601f01601f191660200190565b6000602082840312156159b857600080fd5b81516001600160401b038111156159ce57600080fd5b8201601f810184136159df57600080fd5b80516159f26159ed8261597f565b6155f2565b818152856020838501011115615a0757600080fd5b612d3b826020830160208601615420565b600060208284031215615a2a57600080fd5b81518015158114610c7357600080fd5b60008085851115615a4a57600080fd5b83861115615a5757600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156143675760049490940360031b84901b1690921692915050565b60018060a01b0385168152836020820152606060408201526000615aba606083018486615931565b9695505050505050565b600060208284031215615ad657600080fd5b8151610c73816153b6565b6000808335601e19843603018112615af857600080fd5b8301803591506001600160401b03821115615b1257600080fd5b6020019150368190038213156151ad57600080fd5b6bffffffffffffffffffffffff1981358181169160148510156143675760149490940360031b84901b1690921692915050565b6020815260006107cf602083018486615931565b85815260018060a01b0385166020820152836040820152608060608201526000615b9c608083018486615931565b979650505050505050565b600082601f830112615bb857600080fd5b8135615bc66159ed8261597f565b818152846020838601011115615bdb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215615c0b57600080fd5b615c136155cf565b615c1c83615161565b81526020830135602082015260408301356001600160401b0380821115615c4257600080fd5b615c4e36838701615ba7565b60408401526060850135915080821115615c6757600080fd5b615c7336838701615ba7565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e0850135915080821115615caa57600080fd5b615cb636838701615ba7565b60e084015261010091508185013581811115615cd157600080fd5b615cdd36828801615ba7565b8385015250505080915050919050565b80516001600160a01b031682526000610120602083015160208501526040830151816040860152615d2082860182615444565b91505060608301518482036060860152615d3a8282615444565b9150506080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152615d728282615444565b9150506101008084015185830382870152615aba8382615444565b604081526000615da06040830185615ced565b90508260208301529392505050565b600060208284031215615dc157600080fd5b5051919050565b838152606060208201526000615de16060830185615ced565b9050826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115615e2457615e24615df1565b5092915050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff808316818103615e5a57615e5a615df1565b6001019392505050565b8281526040602082015260006107cf6040830184615444565b69ffffffffffffffffffff1981358181169160168510156143675760169490940360031b84901b1690921692915050565b838152818360208301376000910160200190815292915050565b6001600160f01b031981358181169160028510156143675760029490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156143675760089490940360031b84901b1690921692915050565b8281526040602082015260006107cf6040830184615ced565b808201808211156107e8576107e8615df1565b818103818111156107e8576107e8615df1565b60008235605e19833603018112615f7957600080fd5b9190910192915050565b803560208310156107e857600019602084900360031b1b1692915050565b84815260018060a01b0384166020820152826040820152608060608201526000615aba6080830184615444565b8183823760009101908152919050560000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x2d", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x642f5b8c4b1293c815bce3dabdf8de29c4ce85dc612458b79621bc4bbf5fd919", + "transactionIndex": "0x0", + "blockHash": "0xd5cf29816629d8195d2d5bdfdef484be5e43da8d8a3e87b4066b15f36af4fb47", + "blockNumber": "0x55acac", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x524718", + "gasUsed": "0x524718", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xc5c9a23a" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712078215, + "chain": 11155111, + "commit": "ef4e38d" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/11155111/run-1712078252.json b/broadcast/Deploy.s.sol/11155111/run-1712078252.json new file mode 100644 index 00000000..5d9c2838 --- /dev/null +++ b/broadcast/Deploy.s.sol/11155111/run-1712078252.json @@ -0,0 +1,50 @@ +{ + "transactions": [ + { + "hash": "0x642f5b8c4b1293c815bce3dabdf8de29c4ce85dc612458b79621bc4bbf5fd919", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xFB642cE6CFFbC38270591dD6F3978deb27FA5B1E", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x784bc8", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006101406040523480156200001257600080fd5b506040516200623f3803806200623f833981016040819052620000359162000168565b306080524660a05260608062000085604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152808501939093528281019190915246606083015230608083015260a0909120610100526001600160a01b03851661012052805163deadbeef60e01b92810192909252805160048184030181526024909201905262000128925090506200019a565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b03191660589290921c91909117905550620001d2565b6000602082840312156200017b57600080fd5b81516001600160a01b03811681146200019357600080fd5b9392505050565b805160208201516001600160581b03198082169291906015831015620001ca5780818460150360031b1b83161693505b505050919050565b60805160a05160c05160e0516101005161012051615fde620002616000396000818161058d01528181610c8701528181610fbd01528181611197015281816114ec0152818161161f015281816117f301528181611ed20152818161257f015261276901526000613e8b01526000613f4501526000613f1f01526000613ecf01526000613eac0152615fde6000f3fe6080604052600436106101855760003560e01c80639517e29f116100d1578063d03c79141161008a578063e6f3d50a11610064578063e6f3d50a146106a7578063e9ae5c53146106ba578063f1f7f0f9146106cd578063f2dc691d146106fb576101c4565b8063d03c791414610639578063d691c9641461065a578063e0dfd3651461067a576101c4565b80639517e29f1461051c5780639cfd7cff1461052f578063a65d69d41461057b578063a71763a8146105c7578063adb610a3146105da578063b8afe17d146105ef576101c4565b806357b3a5f41161013e57806384b0196e1161011857806384b0196e146104975780638dd7712f146104bf57806390ef8862146104d25780639198bdf5146104fc576101c4565b806357b3a5f4146103e55780636e6fa0c61461043f578063721e67f41461045f576101c4565b8063112d3a7d1461031057806312af322c146103455780631626ba7e1461036557806319822f7c1461039e5780631f1b92e3146103bf5780633659cfe6146103d2576101c4565b366101c457604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b60006101db6000356001600160e01b03191661071b565b604080516060808201835283546001600160a01b039081168084526001909501549081166020840152600160a01b900460f81b6001600160f81b03191692820192909252925060009161024157604051631cd4b64760e21b815260040160405180910390fd5b82516060906001600160a01b031660011461026757835161026490600036610755565b90505b60408401516102779060006107d7565b156102935761028984602001516107ee565b90935091506102d8565b60408401516102aa906001600160f81b03196107d7565b156102bf57610289846020015160003661083e565b604051632d6a6bb760e01b815260040160405180910390fd5b83516001600160a01b03166001146102f85783516102f89082858561086d565b508161030657805160208201fd5b805160208201f35b005b34801561031c57600080fd5b5061033061032b3660046151b4565b6108e3565b60405190151581526020015b60405180910390f35b34801561035157600080fd5b5061030e610360366004615227565b6109b8565b34801561037157600080fd5b506103856103803660046152b9565b610ad8565b6040516001600160e01b0319909116815260200161033c565b6103b16103ac36600461531d565b610c7a565b60405190815260200161033c565b61030e6103cd36600461537e565b610f96565b61030e6103e0366004615399565b61117d565b3480156103f157600080fd5b506104056104003660046153cc565b611394565b6040805182516001600160a01b03908116825260208085015190911690820152918101516001600160f81b0319169082015260600161033c565b34801561044b57600080fd5b5061033061045a3660046153e9565b611400565b34801561046b57600080fd5b5061047f61047a366004615399565b611448565b60405190516001600160a01b0316815260200161033c565b3480156104a357600080fd5b506104ac61147e565b60405161033c9796959493929190615470565b61030e6104cd366004615509565b6114e1565b3480156104de57600080fd5b506104e76115e8565b60405163ffffffff909116815260200161033c565b34801561050857600080fd5b5061030e610517366004615622565b611605565b61030e61052a3660046151b4565b6117d9565b34801561053b57600080fd5b50604080518082018252601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152905161033c9190615782565b34801561058757600080fd5b506105af7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161033c565b61030e6105d53660046151b4565b611eb8565b3480156105e657600080fd5b506104e761234e565b3480156105fb57600080fd5b5061060f61060a366004615795565b61236b565b60408051825163ffffffff1681526020928301516001600160a01b0316928101929092520161033c565b34801561064557600080fd5b506103306106543660046157b0565b50600190565b61066d6106683660046152b9565b6123d4565b60405161033c91906157c9565b34801561068657600080fd5b5061069a610695366004615795565b612480565b60405161033c919061582d565b61030e6106b53660046158b1565b612565565b61030e6106c83660046152b9565b61274f565b3480156106d957600080fd5b506106e2612912565b6040516001600160581b0319909116815260200161033c565b34801561070757600080fd5b506103306107163660046157b0565b612925565b6001600160e01b03191660009081527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b6020526040902090565b604051631057c74d60e11b81526060906001600160a01b038516906320af8e9a906107889033908790879060040161595a565b6000604051808303816000875af11580156107a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107cf91908101906159a6565b949350505050565b6001600160f81b0319828116908216145b92915050565b6000606060408051368101909152366000823760408051601481019091523360601b9052600080366014018382885af192505060405190503d8152602081013d6000823e3d810160405250915091565b604051600090828482376000388483885af491503d8152602081013d6000823e3d810160405250935093915050565b604051630b9dfbed60e11b81526001600160a01b0385169063173bf7da90610899908690600401615782565b6020604051808303816000875af11580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc9190615a18565b5050505050565b6000846001036109415760006108f7612945565b600101600061090c8760581b600160f81b1790565b6001600160581b031916815260208101919091526040016000205464010000000090046001600160a01b0316141590506107cf565b8460020361096757600061095485612969565b546001600160a01b0316141590506107cf565b846003036109ad576001600160a01b03841661099861098a600460008688615a3a565b61099391615a64565b61071b565b600101546001600160a01b03161490506107cf565b506000949350505050565b60006109c2612945565b805490915060581b6001600160581b03191615610a1c5760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b6001600160581b03198716610a4457604051631a0a9b9f60e21b815260040160405180910390fd5b86610a5381600160f81b6129a2565b8015610a685750610a6881600160f91b6129a2565b15610a86576040516361c4e91b60e11b815260040160405180910390fd5b815460408051808201909152600181526001600160a01b03891660208201526001600160c81b031990911660588a901c17600160a81b178355610acd8982898989896129b5565b505050505050505050565b600080610ae3612945565b90506000366000610af48787612b80565b925092509250610b0b610b048490565b60006107d7565b15610b1857835460581b92505b6001600160581b03198316600090815260018501602052604090205464010000000090046001600160a01b0316610b6257604051631a0a9b9f60e21b815260040160405180910390fd5b610b7083600160f81b6107d7565b15610c0a576000610b818460581c90565b9050806001600160a01b031663f551e2ee33610b9c8c612bee565b86866040518563ffffffff1660e01b8152600401610bbd9493929190615a92565b602060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe9190615ac4565b95505050505050610c73565b6000610c168460081b90565b6001600160e01b03198116600090815260038701602052604090205490915060f01b600160f11b811615610c5d57604051635b71057960e01b815260040160405180910390fd5b610c6a82338c8787612c44565b96505050505050505b9392505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cc5576040516348f5c3ed60e01b815260040160405180910390fd5b6000610ccf612945565b90506000806000610ce38860200135612d44565b91945092509050610cf58260006107d7565b15610d015750825460581b5b610d0d83828a8a612d72565b6001600160581b031982166000908152600186016020908152604080832081518083019092525463ffffffff8116825264010000000090046001600160a01b031691810191909152919650610d639084906129a2565b8015610d8157508454815163ffffffff600160c81b90920482169116105b15610d9f57604051633ab3447f60e11b815260040160405180910390fd5b60208101516001600160a01b038116610dcb57604051631a0a9b9f60e21b815260040160405180910390fd5b600089815260208190526040902080546001600160a01b0319166001600160a01b03831690811790915560001901610e9357610e088460006129a2565b8015610e7057506001600160581b031983166000908152600287016020526040812090610e3860608d018d615ae1565b610e4791600491600091615a3a565b610e5091615a64565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610e8e57604051631a0a9b9f60e21b815260040160405180910390fd5b610f79565b610e9e8460006129a2565b8015610f0657506001600160581b031983166000908152600287016020526040812090610ece60608d018d615ae1565b610edd91600891600491615a3a565b610ee691615a64565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610f2457604051631a0a9b9f60e21b815260040160405180910390fd5b638dd7712f60e01b610f3960608c018c615ae1565b610f4891600491600091615a3a565b610f5191615a64565b6001600160e01b03191614610f795760405163dbbb044b60e01b815260040160405180910390fd5b8715610f8957343434348b335af1505b5050505050509392505050565b6000610fb0610fa3612945565b546001600160a81b031690565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590610feb5750333014155b156111705760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110589190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906110909033908590369060040161595a565b6000604051808303816000875af11580156110af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110d791908101906159a6565b90506110e283612f6e565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615782565b6020604051808303816000875af115801561112d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111519190615a18565b50505050565b6040516348f5c3ed60e01b815260040160405180910390fd5b61117982612f6e565b5050565b600061118a610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906111c55750333014155b156113385760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061126a9033908590369060040161595a565b6000604051808303816000875af1158015611289573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112b191908101906159a6565b9050827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55826001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615782565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8290556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60408051606081018252600080825260208201819052918101919091526113ba8261071b565b6040805160608101825282546001600160a01b0390811682526001909301549283166020820152600160a01b90920460f81b6001600160f81b0319169082015292915050565b600061140a612945565b6001600160581b031984166000908152600291909101602090815260408083206001600160e01b03198616845290915290205460ff16905092915050565b60408051602081019091526000815261146082612969565b604080516020810190915290546001600160a01b0316815292915050565b600f60f81b60608060008080836114cf604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b97989097965046955030945091925090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461152a576040516348f5c3ed60e01b815260040160405180910390fd5b6000818152602081905260409020546060906001600160a01b031660018114611574576115718161155e6060870187615ae1565b61156c916004908290615a3a565b610755565b91505b60008061159b306115886060890189615ae1565b611596916004908290615a3a565b61083e565b90925090506001600160a01b0383166001146115c2576115bd8385848461086d565b6115e0565b816115e05760405163f21e646b60e01b815260040160405180910390fd5b505050505050565b60006115f2612945565b54600160c81b900463ffffffff16919050565b6000611612610fa3612945565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061164d5750333014155b156117c05760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906116f29033908590369060040161595a565b6000604051808303816000875af1158015611711573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261173991908101906159a6565b905061174a89898989898989613050565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611776908490600401615782565b6020604051808303816000875af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190615a18565b50506117cf565b6117cf88888888888888613050565b5050505050505050565b60006117e6610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906118215750333014155b15611c3e5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561186a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188e9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906118c69033908590369060040161595a565b6000604051808303816000875af11580156118e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261190d91908101906159a6565b9050856001036119b0576000611921612945565b905060006119358760581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff168152909150600090602081016119676014848a8c615a3a565b61197091615b27565b60601c9052905060148781013588016034818101929182013591818b01358b019182019101356119a4868686868686613145565b50505050505050611bc8565b85600203611a17576014848101358501603481810192918201359181880135880191820191810135906000906119e890828a8c615a3a565b6119f191615b27565b60601c9050611a028a8686846131cf565b611a0d818484613260565b5050505050611bc8565b85600303611aa75760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c615a3a565b611a5891615a64565b8a611a67601860048c8e615a3a565b611a7091615b27565b60601c87876133b0565b611a9e611a8b601860048a8c615a3a565b611a9491615b27565b60601c8383613260565b50505050611bc8565b85600403611b0b576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b600060405180830381600087803b158015611af757600080fd5b505af1158015611a9e573d6000803e3d6000fd5b85600503611b41576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b85600603611b77576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615b5a565b85600703611baf5760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c615a3a565b604051631092ef5760e11b815260040160405180910390fd5b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611bf4908490600401615782565b6020604051808303816000875af1158015611c13573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c379190615a18565b50506108dc565b84600103611cdf576000611c50612945565b90506000611c648660581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff16815290915060009060208101611c96601484898b615a3a565b611c9f91615b27565b60601c9052905060148681013587016034818101929182013591818a01358a01918201910135611cd3868686868686613145565b505050505050506108dc565b84600203611d4657601483810135840160348181019291820135918187013587019182019181013590600090611d179082898b615a3a565b611d2091615b27565b60601c9050611d31898686846131cf565b611d3c818484613260565b50505050506108dc565b84600303611db05760188381013584016038818101929182013591818701358701918201910135611d96611d7e60046000898b615a3a565b611d8791615a64565b89611a67601860048b8d615a3a565b611da7611a8b60186004898b615a3a565b505050506108dc565b84600403611e14576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b600060405180830381600087803b158015611e0057600080fd5b505af1158015611da7573d6000803e3d6000fd5b84600503611e4a576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b84600603611e80576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611de69086908690600401615b5a565b84600703611baf5760188381013584016038818101929182013591818701358701918201910135611d96611d7e60046000898b615a3a565b6000611ec5610fa3612945565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611f005750333014155b156121a45760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611f49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6d9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611fa59033908590369060040161595a565b6000604051808303816000875af1158015611fc4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611fec91908101906159a6565b90506000198603612039576120378585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b505b8560010361207457600061204b612945565b9050600061205f8760581b600160f81b1790565b905061206c81878761359a565b505050611bc8565b8560020361208d576120878585856136f2565b50611bc8565b856003036120cc5760006120a46004828688615a3a565b6120ad91615a64565b90506120c5816120c0866004818a615a3a565b61375d565b5050611bc8565b85600403612114576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b8560050361215c576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b85600603611baf576120878585858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b60001985036121ef576121ed8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b505b8460010361222a576000612201612945565b905060006122158660581b600160f81b1790565b905061222281868661359a565b5050506108dc565b846002036122435761223d8484846136f2565b506108dc565b8460030361227657600061225a6004828587615a3a565b61226391615a64565b9050611c37816120c08560048189615a3a565b846004036122be5761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b846005036123065761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b84600603611baf5761223d8484848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b6000612358612945565b54600160a81b900463ffffffff16919050565b6040805180820190915260008082526020820152612387612945565b6001600160581b03199290921660009081526001909201602090815260409283902083518085019094525463ffffffff8116845264010000000090046001600160a01b0316908301525090565b606060006123e133612969565b546001600160a01b031690508061240b5760405163710c949760e01b815260040160405180910390fd5b60606001600160a01b03821660011461242d5761242a82600036610755565b90505b6124388686866137ee565b92506001600160a01b03821660011461247757612477828260018660405160200161246391906157c9565b60405160208183030381529060405261086d565b50509392505050565b60408051606080820183526000808352602083015291810191909152600882901b6124a9612945565b6001600160e01b03198216600090815260039190910160209081526040918290208251606081018452815460f081901b6001600160f01b03191682526201000090046001600160a01b0316818401526001820180548551818602810186018752818152929593949386019383018282801561255457602002820191906000526020600020905b815460501b69ffffffffffffffffffff1916815260019091019060200180831161252f575b505050505081525050915050919050565b6000612572610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906125ad5750333014155b1561272c5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156125f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061261a9190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906126529033908590369060040161595a565b6000604051808303816000875af1158015612671573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261269991908101906159a6565b905060006126a888888861359a565b90506126b5818686613a13565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906126e2908490600401615782565b6020604051808303816000875af1158015612701573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127259190615a18565b50506115e0565b600061273987878761359a565b9050612746818585613a13565b50505050505050565b600061275c610fa3612945565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906127975750333014155b156129075760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa1580156127e0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128049190615a18565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061283c9033908590369060040161595a565b6000604051808303816000875af115801561285b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261288391908101906159a6565b90506128908585856137ee565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906128bd908490600401615782565b6020604051808303816000875af11580156128dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129009190615a18565b5050611151565b6108dc8484846137ee565b600061291c612945565b5460581b919050565b6000600882101561293857506001919050565b506000919050565b919050565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f90565b6001600160a01b031660009081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b6001600160f81b03199081169116141590565b60006129bf612945565b60208701519091506001600160a01b03166129dc57600160208701525b85518154600160a81b900463ffffffff9081169116141580612a24575085516001600160581b03198816600090815260018301602052604090205463ffffffff918216911610155b15612a4257604051633ab3447f60e11b815260040160405180910390fd5b6001600160581b03198716600090815260018083016020908152604090922088518154938a01516001600160a01b031664010000000081026001600160c01b031990951663ffffffff9092169190911793909317905514612aac57612aac86602001518484613260565b86612abb81600160f81b6107d7565b15612b35576000612acc8960581c90565b6040516306d61fe760e41b81529091506001600160a01b03821690636d61fe7090612afd908a908a90600401615b5a565b600060405180830381600087803b158015612b1757600080fd5b505af1158015612b2b573d6000803e3d6000fd5b50505050506117cf565b612b4381600160f91b6107d7565b15612b67576000612b548960081b90565b9050612b61818888613aba565b506117cf565b6040516361c4e91b60e11b815260040160405180910390fd5b813536600060f883901c8015612ba65760018114612bbb5760028114612bcc5760206000fd5b60009350600186019250600186039150612be6565b601586019250601585039150612be6565b6001600160d81b0319841693506005860192506005850391505b509250925092565b604080517f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8360208201529081018290526000906107e8906060015b60405160208183030381529060405280519060200120613e89565b6000806000366000612c598a8a8a8a8a613fa1565b9350935093509350600080612c6d856140ad565b50915091508165ffffffffffff16421080612c8f57508065ffffffffffff1642115b15612cab57506001600160e01b03199550612d3b945050505050565b6001600160a01b03861663392dffaf6001600160e01b03198e168d612ccf8e612bee565b88886040518663ffffffff1660e01b8152600401612cf1959493929190615b6e565b602060405180830381865afa158015612d0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d329190615ac4565b96505050505050505b95945050505050565b80600881901b8060ff60f084901c166001198101612d6a576001600160d81b0319821691505b509193909250565b600080612d7d612945565b90506000612d8a85615bf8565b9050366000612d9d610100880188615ae1565b9092509050612db089600160f81b6107d7565b15612e0e57612dcc88612dc76101008a018a615ae1565b6140e0565b604080516020601f8401819004810282018101909252828152939850919450925083908390819084018382808284376000920191909152505050506101008401525b87612e1d81600160f81b6107d7565b15612eac57612ea586612e308b60581c90565b6001600160a01b03166397003203878b6040518363ffffffff1660e01b8152600401612e5d929190615d8d565b6020604051808303816000875af1158015612e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea09190615daf565b6142b1565b9550612f61565b6000612eb88a60081b90565b6001600160e01b03198116600090815260038801602052604090205490915060f01b600160f01b1615612efe576040516314b9743f60e01b815260040160405180910390fd5b600080612f0d8388888861436f565b91509150612f1b89836142b1565b9850612f5b89826001600160a01b0316630ccab7a1866001600160e01b0319168b8f6040518463ffffffff1660e01b8152600401612e5d93929190615dc8565b98505050505b5050505050949350505050565b6000612f78612945565b805490915063ffffffff80841691612f9a91600a91600160a81b900416615e07565b63ffffffff161015612fbf5760405163e60fd64760e01b815260040160405180910390fd5b805463ffffffff600160c81b909104811690831611612ff157604051633ab3447f60e11b815260040160405180910390fd5b805463ffffffff60c81b1916600160c81b63ffffffff8481168202929092178084559081048216600160a81b909104909116101561117957805463ffffffff60a81b198116600160c81b90910463ffffffff16600160a81b0217905550565b600061305a612945565b905060005b87811015613100576130f889898381811061307c5761307c615e2b565b90506020020160208101906130919190615795565b8883815181106130a3576130a3615e2b565b60200260200101518888858181106130bd576130bd615e2b565b90506020028101906130cf9190615ae1565b8888878181106130e1576130e1615e2b565b90506020028101906130f39190615ae1565b6129b5565b60010161305f565b508054600160a81b900463ffffffff1681601561311c83615e41565b91906101000a81548163ffffffff021916908363ffffffff160217905550505050505050505050565b600061314f612945565b80546001600160581b03198916600090815260018301602052604090205491925063ffffffff600160a81b90910481169116036131c1578054600160a81b900463ffffffff168160156131a183615e41565b91906101000a81548163ffffffff021916908363ffffffff160217905550505b6127468787878787876129b5565b6001600160a01b0381166131e1575060015b60006131ec85612969565b80546001600160a01b0319166001600160a01b038481169190911782556040516306d61fe760e41b8152919250861690636d61fe70906132329087908790600401615b5a565b600060405180830381600087803b15801561324c57600080fd5b505af1158015610acd573d6000803e3d6000fd5b6001600160a01b038316158061327f57506001600160a01b0383166001145b1561328957505050565b60405163d60b347f60e01b81523060048201526001600160a01b0384169063d60b347f90602401602060405180830381865afa1580156132cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132f19190615a18565b61335c576001600160a01b038316636d61fe706133118360018187615a3a565b6040518363ffffffff1660e01b815260040161332e929190615b5a565b600060405180830381600087803b15801561334857600080fd5b505af1158015612746573d6000803e3d6000fd5b6001600160f81b0319828260008161337657613376615e2b565b9050013560f81c60f81b6001600160f81b031916036133ab576001600160a01b038316636d61fe706133118360018187615a3a565b505050565b6001600160a01b0383166133c357600192505b60006133ce8661071b565b90506000838360008181106133e5576133e5615e2b565b9050013560f81c60f81b90506133ff81600060f81b6107d7565b15613474576001600160a01b038616636d61fe706134208560018189615a3a565b6040518363ffffffff1660e01b815260040161343d929190615b5a565b600060405180830381600087803b15801561345757600080fd5b505af115801561346b573d6000803e3d6000fd5b505050506134a4565b613486816001600160f81b03196129a2565b156134a457604051632d6a6bb760e01b815260040160405180910390fd5b81546001600160a01b039586166001600160a01b03199091161782556001909101805460f89290921c600160a01b026001600160a81b0319909216959094169490941793909317909155505050565b600061354d835a600080638a91b0e360e01b876040516024016135169190615782565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261464f565b50604080516001600160a01b038616815282151560208201529192507f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3910160405180910390a192915050565b6000806135a5612945565b805490915060581b6001600160581b0319908116908616036136155760405162461bcd60e51b8152602060048201526024808201527f526f6f742076616c696461746f722063616e6e6f7420626520756e696e7374616044820152631b1b195960e21b6064820152608401610a13565b6001600160581b03198516600090815260018201602052604090208054640100000000600160c01b0319811690915564010000000090046001600160a01b031691508461366681600160f81b6107d7565b156136c05760006136778760581c90565b90506136b98187878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b5050612477565b6136ce81600160f91b6107d7565b15612b675760006136df8760081b90565b90506136ec8187876146d9565b50612477565b6000806136fe85612969565b80546001600160a01b031981168255604080516020601f88018190048102820181019092528681526001600160a01b0390921694509192506124779187919087908790819084018382808284376000920191909152506134f392505050565b6000806137698561071b565b80546001600160a01b0319811682556001820154604080516020601f89018190048102820181019092528781526001600160a01b0393841696509394506137cf93919092169187908790819084018382808284376000920191909152506134f392505050565b5060010180546001600160a81b03191660ff60a01b1790559392505050565b606083600881901b61380482600160f81b6107d7565b15613887578435850160208101903561381e8360006107d7565b156138345761382d8282614851565b94506136b9565b61384283600160f81b6107d7565b156138515761382d8282614921565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610a13565b6138928260006107d7565b156139c0576000803660006138a78989614a4e565b6040805160018082528183019092529498509296509094509250816020015b60608152602001906001900390816138c657905050965060006138e986826107d7565b1561391d576138fa85858585614a9f565b8860008151811061390d5761390d615e2b565b60200260200101819052506139b6565b61392b86600160f81b6107d7565b156138515761393c85858585614ad5565b8960008151811061394f5761394f615e2b565b60209081029190910101529050806139b6577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb760008960008151811061399757613997615e2b565b60200260200101516040516139ad929190615e64565b60405180910390a15b5050505050612477565b6139d2826001600160f81b03196107d7565b156138515760006139e66014828789615a3a565b6139ef91615b27565b60601c9050366000613a04876014818b615a3a565b915091506139b683838361083e565b6001600160a01b0383161580613a3257506001600160a01b0383166001145b15613a3c57505050565b6001600160f81b03198282600081613a5657613a56615e2b565b9050013560f81c60f81b6001600160f81b031916036133ab5761115183613a808360018187615a3a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506134f392505050565b6000613ac4612945565b90508235830160208101903560fe811180613add575080155b15613afb5760405163b62d956d60e01b815260040160405180910390fd5b6001600160e01b03198616600090815260038401602052604090206001015415613b49576001600160e01b0319861660009081526003840160205260408120613b4991600190910190615112565b60005b6000198201811015613cdb576001600160e01b0319871660009081526003850160205260409020600101838383818110613b8857613b88615e2b565b9050602002810190613b9a9190615ae1565b613ba991601691600091615a3a565b613bb291615e7d565b81546001810183556000928352602090922090910180546001600160b01b03191660509290921c919091179055828282818110613bf157613bf1615e2b565b9050602002810190613c039190615ae1565b613c1291601691600291615a3a565b613c1b91615b27565b60601c636d61fe706001600160e01b03198916858585818110613c4057613c40615e2b565b9050602002810190613c529190615ae1565b613c60916016908290615a3a565b604051602001613c7293929190615eae565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613c9d9190615782565b600060405180830381600087803b158015613cb757600080fd5b505af1158015613ccb573d6000803e3d6000fd5b505060019092019150613b4c9050565b50600082826000198101818110613cf457613cf4615e2b565b9050602002810190613d069190615ae1565b613d1591601691600291615a3a565b613d1e91615b27565b6001600160e01b031988166000908152600386016020526040902080546201000060609390931c92830262010000600160b01b0319909116179055905082826000198101818110613d7157613d71615e2b565b9050602002810190613d839190615ae1565b613d9291600291600091615a3a565b613d9b91615ec8565b6001600160e01b0319881660008181526003870160205260409020805461ffff191660f09390931c929092179091556001600160a01b03821690636d61fe709085856000198101818110613df157613df1615e2b565b9050602002810190613e039190615ae1565b613e11916016908290615a3a565b604051602001613e2393929190615eae565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613e4e9190615782565b600060405180830381600087803b158015613e6857600080fd5b505af1158015613e7c573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416613f7c5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60008036600080613fb0612945565b60408051610120810182526000808252602082018190529181018290526080810182905260a0810191909152606060c082018190526001600160e01b03198d16908201526001600160a01b038b1660e082015261010081018a905290915061401a81838a8a614b06565b8787600081811061402d5761402d615e2b565b9091013560f81c60ff1490506140565760405163b32eeb6960e01b815260040160405180910390fd5b614063876001818b615a3a565b60608301516001600160e01b0319166000908152600394909401602052604093849020549390920151620100009093046001600160a01b03169c929b509950975095505050505050565b600060a082901c65ffffffffffff1682811560001981016140d25765ffffffffffff92505b508360d01c92509193909250565b6000366000806140ee612945565b905060003660006141008a8a8a614d73565b8654929550909350915060581b600061411d82600160f81b6107d7565b156141a9578554604051637aa8f17760e11b81526001600160a81b038216916001600160a01b03169063f551e2ee906141609030908a908a908a90600401615a92565b602060405180830381865afa15801561417d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141a19190615ac4565b91505061425f565b6141b782600160f91b6107d7565b15612b6757855460601b60006141d08230898989613fa1565b60405163392dffaf60e01b8152929e5090985096509091506001600160a01b0382169063392dffaf90614219906001600160e01b031986169030908c908c908c90600401615b6e565b602060405180830381865afa158015614236573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061425a9190615ac4565b925050505b630b135d3f60e11b6001600160e01b0319821614614290576040516362467c7760e11b815260040160405180910390fd5b50969a60948a0135909901603481019a506014013598975050505050505050565b600081830160601b8260601b81148460601b8214176001600160a01b03848618161517600181146142e55760019250614367565b6001600160d01b031980851690861681811881831102188686176001600160a01b031617935065ffffffffffff60a01b8616908161432a5765ffffffffffff60a01b91505b5065ffffffffffff60a01b851680614348575065ffffffffffff60a01b5b808218908211021880614361575065ffffffffffff60a01b5b92909217915b505092915050565b600080600061437c612945565b6001600160e01b03198816600090815260038201602052604081209192506001909101905b8154811015614593576000806143da8484815481106143c2576143c2615e2b565b60009182526020909120015460501b90605082901c90565b915091506000898960008181106143f3576143f3615e2b565b919091013560f81c915050838103614486576000614415600960018c8e615a3a565b61441e91615ef6565b60c01c90506144336009808301908c8e615a3a565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008d015261447c8a60098301818e615a3a565b9a509a50506144c0565b838160ff1610156144aa57604051630760bdcf60e11b815260040160405180910390fd5b6040805160208101909152600081526101008c01525b600160f01b8316600003614588576000826001600160a01b0316637129edce8e6001600160e01b0319168e6040518363ffffffff1660e01b8152600401614508929190615f24565b6020604051808303816000875af1158015614527573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061454b9190615daf565b9050806001600160a01b0381161561457957604051631f24c1fb60e11b815260048101879052602401610a13565b6145838a836142b1565b995050505b5050506001016143a1565b50858560008181106145a7576145a7615e2b565b9091013560f81c60ff1490506145d05760405163b32eeb6960e01b815260040160405180910390fd5b6145dd8560018189615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008c01949094525050506001600160e01b03198916815260039092016020525060409020546001600160a01b036201000090910416905094509492505050565b6000606060008060008661ffff166001600160401b0381111561467457614674615591565b6040519080825280601f01601f19166020018201604052801561469e576020820181803683370190505b5090506000808751602089018b8e8ef191503d9250868311156146bf578692505b828152826000602083013e90999098509650505050505050565b8135820160208101903560006146ed612945565b6001600160e01b0319871660009081526003919091016020526040902060018082015491925061471d9190615f3d565b821461473c5760405163013dcc8d60e31b815260040160405180910390fd5b6001810160005b81548110156147c95760006147638383815481106143c2576143c2615e2b565b9150506147bf818a6001600160e01b03191688888681811061478757614787615e2b565b90506020028101906147999190615ae1565b6040516020016147ab93929190615eae565b6040516020818303038152906040526134f3565b5050600101614743565b506147d2612945565b6001600160e01b031988166000908152600391909101602052604081206147fe91600190910190615112565b815461483a906201000090046001600160a01b03166001600160e01b03198916868661482b600182615f50565b81811061478757614787615e2b565b505080546001600160b01b03191690555050505050565b606081806001600160401b0381111561486c5761486c615591565b60405190808252806020026020018201604052801561489f57816020015b606081526020019060019003908161488a5790505b50915060005b8181101561436757368585838181106148c0576148c0615e2b565b90506020028101906148d29190615f63565b90506148fb6148e46020830183615399565b60208301356148f66040850185615ae1565b614a9f565b84838151811061490d5761490d615e2b565b6020908102919091010152506001016148a5565b606081806001600160401b0381111561493c5761493c615591565b60405190808252806020026020018201604052801561496f57816020015b606081526020019060019003908161495a5790505b50915060005b81811015614367573685858381811061499057614990615e2b565b90506020028101906149a29190615f63565b905060006149cd6149b66020840184615399565b60208401356149c86040860186615ae1565b614ad5565b8685815181106149df576149df615e2b565b6020908102919091010152905080614a44577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb783868581518110614a2557614a25615e2b565b6020026020010151604051614a3b929190615e64565b60405180910390a15b5050600101614975565b6000803681614a606014828789615a3a565b614a6991615b27565b60601c9350614a7c603460148789615a3a565b614a8591615f83565b9250614a948560348189615a3a565b949793965094505050565b60405181838237600038838387895af1614abc573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b60608401516001600160e01b03191660009081526003840160205260408120600101905b81548110156115e057614b488282815481106143c2576143c2615e2b565b6001600160a01b031660a08801526001600160f01b03191660808701528383600081614b7657614b76615e2b565b919091013560f81c8088528290039050614c1357614b98600960018587615a3a565b614ba191615ef6565b60c01c60208701819052614bbc906009908101908587615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701526020860151614c0a9084906009018187615a3a565b93509350614c7f565b855160ff16811115614c3857604051630760bdcf60e11b815260040160405180910390fd5b614c456000808587615a3a565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701525b6080860151600160f11b16600003614d6b5760a0860151606087015160e088015161010089015160c08a015160405163184dfdbb60e11b81526000956001600160a01b03169463309bfb7694614ce6946001600160e01b0319909216939092600401615fa1565b602060405180830381865afa158015614d03573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614d279190615daf565b9050806001600160a01b03811615614d5557604051631f24c1fb60e11b815260048101849052602401610a13565b614d638860400151836142b1565b604089015250505b600101614b2a565b60003660008036600036600036600080614d8e8e8e8e614dfd565b9750975097509750975097509750975060748d013560348e0101995060208a03359850614dbf8e8989898989613145565b614dc98383614fb2565b614deb8e614ddb600460008688615a3a565b614de491615a64565b600161507f565b99505050505050505093509350939050565b6040805180820190915260008082526020820152366000366000366000806000614e25612945565b9050614e35601460008c8e615a3a565b614e3e91615b27565b60601c89602001906001600160a01b031690816001600160a01b0316815250508060000160159054906101000a900463ffffffff16896000019063ffffffff16908163ffffffff168152505060148b013560348c010197506020880335965060348b013560348c010195506020860335945060548b013560348c0101935060208403359250614fa27fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c50560001b8d8360000160159054906101000a900463ffffffff168c602001518c8c604051614f15929190615fce565b60405180910390208b8b604051614f2d929190615fce565b60405180910390208a8a604051614f45929190615fce565b6040805191829003822060208301989098526001600160581b03199096169581019590955263ffffffff90931660608501526001600160a01b03909116608084015260a083015260c082015260e081019190915261010001612c29565b9150509397509397509397509397565b6000614fc16004828486615a3a565b614fca91615a64565b9050600482106133ab57602c821061503857602c838101358401604c8181019291820135918187013587019182019101356150278561500d601860048a8c615a3a565b61501691615b27565b60601c611a67602c60188b8d615a3a565b612746611a8b602c6018898b615a3a565b600482146133ab5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606401610a13565b6000615089612945565b6001600160581b03198516600081815260028301602090815260408083206001600160e01b0319891680855290835292819020805488151560ff1990911681179091558151938452918301939093528183015290519192507f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a919081900360600190a150505050565b50805460008255906000526020600020908101906151309190615133565b50565b5b808211156151485760008155600101615134565b5090565b6001600160a01b038116811461513057600080fd5b80356129408161514c565b60008083601f84011261517e57600080fd5b5081356001600160401b0381111561519557600080fd5b6020830191508360208285010111156151ad57600080fd5b9250929050565b600080600080606085870312156151ca57600080fd5b8435935060208501356151dc8161514c565b925060408501356001600160401b038111156151f757600080fd5b6152038782880161516c565b95989497509550505050565b80356001600160581b03198116811461294057600080fd5b6000806000806000806080878903121561524057600080fd5b6152498761520f565b955060208701356152598161514c565b945060408701356001600160401b038082111561527557600080fd5b6152818a838b0161516c565b9096509450606089013591508082111561529a57600080fd5b506152a789828a0161516c565b979a9699509497509295939492505050565b6000806000604084860312156152ce57600080fd5b8335925060208401356001600160401b038111156152eb57600080fd5b6152f78682870161516c565b9497909650939450505050565b6000610120828403121561531757600080fd5b50919050565b60008060006060848603121561533257600080fd5b83356001600160401b0381111561534857600080fd5b61535486828701615304565b9660208601359650604090950135949350505050565b803563ffffffff8116811461294057600080fd5b60006020828403121561539057600080fd5b610c738261536a565b6000602082840312156153ab57600080fd5b8135610c738161514c565b6001600160e01b03198116811461513057600080fd5b6000602082840312156153de57600080fd5b8135610c73816153b6565b600080604083850312156153fc57600080fd5b6154058361520f565b91506020830135615415816153b6565b809150509250929050565b60005b8381101561543b578181015183820152602001615423565b50506000910152565b6000815180845261545c816020860160208601615420565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e0602084015261549160e084018a615444565b83810360408501526154a3818a615444565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b818110156154f7578351835292840192918401916001016154db565b50909c9b505050505050505050505050565b6000806040838503121561551c57600080fd5b82356001600160401b0381111561553257600080fd5b61553e85828601615304565b95602094909401359450505050565b60008083601f84011261555f57600080fd5b5081356001600160401b0381111561557657600080fd5b6020830191508360208260051b85010111156151ad57600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156155c9576155c9615591565b60405290565b60405161012081016001600160401b03811182821017156155c9576155c9615591565b604051601f8201601f191681016001600160401b038111828210171561561a5761561a615591565b604052919050565b60008060008060008060006080888a03121561563d57600080fd5b6001600160401b03808935111561565357600080fd5b6156608a8a358b0161554d565b909850965060208901358181111561567757600080fd5b8901601f81018b1361568857600080fd5b80358281111561569a5761569a615591565b6156a960208260051b016155f2565b8082825260208201915060208360061b85010192508d8311156156cb57600080fd5b6020840193505b82841015615727576040848f0312156156ea57600080fd5b6156f26155a7565b6156fb8561536a565b8152602085013561570b8161514c565b80602083015250808352506020820191506040840193506156d2565b985050505060408901358181111561573e57600080fd5b61574a8b828c0161554d565b90965094505060608901358181111561576257600080fd5b61576e8b828c0161554d565b999c989b5096995094979396939450505050565b602081526000610c736020830184615444565b6000602082840312156157a757600080fd5b610c738261520f565b6000602082840312156157c257600080fd5b5035919050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561582057603f1988860301845261580e858351615444565b945092850192908501906001016157f2565b5092979650505050505050565b602080825282516001600160f01b03191682820152828101516001600160a01b031660408084019190915283015160608084015280516080840181905260009291820190839060a08601905b808310156158a657835169ffffffffffffffffffff19168252928401926001929092019190840190615879565b509695505050505050565b6000806000806000606086880312156158c957600080fd5b6158d28661520f565b945060208601356001600160401b03808211156158ee57600080fd5b6158fa89838a0161516c565b9096509450604088013591508082111561591357600080fd5b506159208882890161516c565b969995985093965092949392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612d3b9083018486615931565b60006001600160401b0382111561599857615998615591565b50601f01601f191660200190565b6000602082840312156159b857600080fd5b81516001600160401b038111156159ce57600080fd5b8201601f810184136159df57600080fd5b80516159f26159ed8261597f565b6155f2565b818152856020838501011115615a0757600080fd5b612d3b826020830160208601615420565b600060208284031215615a2a57600080fd5b81518015158114610c7357600080fd5b60008085851115615a4a57600080fd5b83861115615a5757600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156143675760049490940360031b84901b1690921692915050565b60018060a01b0385168152836020820152606060408201526000615aba606083018486615931565b9695505050505050565b600060208284031215615ad657600080fd5b8151610c73816153b6565b6000808335601e19843603018112615af857600080fd5b8301803591506001600160401b03821115615b1257600080fd5b6020019150368190038213156151ad57600080fd5b6bffffffffffffffffffffffff1981358181169160148510156143675760149490940360031b84901b1690921692915050565b6020815260006107cf602083018486615931565b85815260018060a01b0385166020820152836040820152608060608201526000615b9c608083018486615931565b979650505050505050565b600082601f830112615bb857600080fd5b8135615bc66159ed8261597f565b818152846020838601011115615bdb57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215615c0b57600080fd5b615c136155cf565b615c1c83615161565b81526020830135602082015260408301356001600160401b0380821115615c4257600080fd5b615c4e36838701615ba7565b60408401526060850135915080821115615c6757600080fd5b615c7336838701615ba7565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e0850135915080821115615caa57600080fd5b615cb636838701615ba7565b60e084015261010091508185013581811115615cd157600080fd5b615cdd36828801615ba7565b8385015250505080915050919050565b80516001600160a01b031682526000610120602083015160208501526040830151816040860152615d2082860182615444565b91505060608301518482036060860152615d3a8282615444565b9150506080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152615d728282615444565b9150506101008084015185830382870152615aba8382615444565b604081526000615da06040830185615ced565b90508260208301529392505050565b600060208284031215615dc157600080fd5b5051919050565b838152606060208201526000615de16060830185615ced565b9050826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115615e2457615e24615df1565b5092915050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff808316818103615e5a57615e5a615df1565b6001019392505050565b8281526040602082015260006107cf6040830184615444565b69ffffffffffffffffffff1981358181169160168510156143675760169490940360031b84901b1690921692915050565b838152818360208301376000910160200190815292915050565b6001600160f01b031981358181169160028510156143675760029490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156143675760089490940360031b84901b1690921692915050565b8281526040602082015260006107cf6040830184615ced565b808201808211156107e8576107e8615df1565b818103818111156107e8576107e8615df1565b60008235605e19833603018112615f7957600080fd5b9190910192915050565b803560208310156107e857600019602084900360031b1b1692915050565b84815260018060a01b0384166020820152826040820152608060608201526000615aba6080830184615444565b8183823760009101908152919050560000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x2d", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x642f5b8c4b1293c815bce3dabdf8de29c4ce85dc612458b79621bc4bbf5fd919", + "transactionIndex": "0x0", + "blockHash": "0xd5cf29816629d8195d2d5bdfdef484be5e43da8d8a3e87b4066b15f36af4fb47", + "blockNumber": "0x55acac", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x524718", + "gasUsed": "0x524718", + "contractAddress": "0xFB642cE6CFFbC38270591dD6F3978deb27FA5B1E", + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xc5c9a23a" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712078252, + "chain": 11155111, + "commit": "ef4e38d" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/11155111/run-1712078612.json b/broadcast/Deploy.s.sol/11155111/run-1712078612.json new file mode 100644 index 00000000..528692b7 --- /dev/null +++ b/broadcast/Deploy.s.sol/11155111/run-1712078612.json @@ -0,0 +1,50 @@ +{ + "transactions": [ + { + "hash": "0x1aae5c0d5e0619aa7ae9098b4ce220d5de82096a8be0dbfef3908d64a56bacc2", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x541E811D24A54745619a5B9f0c1d4B08D5740144", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x77c193", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006101406040523480156200001257600080fd5b50604051620061cf380380620061cf833981016040819052620000359162000168565b306080524660a05260608062000085604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152808501939093528281019190915246606083015230608083015260a0909120610100526001600160a01b03851661012052805163deadbeef60e01b92810192909252805160048184030181526024909201905262000128925090506200019a565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b03191660589290921c91909117905550620001d2565b6000602082840312156200017b57600080fd5b81516001600160a01b03811681146200019357600080fd5b9392505050565b805160208201516001600160581b03198082169291906015831015620001ca5780818460150360031b1b83161693505b505050919050565b60805160a05160c05160e0516101005161012051615f6e620002616000396000818161058d01528181610c8701528181610fbd01528181611197015281816114ec0152818161161f015281816117f301528181611e620152818161250f01526126f901526000613e1b01526000613ed501526000613eaf01526000613e5f01526000613e3c0152615f6e6000f3fe6080604052600436106101855760003560e01c80639517e29f116100d1578063d03c79141161008a578063e6f3d50a11610064578063e6f3d50a146106a7578063e9ae5c53146106ba578063f1f7f0f9146106cd578063f2dc691d146106fb576101c4565b8063d03c791414610639578063d691c9641461065a578063e0dfd3651461067a576101c4565b80639517e29f1461051c5780639cfd7cff1461052f578063a65d69d41461057b578063a71763a8146105c7578063adb610a3146105da578063b8afe17d146105ef576101c4565b806357b3a5f41161013e57806384b0196e1161011857806384b0196e146104975780638dd7712f146104bf57806390ef8862146104d25780639198bdf5146104fc576101c4565b806357b3a5f4146103e55780636e6fa0c61461043f578063721e67f41461045f576101c4565b8063112d3a7d1461031057806312af322c146103455780631626ba7e1461036557806319822f7c1461039e5780631f1b92e3146103bf5780633659cfe6146103d2576101c4565b366101c457604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b60006101db6000356001600160e01b03191661071b565b604080516060808201835283546001600160a01b039081168084526001909501549081166020840152600160a01b900460f81b6001600160f81b03191692820192909252925060009161024157604051631cd4b64760e21b815260040160405180910390fd5b82516060906001600160a01b031660011461026757835161026490600036610755565b90505b60408401516102779060006107d7565b156102935761028984602001516107ee565b90935091506102d8565b60408401516102aa906001600160f81b03196107d7565b156102bf57610289846020015160003661083e565b604051632d6a6bb760e01b815260040160405180910390fd5b83516001600160a01b03166001146102f85783516102f89082858561086d565b508161030657805160208201fd5b805160208201f35b005b34801561031c57600080fd5b5061033061032b366004615144565b6108e3565b60405190151581526020015b60405180910390f35b34801561035157600080fd5b5061030e6103603660046151b7565b6109b8565b34801561037157600080fd5b50610385610380366004615249565b610ad8565b6040516001600160e01b0319909116815260200161033c565b6103b16103ac3660046152ad565b610c7a565b60405190815260200161033c565b61030e6103cd36600461530e565b610f96565b61030e6103e0366004615329565b61117d565b3480156103f157600080fd5b5061040561040036600461535c565b611394565b6040805182516001600160a01b03908116825260208085015190911690820152918101516001600160f81b0319169082015260600161033c565b34801561044b57600080fd5b5061033061045a366004615379565b611400565b34801561046b57600080fd5b5061047f61047a366004615329565b611448565b60405190516001600160a01b0316815260200161033c565b3480156104a357600080fd5b506104ac61147e565b60405161033c9796959493929190615400565b61030e6104cd366004615499565b6114e1565b3480156104de57600080fd5b506104e76115e8565b60405163ffffffff909116815260200161033c565b34801561050857600080fd5b5061030e6105173660046155b2565b611605565b61030e61052a366004615144565b6117d9565b34801561053b57600080fd5b50604080518082018252601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152905161033c9190615712565b34801561058757600080fd5b506105af7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161033c565b61030e6105d5366004615144565b611e48565b3480156105e657600080fd5b506104e76122de565b3480156105fb57600080fd5b5061060f61060a366004615725565b6122fb565b60408051825163ffffffff1681526020928301516001600160a01b0316928101929092520161033c565b34801561064557600080fd5b50610330610654366004615740565b50600190565b61066d610668366004615249565b612364565b60405161033c9190615759565b34801561068657600080fd5b5061069a610695366004615725565b612410565b60405161033c91906157bd565b61030e6106b5366004615841565b6124f5565b61030e6106c8366004615249565b6126df565b3480156106d957600080fd5b506106e26128a2565b6040516001600160581b0319909116815260200161033c565b34801561070757600080fd5b50610330610716366004615740565b6128b5565b6001600160e01b03191660009081527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b6020526040902090565b604051631057c74d60e11b81526060906001600160a01b038516906320af8e9a90610788903390879087906004016158ea565b6000604051808303816000875af11580156107a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107cf9190810190615936565b949350505050565b6001600160f81b0319828116908216145b92915050565b6000606060408051368101909152366000823760408051601481019091523360601b9052600080366014018382885af192505060405190503d8152602081013d6000823e3d810160405250915091565b604051600090828482376000388483885af491503d8152602081013d6000823e3d810160405250935093915050565b604051630b9dfbed60e11b81526001600160a01b0385169063173bf7da90610899908690600401615712565b6020604051808303816000875af11580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc91906159a8565b5050505050565b6000846001036109415760006108f76128d5565b600101600061090c8760581b600160f81b1790565b6001600160581b031916815260208101919091526040016000205464010000000090046001600160a01b0316141590506107cf565b84600203610967576000610954856128f9565b546001600160a01b0316141590506107cf565b846003036109ad576001600160a01b03841661099861098a6004600086886159ca565b610993916159f4565b61071b565b600101546001600160a01b03161490506107cf565b506000949350505050565b60006109c26128d5565b805490915060581b6001600160581b03191615610a1c5760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b6001600160581b03198716610a4457604051631a0a9b9f60e21b815260040160405180910390fd5b86610a5381600160f81b612932565b8015610a685750610a6881600160f91b612932565b15610a86576040516361c4e91b60e11b815260040160405180910390fd5b815460408051808201909152600181526001600160a01b03891660208201526001600160c81b031990911660588a901c17600160a81b178355610acd898289898989612945565b505050505050505050565b600080610ae36128d5565b90506000366000610af48787612b10565b925092509250610b0b610b048490565b60006107d7565b15610b1857835460581b92505b6001600160581b03198316600090815260018501602052604090205464010000000090046001600160a01b0316610b6257604051631a0a9b9f60e21b815260040160405180910390fd5b610b7083600160f81b6107d7565b15610c0a576000610b818460581c90565b9050806001600160a01b031663f551e2ee33610b9c8c612b7e565b86866040518563ffffffff1660e01b8152600401610bbd9493929190615a22565b602060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe9190615a54565b95505050505050610c73565b6000610c168460081b90565b6001600160e01b03198116600090815260038701602052604090205490915060f01b600160f11b811615610c5d57604051635b71057960e01b815260040160405180910390fd5b610c6a82338c8787612bd4565b96505050505050505b9392505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cc5576040516348f5c3ed60e01b815260040160405180910390fd5b6000610ccf6128d5565b90506000806000610ce38860200135612cd4565b91945092509050610cf58260006107d7565b15610d015750825460581b5b610d0d83828a8a612d02565b6001600160581b031982166000908152600186016020908152604080832081518083019092525463ffffffff8116825264010000000090046001600160a01b031691810191909152919650610d63908490612932565b8015610d8157508454815163ffffffff600160c81b90920482169116105b15610d9f57604051633ab3447f60e11b815260040160405180910390fd5b60208101516001600160a01b038116610dcb57604051631a0a9b9f60e21b815260040160405180910390fd5b600089815260208190526040902080546001600160a01b0319166001600160a01b03831690811790915560001901610e9357610e08846000612932565b8015610e7057506001600160581b031983166000908152600287016020526040812090610e3860608d018d615a71565b610e47916004916000916159ca565b610e50916159f4565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610e8e57604051631a0a9b9f60e21b815260040160405180910390fd5b610f79565b610e9e846000612932565b8015610f0657506001600160581b031983166000908152600287016020526040812090610ece60608d018d615a71565b610edd916008916004916159ca565b610ee6916159f4565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610f2457604051631a0a9b9f60e21b815260040160405180910390fd5b638dd7712f60e01b610f3960608c018c615a71565b610f48916004916000916159ca565b610f51916159f4565b6001600160e01b03191614610f795760405163dbbb044b60e01b815260040160405180910390fd5b8715610f8957343434348b335af1505b5050505050509392505050565b6000610fb0610fa36128d5565b546001600160a81b031690565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590610feb5750333014155b156111705760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061105891906159a8565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611090903390859036906004016158ea565b6000604051808303816000875af11580156110af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110d79190810190615936565b90506110e283612efe565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615712565b6020604051808303816000875af115801561112d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061115191906159a8565b50505050565b6040516348f5c3ed60e01b815260040160405180910390fd5b61117982612efe565b5050565b600061118a610fa36128d5565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906111c55750333014155b156113385760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123291906159a8565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061126a903390859036906004016158ea565b6000604051808303816000875af1158015611289573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112b19190810190615936565b9050827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55826001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e908490600401615712565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8290556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60408051606081018252600080825260208201819052918101919091526113ba8261071b565b6040805160608101825282546001600160a01b0390811682526001909301549283166020820152600160a01b90920460f81b6001600160f81b0319169082015292915050565b600061140a6128d5565b6001600160581b031984166000908152600291909101602090815260408083206001600160e01b03198616845290915290205460ff16905092915050565b604080516020810190915260008152611460826128f9565b604080516020810190915290546001600160a01b0316815292915050565b600f60f81b60608060008080836114cf604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b97989097965046955030945091925090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461152a576040516348f5c3ed60e01b815260040160405180910390fd5b6000818152602081905260409020546060906001600160a01b031660018114611574576115718161155e6060870187615a71565b61156c9160049082906159ca565b610755565b91505b60008061159b306115886060890189615a71565b6115969160049082906159ca565b61083e565b90925090506001600160a01b0383166001146115c2576115bd8385848461086d565b6115e0565b816115e05760405163f21e646b60e01b815260040160405180910390fd5b505050505050565b60006115f26128d5565b54600160c81b900463ffffffff16919050565b6000611612610fa36128d5565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061164d5750333014155b156117c05760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba91906159a8565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906116f2903390859036906004016158ea565b6000604051808303816000875af1158015611711573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526117399190810190615936565b905061174a89898989898989612fe0565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611776908490600401615712565b6020604051808303816000875af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b991906159a8565b50506117cf565b6117cf88888888888888612fe0565b5050505050505050565b60006117e6610fa36128d5565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906118215750333014155b15611c065760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561186a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188e91906159a8565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906118c6903390859036906004016158ea565b6000604051808303816000875af11580156118e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261190d9190810190615936565b9050856001036119b05760006119216128d5565b905060006119358760581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff168152909150600090602081016119676014848a8c6159ca565b61197091615ab7565b60601c9052905060148781013588016034818101929182013591818b01358b019182019101356119a48686868686866130d5565b50505050505050611b90565b85600203611a17576014848101358501603481810192918201359181880135880191820191810135906000906119e890828a8c6159ca565b6119f191615ab7565b60601c9050611a028a86868461315f565b611a0d8184846131f0565b5050505050611b90565b85600303611aa75760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c6159ca565b611a58916159f4565b8a611a67601860048c8e6159ca565b611a7091615ab7565b60601c8787613340565b611a9e611a8b601860048a8c6159ca565b611a9491615ab7565b60601c83836131f0565b50505050611b90565b85600403611b0b576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615aea565b600060405180830381600087803b158015611af757600080fd5b505af1158015611a9e573d6000803e3d6000fd5b85600503611b41576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615aea565b85600603611b77576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615aea565b604051631092ef5760e11b815260040160405180910390fd5b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611bbc908490600401615712565b6020604051808303816000875af1158015611bdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bff91906159a8565b50506108dc565b84600103611ca7576000611c186128d5565b90506000611c2c8660581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff16815290915060009060208101611c5e601484898b6159ca565b611c6791615ab7565b60601c9052905060148681013587016034818101929182013591818a01358a01918201910135611c9b8686868686866130d5565b505050505050506108dc565b84600203611d0e57601483810135840160348181019291820135918187013587019182019181013590600090611cdf9082898b6159ca565b611ce891615ab7565b60601c9050611cf98986868461315f565b611d048184846131f0565b50505050506108dc565b84600303611d785760188381013584016038818101929182013591818701358701918201910135611d5e611d4660046000898b6159ca565b611d4f916159f4565b89611a67601860048b8d6159ca565b611d6f611a8b60186004898b6159ca565b505050506108dc565b84600403611ddc576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611dae9086908690600401615aea565b600060405180830381600087803b158015611dc857600080fd5b505af1158015611d6f573d6000803e3d6000fd5b84600503611e12576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611dae9086908690600401615aea565b84600603611b77576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611dae9086908690600401615aea565b6000611e55610fa36128d5565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611e905750333014155b156121345760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efd91906159a8565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611f35903390859036906004016158ea565b6000604051808303816000875af1158015611f54573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f7c9190810190615936565b90506000198603611fc957611fc78585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b505b85600103612004576000611fdb6128d5565b90506000611fef8760581b600160f81b1790565b9050611ffc81878761352a565b505050611b90565b8560020361201d57612017858585613682565b50611b90565b8560030361205c57600061203460048286886159ca565b61203d916159f4565b905061205581612050866004818a6159ca565b6136ed565b5050611b90565b856004036120a4576120178585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b856005036120ec576120178585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b85600603611b77576120178585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b600019850361217f5761217d8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b505b846001036121ba5760006121916128d5565b905060006121a58660581b600160f81b1790565b90506121b281868661352a565b5050506108dc565b846002036121d3576121cd848484613682565b506108dc565b846003036122065760006121ea60048285876159ca565b6121f3916159f4565b9050611bff8161205085600481896159ca565b8460040361224e576121cd8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b84600503612296576121cd8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b84600603611b77576121cd8484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b60006122e86128d5565b54600160a81b900463ffffffff16919050565b60408051808201909152600080825260208201526123176128d5565b6001600160581b03199290921660009081526001909201602090815260409283902083518085019094525463ffffffff8116845264010000000090046001600160a01b0316908301525090565b60606000612371336128f9565b546001600160a01b031690508061239b5760405163710c949760e01b815260040160405180910390fd5b60606001600160a01b0382166001146123bd576123ba82600036610755565b90505b6123c886868661377e565b92506001600160a01b0382166001146124075761240782826001866040516020016123f39190615759565b60405160208183030381529060405261086d565b50509392505050565b60408051606080820183526000808352602083015291810191909152600882901b6124396128d5565b6001600160e01b03198216600090815260039190910160209081526040918290208251606081018452815460f081901b6001600160f01b03191682526201000090046001600160a01b031681840152600182018054855181860281018601875281815292959394938601938301828280156124e457602002820191906000526020600020905b815460501b69ffffffffffffffffffff191681526001909101906020018083116124bf575b505050505081525050915050919050565b6000612502610fa36128d5565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061253d5750333014155b156126bc5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015612586573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125aa91906159a8565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906125e2903390859036906004016158ea565b6000604051808303816000875af1158015612601573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526126299190810190615936565b9050600061263888888861352a565b90506126458186866139a3565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90612672908490600401615712565b6020604051808303816000875af1158015612691573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126b591906159a8565b50506115e0565b60006126c987878761352a565b90506126d68185856139a3565b50505050505050565b60006126ec610fa36128d5565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906127275750333014155b156128975760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015612770573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279491906159a8565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906127cc903390859036906004016158ea565b6000604051808303816000875af11580156127eb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128139190810190615936565b905061282085858561377e565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061284d908490600401615712565b6020604051808303816000875af115801561286c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289091906159a8565b5050611151565b6108dc84848461377e565b60006128ac6128d5565b5460581b919050565b600060088210156128c857506001919050565b506000919050565b919050565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f90565b6001600160a01b031660009081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b6001600160f81b03199081169116141590565b600061294f6128d5565b60208701519091506001600160a01b031661296c57600160208701525b85518154600160a81b900463ffffffff90811691161415806129b4575085516001600160581b03198816600090815260018301602052604090205463ffffffff918216911610155b156129d257604051633ab3447f60e11b815260040160405180910390fd5b6001600160581b03198716600090815260018083016020908152604090922088518154938a01516001600160a01b031664010000000081026001600160c01b031990951663ffffffff9092169190911793909317905514612a3c57612a3c866020015184846131f0565b86612a4b81600160f81b6107d7565b15612ac5576000612a5c8960581c90565b6040516306d61fe760e41b81529091506001600160a01b03821690636d61fe7090612a8d908a908a90600401615aea565b600060405180830381600087803b158015612aa757600080fd5b505af1158015612abb573d6000803e3d6000fd5b50505050506117cf565b612ad381600160f91b6107d7565b15612af7576000612ae48960081b90565b9050612af1818888613a4a565b506117cf565b6040516361c4e91b60e11b815260040160405180910390fd5b813536600060f883901c8015612b365760018114612b4b5760028114612b5c5760206000fd5b60009350600186019250600186039150612b76565b601586019250601585039150612b76565b6001600160d81b0319841693506005860192506005850391505b509250925092565b604080517f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8360208201529081018290526000906107e8906060015b60405160208183030381529060405280519060200120613e19565b6000806000366000612be98a8a8a8a8a613f31565b9350935093509350600080612bfd8561403d565b50915091508165ffffffffffff16421080612c1f57508065ffffffffffff1642115b15612c3b57506001600160e01b03199550612ccb945050505050565b6001600160a01b03861663392dffaf6001600160e01b03198e168d612c5f8e612b7e565b88886040518663ffffffff1660e01b8152600401612c81959493929190615afe565b602060405180830381865afa158015612c9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cc29190615a54565b96505050505050505b95945050505050565b80600881901b8060ff60f084901c166001198101612cfa576001600160d81b0319821691505b509193909250565b600080612d0d6128d5565b90506000612d1a85615b88565b9050366000612d2d610100880188615a71565b9092509050612d4089600160f81b6107d7565b15612d9e57612d5c88612d576101008a018a615a71565b614070565b604080516020601f8401819004810282018101909252828152939850919450925083908390819084018382808284376000920191909152505050506101008401525b87612dad81600160f81b6107d7565b15612e3c57612e3586612dc08b60581c90565b6001600160a01b03166397003203878b6040518363ffffffff1660e01b8152600401612ded929190615d1d565b6020604051808303816000875af1158015612e0c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e309190615d3f565b614241565b9550612ef1565b6000612e488a60081b90565b6001600160e01b03198116600090815260038801602052604090205490915060f01b600160f01b1615612e8e576040516314b9743f60e01b815260040160405180910390fd5b600080612e9d838888886142ff565b91509150612eab8983614241565b9850612eeb89826001600160a01b0316630ccab7a1866001600160e01b0319168b8f6040518463ffffffff1660e01b8152600401612ded93929190615d58565b98505050505b5050505050949350505050565b6000612f086128d5565b805490915063ffffffff80841691612f2a91600a91600160a81b900416615d97565b63ffffffff161015612f4f5760405163e60fd64760e01b815260040160405180910390fd5b805463ffffffff600160c81b909104811690831611612f8157604051633ab3447f60e11b815260040160405180910390fd5b805463ffffffff60c81b1916600160c81b63ffffffff8481168202929092178084559081048216600160a81b909104909116101561117957805463ffffffff60a81b198116600160c81b90910463ffffffff16600160a81b0217905550565b6000612fea6128d5565b905060005b878110156130905761308889898381811061300c5761300c615dbb565b90506020020160208101906130219190615725565b88838151811061303357613033615dbb565b602002602001015188888581811061304d5761304d615dbb565b905060200281019061305f9190615a71565b88888781811061307157613071615dbb565b90506020028101906130839190615a71565b612945565b600101612fef565b508054600160a81b900463ffffffff168160156130ac83615dd1565b91906101000a81548163ffffffff021916908363ffffffff160217905550505050505050505050565b60006130df6128d5565b80546001600160581b03198916600090815260018301602052604090205491925063ffffffff600160a81b9091048116911603613151578054600160a81b900463ffffffff1681601561313183615dd1565b91906101000a81548163ffffffff021916908363ffffffff160217905550505b6126d6878787878787612945565b6001600160a01b038116613171575060015b600061317c856128f9565b80546001600160a01b0319166001600160a01b038481169190911782556040516306d61fe760e41b8152919250861690636d61fe70906131c29087908790600401615aea565b600060405180830381600087803b1580156131dc57600080fd5b505af1158015610acd573d6000803e3d6000fd5b6001600160a01b038316158061320f57506001600160a01b0383166001145b1561321957505050565b60405163d60b347f60e01b81523060048201526001600160a01b0384169063d60b347f90602401602060405180830381865afa15801561325d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328191906159a8565b6132ec576001600160a01b038316636d61fe706132a183600181876159ca565b6040518363ffffffff1660e01b81526004016132be929190615aea565b600060405180830381600087803b1580156132d857600080fd5b505af11580156126d6573d6000803e3d6000fd5b6001600160f81b0319828260008161330657613306615dbb565b9050013560f81c60f81b6001600160f81b0319160361333b576001600160a01b038316636d61fe706132a183600181876159ca565b505050565b6001600160a01b03831661335357600192505b600061335e8661071b565b905060008383600081811061337557613375615dbb565b9050013560f81c60f81b905061338f81600060f81b6107d7565b15613404576001600160a01b038616636d61fe706133b085600181896159ca565b6040518363ffffffff1660e01b81526004016133cd929190615aea565b600060405180830381600087803b1580156133e757600080fd5b505af11580156133fb573d6000803e3d6000fd5b50505050613434565b613416816001600160f81b0319612932565b1561343457604051632d6a6bb760e01b815260040160405180910390fd5b81546001600160a01b039586166001600160a01b03199091161782556001909101805460f89290921c600160a01b026001600160a81b0319909216959094169490941793909317909155505050565b60006134dd835a600080638a91b0e360e01b876040516024016134a69190615712565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526145df565b50604080516001600160a01b038616815282151560208201529192507f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3910160405180910390a192915050565b6000806135356128d5565b805490915060581b6001600160581b0319908116908616036135a55760405162461bcd60e51b8152602060048201526024808201527f526f6f742076616c696461746f722063616e6e6f7420626520756e696e7374616044820152631b1b195960e21b6064820152608401610a13565b6001600160581b03198516600090815260018201602052604090208054640100000000600160c01b0319811690915564010000000090046001600160a01b03169150846135f681600160f81b6107d7565b156136505760006136078760581c90565b90506136498187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b5050612407565b61365e81600160f91b6107d7565b15612af757600061366f8760081b90565b905061367c818787614669565b50612407565b60008061368e856128f9565b80546001600160a01b031981168255604080516020601f88018190048102820181019092528681526001600160a01b03909216945091925061240791879190879087908190840183828082843760009201919091525061348392505050565b6000806136f98561071b565b80546001600160a01b0319811682556001820154604080516020601f89018190048102820181019092528781526001600160a01b03938416965093945061375f939190921691879087908190840183828082843760009201919091525061348392505050565b5060010180546001600160a81b03191660ff60a01b1790559392505050565b606083600881901b61379482600160f81b6107d7565b1561381757843585016020810190356137ae8360006107d7565b156137c4576137bd82826147e1565b9450613649565b6137d283600160f81b6107d7565b156137e1576137bd82826148b1565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610a13565b6138228260006107d7565b156139505760008036600061383789896149de565b6040805160018082528183019092529498509296509094509250816020015b6060815260200190600190039081613856579050509650600061387986826107d7565b156138ad5761388a85858585614a2f565b8860008151811061389d5761389d615dbb565b6020026020010181905250613946565b6138bb86600160f81b6107d7565b156137e1576138cc85858585614a65565b896000815181106138df576138df615dbb565b6020908102919091010152905080613946577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb760008960008151811061392757613927615dbb565b602002602001015160405161393d929190615df4565b60405180910390a15b5050505050612407565b613962826001600160f81b03196107d7565b156137e157600061397660148287896159ca565b61397f91615ab7565b60601c9050366000613994876014818b6159ca565b9150915061394683838361083e565b6001600160a01b03831615806139c257506001600160a01b0383166001145b156139cc57505050565b6001600160f81b031982826000816139e6576139e6615dbb565b9050013560f81c60f81b6001600160f81b0319160361333b5761115183613a1083600181876159ca565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061348392505050565b6000613a546128d5565b90508235830160208101903560fe811180613a6d575080155b15613a8b5760405163b62d956d60e01b815260040160405180910390fd5b6001600160e01b03198616600090815260038401602052604090206001015415613ad9576001600160e01b0319861660009081526003840160205260408120613ad9916001909101906150a2565b60005b6000198201811015613c6b576001600160e01b0319871660009081526003850160205260409020600101838383818110613b1857613b18615dbb565b9050602002810190613b2a9190615a71565b613b39916016916000916159ca565b613b4291615e0d565b81546001810183556000928352602090922090910180546001600160b01b03191660509290921c919091179055828282818110613b8157613b81615dbb565b9050602002810190613b939190615a71565b613ba2916016916002916159ca565b613bab91615ab7565b60601c636d61fe706001600160e01b03198916858585818110613bd057613bd0615dbb565b9050602002810190613be29190615a71565b613bf09160169082906159ca565b604051602001613c0293929190615e3e565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613c2d9190615712565b600060405180830381600087803b158015613c4757600080fd5b505af1158015613c5b573d6000803e3d6000fd5b505060019092019150613adc9050565b50600082826000198101818110613c8457613c84615dbb565b9050602002810190613c969190615a71565b613ca5916016916002916159ca565b613cae91615ab7565b6001600160e01b031988166000908152600386016020526040902080546201000060609390931c92830262010000600160b01b0319909116179055905082826000198101818110613d0157613d01615dbb565b9050602002810190613d139190615a71565b613d22916002916000916159ca565b613d2b91615e58565b6001600160e01b0319881660008181526003870160205260409020805461ffff191660f09390931c929092179091556001600160a01b03821690636d61fe709085856000198101818110613d8157613d81615dbb565b9050602002810190613d939190615a71565b613da19160169082906159ca565b604051602001613db393929190615e3e565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613dde9190615712565b600060405180830381600087803b158015613df857600080fd5b505af1158015613e0c573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416613f0c5750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60008036600080613f406128d5565b60408051610120810182526000808252602082018190529181018290526080810182905260a0810191909152606060c082018190526001600160e01b03198d16908201526001600160a01b038b1660e082015261010081018a9052909150613faa81838a8a614a96565b87876000818110613fbd57613fbd615dbb565b9091013560f81c60ff149050613fe65760405163b32eeb6960e01b815260040160405180910390fd5b613ff3876001818b6159ca565b60608301516001600160e01b0319166000908152600394909401602052604093849020549390920151620100009093046001600160a01b03169c929b509950975095505050505050565b600060a082901c65ffffffffffff1682811560001981016140625765ffffffffffff92505b508360d01c92509193909250565b60003660008061407e6128d5565b905060003660006140908a8a8a614d03565b8654929550909350915060581b60006140ad82600160f81b6107d7565b15614139578554604051637aa8f17760e11b81526001600160a81b038216916001600160a01b03169063f551e2ee906140f09030908a908a908a90600401615a22565b602060405180830381865afa15801561410d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141319190615a54565b9150506141ef565b61414782600160f91b6107d7565b15612af757855460601b60006141608230898989613f31565b60405163392dffaf60e01b8152929e5090985096509091506001600160a01b0382169063392dffaf906141a9906001600160e01b031986169030908c908c908c90600401615afe565b602060405180830381865afa1580156141c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ea9190615a54565b925050505b630b135d3f60e11b6001600160e01b0319821614614220576040516362467c7760e11b815260040160405180910390fd5b50969a60948a0135909901603481019a506014013598975050505050505050565b600081830160601b8260601b81148460601b8214176001600160a01b038486181615176001811461427557600192506142f7565b6001600160d01b031980851690861681811881831102188686176001600160a01b031617935065ffffffffffff60a01b861690816142ba5765ffffffffffff60a01b91505b5065ffffffffffff60a01b8516806142d8575065ffffffffffff60a01b5b8082189082110218806142f1575065ffffffffffff60a01b5b92909217915b505092915050565b600080600061430c6128d5565b6001600160e01b03198816600090815260038201602052604081209192506001909101905b81548110156145235760008061436a84848154811061435257614352615dbb565b60009182526020909120015460501b90605082901c90565b9150915060008989600081811061438357614383615dbb565b919091013560f81c9150508381036144165760006143a5600960018c8e6159ca565b6143ae91615e86565b60c01c90506143c36009808301908c8e6159ca565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008d015261440c8a60098301818e6159ca565b9a509a5050614450565b838160ff16101561443a57604051630760bdcf60e11b815260040160405180910390fd5b6040805160208101909152600081526101008c01525b600160f01b8316600003614518576000826001600160a01b0316637129edce8e6001600160e01b0319168e6040518363ffffffff1660e01b8152600401614498929190615eb4565b6020604051808303816000875af11580156144b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144db9190615d3f565b9050806001600160a01b0381161561450957604051631f24c1fb60e11b815260048101879052602401610a13565b6145138a83614241565b995050505b505050600101614331565b508585600081811061453757614537615dbb565b9091013560f81c60ff1490506145605760405163b32eeb6960e01b815260040160405180910390fd5b61456d85600181896159ca565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008c01949094525050506001600160e01b03198916815260039092016020525060409020546001600160a01b036201000090910416905094509492505050565b6000606060008060008661ffff166001600160401b0381111561460457614604615521565b6040519080825280601f01601f19166020018201604052801561462e576020820181803683370190505b5090506000808751602089018b8e8ef191503d92508683111561464f578692505b828152826000602083013e90999098509650505050505050565b81358201602081019035600061467d6128d5565b6001600160e01b031987166000908152600391909101602052604090206001808201549192506146ad9190615ecd565b82146146cc5760405163013dcc8d60e31b815260040160405180910390fd5b6001810160005b81548110156147595760006146f383838154811061435257614352615dbb565b91505061474f818a6001600160e01b03191688888681811061471757614717615dbb565b90506020028101906147299190615a71565b60405160200161473b93929190615e3e565b604051602081830303815290604052613483565b50506001016146d3565b506147626128d5565b6001600160e01b0319881660009081526003919091016020526040812061478e916001909101906150a2565b81546147ca906201000090046001600160a01b03166001600160e01b0319891686866147bb600182615ee0565b81811061471757614717615dbb565b505080546001600160b01b03191690555050505050565b606081806001600160401b038111156147fc576147fc615521565b60405190808252806020026020018201604052801561482f57816020015b606081526020019060019003908161481a5790505b50915060005b818110156142f7573685858381811061485057614850615dbb565b90506020028101906148629190615ef3565b905061488b6148746020830183615329565b60208301356148866040850185615a71565b614a2f565b84838151811061489d5761489d615dbb565b602090810291909101015250600101614835565b606081806001600160401b038111156148cc576148cc615521565b6040519080825280602002602001820160405280156148ff57816020015b60608152602001906001900390816148ea5790505b50915060005b818110156142f7573685858381811061492057614920615dbb565b90506020028101906149329190615ef3565b9050600061495d6149466020840184615329565b60208401356149586040860186615a71565b614a65565b86858151811061496f5761496f615dbb565b60209081029190910101529050806149d4577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7838685815181106149b5576149b5615dbb565b60200260200101516040516149cb929190615df4565b60405180910390a15b5050600101614905565b60008036816149f060148287896159ca565b6149f991615ab7565b60601c9350614a0c6034601487896159ca565b614a1591615f13565b9250614a2485603481896159ca565b949793965094505050565b60405181838237600038838387895af1614a4c573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b60608401516001600160e01b03191660009081526003840160205260408120600101905b81548110156115e057614ad882828154811061435257614352615dbb565b6001600160a01b031660a08801526001600160f01b03191660808701528383600081614b0657614b06615dbb565b919091013560f81c8088528290039050614ba357614b286009600185876159ca565b614b3191615e86565b60c01c60208701819052614b4c9060099081019085876159ca565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701526020860151614b9a90849060090181876159ca565b93509350614c0f565b855160ff16811115614bc857604051630760bdcf60e11b815260040160405180910390fd5b614bd560008085876159ca565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701525b6080860151600160f11b16600003614cfb5760a0860151606087015160e088015161010089015160c08a015160405163184dfdbb60e11b81526000956001600160a01b03169463309bfb7694614c76946001600160e01b0319909216939092600401615f31565b602060405180830381865afa158015614c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614cb79190615d3f565b9050806001600160a01b03811615614ce557604051631f24c1fb60e11b815260048101849052602401610a13565b614cf3886040015183614241565b604089015250505b600101614aba565b60003660008036600036600036600080614d1e8e8e8e614d8d565b9750975097509750975097509750975060748d013560348e0101995060208a03359850614d4f8e89898989896130d5565b614d598383614f42565b614d7b8e614d6b6004600086886159ca565b614d74916159f4565b600161500f565b99505050505050505093509350939050565b6040805180820190915260008082526020820152366000366000366000806000614db56128d5565b9050614dc5601460008c8e6159ca565b614dce91615ab7565b60601c89602001906001600160a01b031690816001600160a01b0316815250508060000160159054906101000a900463ffffffff16896000019063ffffffff16908163ffffffff168152505060148b013560348c010197506020880335965060348b013560348c010195506020860335945060548b013560348c0101935060208403359250614f327fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c50560001b8d8360000160159054906101000a900463ffffffff168c602001518c8c604051614ea5929190615f5e565b60405180910390208b8b604051614ebd929190615f5e565b60405180910390208a8a604051614ed5929190615f5e565b6040805191829003822060208301989098526001600160581b03199096169581019590955263ffffffff90931660608501526001600160a01b03909116608084015260a083015260c082015260e081019190915261010001612bb9565b9150509397509397509397509397565b6000614f5160048284866159ca565b614f5a916159f4565b90506004821061333b57602c8210614fc857602c838101358401604c818101929182013591818701358701918201910135614fb785614f9d601860048a8c6159ca565b614fa691615ab7565b60601c611a67602c60188b8d6159ca565b6126d6611a8b602c6018898b6159ca565b6004821461333b5760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606401610a13565b60006150196128d5565b6001600160581b03198516600081815260028301602090815260408083206001600160e01b0319891680855290835292819020805488151560ff1990911681179091558151938452918301939093528183015290519192507f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a919081900360600190a150505050565b50805460008255906000526020600020908101906150c091906150c3565b50565b5b808211156150d857600081556001016150c4565b5090565b6001600160a01b03811681146150c057600080fd5b80356128d0816150dc565b60008083601f84011261510e57600080fd5b5081356001600160401b0381111561512557600080fd5b60208301915083602082850101111561513d57600080fd5b9250929050565b6000806000806060858703121561515a57600080fd5b84359350602085013561516c816150dc565b925060408501356001600160401b0381111561518757600080fd5b615193878288016150fc565b95989497509550505050565b80356001600160581b0319811681146128d057600080fd5b600080600080600080608087890312156151d057600080fd5b6151d98761519f565b955060208701356151e9816150dc565b945060408701356001600160401b038082111561520557600080fd5b6152118a838b016150fc565b9096509450606089013591508082111561522a57600080fd5b5061523789828a016150fc565b979a9699509497509295939492505050565b60008060006040848603121561525e57600080fd5b8335925060208401356001600160401b0381111561527b57600080fd5b615287868287016150fc565b9497909650939450505050565b600061012082840312156152a757600080fd5b50919050565b6000806000606084860312156152c257600080fd5b83356001600160401b038111156152d857600080fd5b6152e486828701615294565b9660208601359650604090950135949350505050565b803563ffffffff811681146128d057600080fd5b60006020828403121561532057600080fd5b610c73826152fa565b60006020828403121561533b57600080fd5b8135610c73816150dc565b6001600160e01b0319811681146150c057600080fd5b60006020828403121561536e57600080fd5b8135610c7381615346565b6000806040838503121561538c57600080fd5b6153958361519f565b915060208301356153a581615346565b809150509250929050565b60005b838110156153cb5781810151838201526020016153b3565b50506000910152565b600081518084526153ec8160208601602086016153b0565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e0602084015261542160e084018a6153d4565b8381036040850152615433818a6153d4565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b818110156154875783518352928401929184019160010161546b565b50909c9b505050505050505050505050565b600080604083850312156154ac57600080fd5b82356001600160401b038111156154c257600080fd5b6154ce85828601615294565b95602094909401359450505050565b60008083601f8401126154ef57600080fd5b5081356001600160401b0381111561550657600080fd5b6020830191508360208260051b850101111561513d57600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b038111828210171561555957615559615521565b60405290565b60405161012081016001600160401b038111828210171561555957615559615521565b604051601f8201601f191681016001600160401b03811182821017156155aa576155aa615521565b604052919050565b60008060008060008060006080888a0312156155cd57600080fd5b6001600160401b0380893511156155e357600080fd5b6155f08a8a358b016154dd565b909850965060208901358181111561560757600080fd5b8901601f81018b1361561857600080fd5b80358281111561562a5761562a615521565b61563960208260051b01615582565b8082825260208201915060208360061b85010192508d83111561565b57600080fd5b6020840193505b828410156156b7576040848f03121561567a57600080fd5b615682615537565b61568b856152fa565b8152602085013561569b816150dc565b8060208301525080835250602082019150604084019350615662565b98505050506040890135818111156156ce57600080fd5b6156da8b828c016154dd565b9096509450506060890135818111156156f257600080fd5b6156fe8b828c016154dd565b999c989b5096995094979396939450505050565b602081526000610c7360208301846153d4565b60006020828403121561573757600080fd5b610c738261519f565b60006020828403121561575257600080fd5b5035919050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b828110156157b057603f1988860301845261579e8583516153d4565b94509285019290850190600101615782565b5092979650505050505050565b602080825282516001600160f01b03191682820152828101516001600160a01b031660408084019190915283015160608084015280516080840181905260009291820190839060a08601905b8083101561583657835169ffffffffffffffffffff19168252928401926001929092019190840190615809565b509695505050505050565b60008060008060006060868803121561585957600080fd5b6158628661519f565b945060208601356001600160401b038082111561587e57600080fd5b61588a89838a016150fc565b909650945060408801359150808211156158a357600080fd5b506158b0888289016150fc565b969995985093965092949392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612ccb90830184866158c1565b60006001600160401b0382111561592857615928615521565b50601f01601f191660200190565b60006020828403121561594857600080fd5b81516001600160401b0381111561595e57600080fd5b8201601f8101841361596f57600080fd5b805161598261597d8261590f565b615582565b81815285602083850101111561599757600080fd5b612ccb8260208301602086016153b0565b6000602082840312156159ba57600080fd5b81518015158114610c7357600080fd5b600080858511156159da57600080fd5b838611156159e757600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156142f75760049490940360031b84901b1690921692915050565b60018060a01b0385168152836020820152606060408201526000615a4a6060830184866158c1565b9695505050505050565b600060208284031215615a6657600080fd5b8151610c7381615346565b6000808335601e19843603018112615a8857600080fd5b8301803591506001600160401b03821115615aa257600080fd5b60200191503681900382131561513d57600080fd5b6bffffffffffffffffffffffff1981358181169160148510156142f75760149490940360031b84901b1690921692915050565b6020815260006107cf6020830184866158c1565b85815260018060a01b0385166020820152836040820152608060608201526000615b2c6080830184866158c1565b979650505050505050565b600082601f830112615b4857600080fd5b8135615b5661597d8261590f565b818152846020838601011115615b6b57600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215615b9b57600080fd5b615ba361555f565b615bac836150f1565b81526020830135602082015260408301356001600160401b0380821115615bd257600080fd5b615bde36838701615b37565b60408401526060850135915080821115615bf757600080fd5b615c0336838701615b37565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e0850135915080821115615c3a57600080fd5b615c4636838701615b37565b60e084015261010091508185013581811115615c6157600080fd5b615c6d36828801615b37565b8385015250505080915050919050565b80516001600160a01b031682526000610120602083015160208501526040830151816040860152615cb0828601826153d4565b91505060608301518482036060860152615cca82826153d4565b9150506080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152615d0282826153d4565b9150506101008084015185830382870152615a4a83826153d4565b604081526000615d306040830185615c7d565b90508260208301529392505050565b600060208284031215615d5157600080fd5b5051919050565b838152606060208201526000615d716060830185615c7d565b9050826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115615db457615db4615d81565b5092915050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff808316818103615dea57615dea615d81565b6001019392505050565b8281526040602082015260006107cf60408301846153d4565b69ffffffffffffffffffff1981358181169160168510156142f75760169490940360031b84901b1690921692915050565b838152818360208301376000910160200190815292915050565b6001600160f01b031981358181169160028510156142f75760029490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156142f75760089490940360031b84901b1690921692915050565b8281526040602082015260006107cf6040830184615c7d565b808201808211156107e8576107e8615d81565b818103818111156107e8576107e8615d81565b60008235605e19833603018112615f0957600080fd5b9190910192915050565b803560208310156107e857600019602084900360031b1b1692915050565b84815260018060a01b0384166020820152826040820152608060608201526000615a4a60808301846153d4565b8183823760009101908152919050560000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x2e", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x1aae5c0d5e0619aa7ae9098b4ce220d5de82096a8be0dbfef3908d64a56bacc2", + "transactionIndex": "0x7", + "blockHash": "0x3a7e45eb9be58ede0c1476398153aa4036e3c52ea7717bb645bb7ef92943ecb9", + "blockNumber": "0x55accf", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x5535e6", + "gasUsed": "0x51e892", + "contractAddress": "0x541E811D24A54745619a5B9f0c1d4B08D5740144", + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xede72eb9" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712078612, + "chain": 11155111, + "commit": "ef4e38d" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/11155111/run-1712595823.json b/broadcast/Deploy.s.sol/11155111/run-1712595823.json new file mode 100644 index 00000000..401c728b --- /dev/null +++ b/broadcast/Deploy.s.sol/11155111/run-1712595823.json @@ -0,0 +1,180 @@ +{ + "transactions": [ + { + "hash": "0x710c7e453988a351631693916c8ba9f05966a24efaaa1c133f1767135868f9c8", + "transactionType": "CREATE2", + "contractName": "FactoryStaker", + "contractAddress": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "function": null, + "arguments": [ + "0x9775137314fE595c943712B0b336327dfa80aE8A" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xa3646", + "value": "0x0", + "data": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "nonce": "0x30", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x2b56a22f73c5bce6917093ede70e05f97a800c4da77168977308a4b4911d33f3", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0xe59cffb45AFFB215e3823F7D1a207a71C1aa09c3", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x779014", + "value": "0x0", + "data": "0x00000000000000000000000000000000000000000000000000000000000000006101406040523480156200001257600080fd5b50604051620061a7380380620061a7833981016040819052620000359162000168565b306080524660a05260608062000085604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b815160209283012081519183019190912060c082905260e0819052604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8152808501939093528281019190915246606083015230608083015260a0909120610100526001600160a01b03851661012052805163deadbeef60e01b92810192909252805160048184030181526024909201905262000128925090506200019a565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f80546001600160a81b03191660589290921c91909117905550620001d2565b6000602082840312156200017b57600080fd5b81516001600160a01b03811681146200019357600080fd5b9392505050565b805160208201516001600160581b03198082169291906015831015620001ca5780818460150360031b1b83161693505b505050919050565b60805160a05160c05160e0516101005161012051615f46620002616000396000818161058d01528181610c8701528181610fbd01528181611197015281816114ec0152818161161f015281816117f301528181611e62015281816124e701526126d101526000613df301526000613ead01526000613e8701526000613e3701526000613e140152615f466000f3fe6080604052600436106101855760003560e01c80639517e29f116100d1578063d03c79141161008a578063e6f3d50a11610064578063e6f3d50a146106a7578063e9ae5c53146106ba578063f1f7f0f9146106cd578063f2dc691d146106fb576101c4565b8063d03c791414610639578063d691c9641461065a578063e0dfd3651461067a576101c4565b80639517e29f1461051c5780639cfd7cff1461052f578063a65d69d41461057b578063a71763a8146105c7578063adb610a3146105da578063b8afe17d146105ef576101c4565b806357b3a5f41161013e57806384b0196e1161011857806384b0196e146104975780638dd7712f146104bf57806390ef8862146104d25780639198bdf5146104fc576101c4565b806357b3a5f4146103e55780636e6fa0c61461043f578063721e67f41461045f576101c4565b8063112d3a7d1461031057806312af322c146103455780631626ba7e1461036557806319822f7c1461039e5780631f1b92e3146103bf5780633659cfe6146103d2576101c4565b366101c457604080513381523460208201527f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f88525874910160405180910390a1005b60006101db6000356001600160e01b03191661071b565b604080516060808201835283546001600160a01b039081168084526001909501549081166020840152600160a01b900460f81b6001600160f81b03191692820192909252925060009161024157604051631cd4b64760e21b815260040160405180910390fd5b82516060906001600160a01b031660011461026757835161026490600036610755565b90505b60408401516102779060006107d7565b156102935761028984602001516107ee565b90935091506102d8565b60408401516102aa906001600160f81b03196107d7565b156102bf57610289846020015160003661083e565b604051632d6a6bb760e01b815260040160405180910390fd5b83516001600160a01b03166001146102f85783516102f89082858561086d565b508161030657805160208201fd5b805160208201f35b005b34801561031c57600080fd5b5061033061032b36600461511c565b6108e3565b60405190151581526020015b60405180910390f35b34801561035157600080fd5b5061030e61036036600461518f565b6109b8565b34801561037157600080fd5b50610385610380366004615221565b610ad8565b6040516001600160e01b0319909116815260200161033c565b6103b16103ac366004615285565b610c7a565b60405190815260200161033c565b61030e6103cd3660046152e6565b610f96565b61030e6103e0366004615301565b61117d565b3480156103f157600080fd5b50610405610400366004615334565b611394565b6040805182516001600160a01b03908116825260208085015190911690820152918101516001600160f81b0319169082015260600161033c565b34801561044b57600080fd5b5061033061045a366004615351565b611400565b34801561046b57600080fd5b5061047f61047a366004615301565b611448565b60405190516001600160a01b0316815260200161033c565b3480156104a357600080fd5b506104ac61147e565b60405161033c97969594939291906153d8565b61030e6104cd366004615471565b6114e1565b3480156104de57600080fd5b506104e76115e8565b60405163ffffffff909116815260200161033c565b34801561050857600080fd5b5061030e61051736600461558a565b611605565b61030e61052a36600461511c565b6117d9565b34801561053b57600080fd5b50604080518082018252601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152905161033c91906156ea565b34801561058757600080fd5b506105af7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161033c565b61030e6105d536600461511c565b611e48565b3480156105e657600080fd5b506104e76122b6565b3480156105fb57600080fd5b5061060f61060a3660046156fd565b6122d3565b60408051825163ffffffff1681526020928301516001600160a01b0316928101929092520161033c565b34801561064557600080fd5b50610330610654366004615718565b50600190565b61066d610668366004615221565b61233c565b60405161033c9190615731565b34801561068657600080fd5b5061069a6106953660046156fd565b6123e8565b60405161033c9190615795565b61030e6106b5366004615819565b6124cd565b61030e6106c8366004615221565b6126b7565b3480156106d957600080fd5b506106e261287a565b6040516001600160581b0319909116815260200161033c565b34801561070757600080fd5b50610330610716366004615718565b61288d565b6001600160e01b03191660009081527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b6020526040902090565b604051631057c74d60e11b81526060906001600160a01b038516906320af8e9a90610788903390879087906004016158c2565b6000604051808303816000875af11580156107a7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107cf919081019061590e565b949350505050565b6001600160f81b0319828116908216145b92915050565b6000606060408051368101909152366000823760408051601481019091523360601b9052600080366014018382885af192505060405190503d8152602081013d6000823e3d810160405250915091565b604051600090828482376000388483885af491503d8152602081013d6000823e3d810160405250935093915050565b604051630b9dfbed60e11b81526001600160a01b0385169063173bf7da906108999086906004016156ea565b6020604051808303816000875af11580156108b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108dc9190615980565b5050505050565b6000846001036109415760006108f76128ad565b600101600061090c8760581b600160f81b1790565b6001600160581b031916815260208101919091526040016000205464010000000090046001600160a01b0316141590506107cf565b84600203610967576000610954856128d1565b546001600160a01b0316141590506107cf565b846003036109ad576001600160a01b03841661099861098a6004600086886159a2565b610993916159cc565b61071b565b600101546001600160a01b03161490506107cf565b506000949350505050565b60006109c26128ad565b805490915060581b6001600160581b03191615610a1c5760405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b60448201526064015b60405180910390fd5b6001600160581b03198716610a4457604051631a0a9b9f60e21b815260040160405180910390fd5b86610a5381600160f81b61290a565b8015610a685750610a6881600160f91b61290a565b15610a86576040516361c4e91b60e11b815260040160405180910390fd5b815460408051808201909152600181526001600160a01b03891660208201526001600160c81b031990911660588a901c17600160a81b178355610acd89828989898961291d565b505050505050505050565b600080610ae36128ad565b90506000366000610af48787612ae8565b925092509250610b0b610b048490565b60006107d7565b15610b1857835460581b92505b6001600160581b03198316600090815260018501602052604090205464010000000090046001600160a01b0316610b6257604051631a0a9b9f60e21b815260040160405180910390fd5b610b7083600160f81b6107d7565b15610c0a576000610b818460581c90565b9050806001600160a01b031663f551e2ee33610b9c8c612b56565b86866040518563ffffffff1660e01b8152600401610bbd94939291906159fa565b602060405180830381865afa158015610bda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bfe9190615a2c565b95505050505050610c73565b6000610c168460081b90565b6001600160e01b03198116600090815260038701602052604090205490915060f01b600160f11b811615610c5d57604051635b71057960e01b815260040160405180910390fd5b610c6a82338c8787612bac565b96505050505050505b9392505050565b6000336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cc5576040516348f5c3ed60e01b815260040160405180910390fd5b6000610ccf6128ad565b90506000806000610ce38860200135612cac565b91945092509050610cf58260006107d7565b15610d015750825460581b5b610d0d83828a8a612cda565b6001600160581b031982166000908152600186016020908152604080832081518083019092525463ffffffff8116825264010000000090046001600160a01b031691810191909152919650610d6390849061290a565b8015610d8157508454815163ffffffff600160c81b90920482169116105b15610d9f57604051633ab3447f60e11b815260040160405180910390fd5b60208101516001600160a01b038116610dcb57604051631a0a9b9f60e21b815260040160405180910390fd5b600089815260208190526040902080546001600160a01b0319166001600160a01b03831690811790915560001901610e9357610e0884600061290a565b8015610e7057506001600160581b031983166000908152600287016020526040812090610e3860608d018d615a49565b610e47916004916000916159a2565b610e50916159cc565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610e8e57604051631a0a9b9f60e21b815260040160405180910390fd5b610f79565b610e9e84600061290a565b8015610f0657506001600160581b031983166000908152600287016020526040812090610ece60608d018d615a49565b610edd916008916004916159a2565b610ee6916159cc565b6001600160e01b031916815260208101919091526040016000205460ff16155b15610f2457604051631a0a9b9f60e21b815260040160405180910390fd5b638dd7712f60e01b610f3960608c018c615a49565b610f48916004916000916159a2565b610f51916159cc565b6001600160e01b03191614610f795760405163dbbb044b60e01b815260040160405180910390fd5b8715610f8957343434348b335af1505b5050505050509392505050565b6000610fb0610fa36128ad565b546001600160a81b031690565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590610feb5750333014155b156111705760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611034573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110589190615980565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611090903390859036906004016158c2565b6000604051808303816000875af11580156110af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110d7919081019061590e565b90506110e283612ed6565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e9084906004016156ea565b6020604051808303816000875af115801561112d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111519190615980565b50505050565b6040516348f5c3ed60e01b815260040160405180910390fd5b61117982612ed6565b5050565b600061118a610fa36128ad565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906111c55750333014155b156113385760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112329190615980565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a9061126a903390859036906004016158c2565b6000604051808303816000875af1158015611289573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112b1919081019061590e565b9050827f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55826001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a2604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061110e9084906004016156ea565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8290556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b60408051606081018252600080825260208201819052918101919091526113ba8261071b565b6040805160608101825282546001600160a01b0390811682526001909301549283166020820152600160a01b90920460f81b6001600160f81b0319169082015292915050565b600061140a6128ad565b6001600160581b031984166000908152600291909101602090815260408083206001600160e01b03198616845290915290205460ff16905092915050565b604080516020810190915260008152611460826128d1565b604080516020810190915290546001600160a01b0316815292915050565b600f60f81b60608060008080836114cf604080518082018252600681526512d95c9b995b60d21b6020808301919091528251808401909352600a835269302e332e302d6265746160b01b9083015291565b97989097965046955030945091925090565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461152a576040516348f5c3ed60e01b815260040160405180910390fd5b6000818152602081905260409020546060906001600160a01b031660018114611574576115718161155e6060870187615a49565b61156c9160049082906159a2565b610755565b91505b60008061159b306115886060890189615a49565b6115969160049082906159a2565b61083e565b90925090506001600160a01b0383166001146115c2576115bd8385848461086d565b6115e0565b816115e05760405163f21e646b60e01b815260040160405180910390fd5b505050505050565b60006115f26128ad565b54600160c81b900463ffffffff16919050565b6000611612610fa36128ad565b9050336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061164d5750333014155b156117c05760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116ba9190615980565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906116f2903390859036906004016158c2565b6000604051808303816000875af1158015611711573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611739919081019061590e565b905061174a89898989898989612fb8565b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906117769084906004016156ea565b6020604051808303816000875af1158015611795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117b99190615980565b50506117cf565b6117cf88888888888888612fb8565b5050505050505050565b60006117e6610fa36128ad565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906118215750333014155b15611c065760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561186a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188e9190615980565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906118c6903390859036906004016158c2565b6000604051808303816000875af11580156118e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261190d919081019061590e565b9050856001036119b05760006119216128ad565b905060006119358760581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff168152909150600090602081016119676014848a8c6159a2565b61197091615a8f565b60601c9052905060148781013588016034818101929182013591818b01358b019182019101356119a48686868686866130ad565b50505050505050611b90565b85600203611a17576014848101358501603481810192918201359181880135880191820191810135906000906119e890828a8c6159a2565b6119f191615a8f565b60601c9050611a028a868684613137565b611a0d8184846131c8565b5050505050611b90565b85600303611aa75760188481013585016038818101929182013591818801358801918201910135611a7a611a4f600460008a8c6159a2565b611a58916159cc565b8a611a67601860048c8e6159a2565b611a7091615a8f565b60601c8787613318565b611a9e611a8b601860048a8c6159a2565b611a9491615a8f565b60601c83836131c8565b50505050611b90565b85600403611b0b576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615ac2565b600060405180830381600087803b158015611af757600080fd5b505af1158015611a9e573d6000803e3d6000fd5b85600503611b41576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615ac2565b85600603611b77576040516306d61fe760e41b81526001600160a01b03861690636d61fe7090611add9087908790600401615ac2565b604051631092ef5760e11b815260040160405180910390fd5b604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da90611bbc9084906004016156ea565b6020604051808303816000875af1158015611bdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bff9190615980565b50506108dc565b84600103611ca7576000611c186128ad565b90506000611c2c8660581b600160f81b1790565b604080518082019091528354600160a81b900463ffffffff16815290915060009060208101611c5e601484898b6159a2565b611c6791615a8f565b60601c9052905060148681013587016034818101929182013591818a01358a01918201910135611c9b8686868686866130ad565b505050505050506108dc565b84600203611d0e57601483810135840160348181019291820135918187013587019182019181013590600090611cdf9082898b6159a2565b611ce891615a8f565b60601c9050611cf989868684613137565b611d048184846131c8565b50505050506108dc565b84600303611d785760188381013584016038818101929182013591818701358701918201910135611d5e611d4660046000898b6159a2565b611d4f916159cc565b89611a67601860048b8d6159a2565b611d6f611a8b60186004898b6159a2565b505050506108dc565b84600403611ddc576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611dae9086908690600401615ac2565b600060405180830381600087803b158015611dc857600080fd5b505af1158015611d6f573d6000803e3d6000fd5b84600503611e12576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611dae9086908690600401615ac2565b84600603611b77576040516306d61fe760e41b81526001600160a01b03851690636d61fe7090611dae9086908690600401615ac2565b6000611e55610fa36128ad565b9050336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611e905750333014155b156121205760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015611ed9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efd9190615980565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a90611f35903390859036906004016158c2565b6000604051808303816000875af1158015611f54573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f7c919081019061590e565b90506000198603611fc957611fc78585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b505b85600103611ff7576000611fe38660581b600160f81b1790565b9050611ff0818686613502565b5050611b90565b856002036120105761200a85858561365a565b50611b90565b8560030361204857600061202760048286886159a2565b612030916159cc565b9050611ff081612043866004818a6159a2565b6136c5565b856004036120905761200a8585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b856005036120d85761200a8585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b85600603611b775761200a8585858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b600019850361216b576121698484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b505b846001036121925760006121858560581b600160f81b1790565b9050611bff818585613502565b846002036121ab576121a584848461365a565b506108dc565b846003036121de5760006121c260048285876159a2565b6121cb916159cc565b9050611bff8161204385600481896159a2565b84600403612226576121a58484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b8460050361226e576121a58484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b84600603611b77576121a58484848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b60006122c06128ad565b54600160a81b900463ffffffff16919050565b60408051808201909152600080825260208201526122ef6128ad565b6001600160581b03199290921660009081526001909201602090815260409283902083518085019094525463ffffffff8116845264010000000090046001600160a01b0316908301525090565b60606000612349336128d1565b546001600160a01b03169050806123735760405163710c949760e01b815260040160405180910390fd5b60606001600160a01b0382166001146123955761239282600036610755565b90505b6123a0868686613756565b92506001600160a01b0382166001146123df576123df82826001866040516020016123cb9190615731565b60405160208183030381529060405261086d565b50509392505050565b60408051606080820183526000808352602083015291810191909152600882901b6124116128ad565b6001600160e01b03198216600090815260039190910160209081526040918290208251606081018452815460f081901b6001600160f01b03191682526201000090046001600160a01b031681840152600182018054855181860281018601875281815292959394938601938301828280156124bc57602002820191906000526020600020905b815460501b69ffffffffffffffffffff19168152600190910190602001808311612497575b505050505081525050915050919050565b60006124da610fa36128ad565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906125155750333014155b156126945760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa15801561255e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125829190615980565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906125ba903390859036906004016158c2565b6000604051808303816000875af11580156125d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612601919081019061590e565b90506000612610888888613502565b905061261d81868661397b565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da9061264a9084906004016156ea565b6020604051808303816000875af1158015612669573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061268d9190615980565b50506115e0565b60006126a1878787613502565b90506126ae81858561397b565b50505050505050565b60006126c4610fa36128ad565b9050336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906126ff5750333014155b1561286f5760405163ecd0596160e01b81526004808201526001600160a01b0382169063ecd0596190602401602060405180830381865afa158015612748573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061276c9190615980565b1561115757604051631057c74d60e11b81526000906001600160a01b038316906320af8e9a906127a4903390859036906004016158c2565b6000604051808303816000875af11580156127c3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526127eb919081019061590e565b90506127f8858585613756565b50604051630b9dfbed60e11b81526001600160a01b0383169063173bf7da906128259084906004016156ea565b6020604051808303816000875af1158015612844573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128689190615980565b5050611151565b6108dc848484613756565b60006128846128ad565b5460581b919050565b600060078210156128a057506001919050565b506000919050565b919050565b7f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f90565b6001600160a01b031660009081527f1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b866020526040902090565b6001600160f81b03199081169116141590565b60006129276128ad565b60208701519091506001600160a01b031661294457600160208701525b85518154600160a81b900463ffffffff908116911614158061298c575085516001600160581b03198816600090815260018301602052604090205463ffffffff918216911610155b156129aa57604051633ab3447f60e11b815260040160405180910390fd5b6001600160581b03198716600090815260018083016020908152604090922088518154938a01516001600160a01b031664010000000081026001600160c01b031990951663ffffffff9092169190911793909317905514612a1457612a14866020015184846131c8565b86612a2381600160f81b6107d7565b15612a9d576000612a348960581c90565b6040516306d61fe760e41b81529091506001600160a01b03821690636d61fe7090612a65908a908a90600401615ac2565b600060405180830381600087803b158015612a7f57600080fd5b505af1158015612a93573d6000803e3d6000fd5b50505050506117cf565b612aab81600160f91b6107d7565b15612acf576000612abc8960081b90565b9050612ac9818888613a22565b506117cf565b6040516361c4e91b60e11b815260040160405180910390fd5b813536600060f883901c8015612b0e5760018114612b235760028114612b345760206000fd5b60009350600186019250600185039150612b4e565b601586019250601585039150612b4e565b6001600160d81b0319841693506005860192506005850391505b509250925092565b604080517f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c8360208201529081018290526000906107e8906060015b60405160208183030381529060405280519060200120613df1565b6000806000366000612bc18a8a8a8a8a613f09565b9350935093509350600080612bd585614015565b50915091508165ffffffffffff16421080612bf757508065ffffffffffff1642115b15612c1357506001600160e01b03199550612ca3945050505050565b6001600160a01b03861663392dffaf6001600160e01b03198e168d612c378e612b56565b88886040518663ffffffff1660e01b8152600401612c59959493929190615ad6565b602060405180830381865afa158015612c76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9a9190615a2c565b96505050505050505b95945050505050565b80600881901b8060ff60f084901c166001198101612cd2576001600160d81b0319821691505b509193909250565b600080612ce56128ad565b90506000612cf285615b60565b9050366000612d05610100880188615a49565b9092509050612d1889600160f81b6107d7565b15612d7657612d3488612d2f6101008a018a615a49565b614048565b604080516020601f8401819004810282018101909252828152939850919450925083908390819084018382808284376000920191909152505050506101008401525b87612d8581600160f81b6107d7565b15612e1457612e0d86612d988b60581c90565b6001600160a01b03166397003203878b6040518363ffffffff1660e01b8152600401612dc5929190615cf5565b6020604051808303816000875af1158015612de4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e089190615d17565b614219565b9550612ec9565b6000612e208a60081b90565b6001600160e01b03198116600090815260038801602052604090205490915060f01b600160f01b1615612e66576040516314b9743f60e01b815260040160405180910390fd5b600080612e75838888886142d7565b91509150612e838983614219565b9850612ec389826001600160a01b0316630ccab7a1866001600160e01b0319168b8f6040518463ffffffff1660e01b8152600401612dc593929190615d30565b98505050505b5050505050949350505050565b6000612ee06128ad565b805490915063ffffffff80841691612f0291600a91600160a81b900416615d6f565b63ffffffff161015612f275760405163e60fd64760e01b815260040160405180910390fd5b805463ffffffff600160c81b909104811690831611612f5957604051633ab3447f60e11b815260040160405180910390fd5b805463ffffffff60c81b1916600160c81b63ffffffff8481168202929092178084559081048216600160a81b909104909116101561117957805463ffffffff60a81b198116600160c81b90910463ffffffff16600160a81b0217905550565b6000612fc26128ad565b905060005b8781101561306857613060898983818110612fe457612fe4615d93565b9050602002016020810190612ff991906156fd565b88838151811061300b5761300b615d93565b602002602001015188888581811061302557613025615d93565b90506020028101906130379190615a49565b88888781811061304957613049615d93565b905060200281019061305b9190615a49565b61291d565b600101612fc7565b508054600160a81b900463ffffffff1681601561308483615da9565b91906101000a81548163ffffffff021916908363ffffffff160217905550505050505050505050565b60006130b76128ad565b80546001600160581b03198916600090815260018301602052604090205491925063ffffffff600160a81b9091048116911603613129578054600160a81b900463ffffffff1681601561310983615da9565b91906101000a81548163ffffffff021916908363ffffffff160217905550505b6126ae87878787878761291d565b6001600160a01b038116613149575060015b6000613154856128d1565b80546001600160a01b0319166001600160a01b038481169190911782556040516306d61fe760e41b8152919250861690636d61fe709061319a9087908790600401615ac2565b600060405180830381600087803b1580156131b457600080fd5b505af1158015610acd573d6000803e3d6000fd5b6001600160a01b03831615806131e757506001600160a01b0383166001145b156131f157505050565b60405163d60b347f60e01b81523060048201526001600160a01b0384169063d60b347f90602401602060405180830381865afa158015613235573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132599190615980565b6132c4576001600160a01b038316636d61fe7061327983600181876159a2565b6040518363ffffffff1660e01b8152600401613296929190615ac2565b600060405180830381600087803b1580156132b057600080fd5b505af11580156126ae573d6000803e3d6000fd5b6001600160f81b031982826000816132de576132de615d93565b9050013560f81c60f81b6001600160f81b03191603613313576001600160a01b038316636d61fe7061327983600181876159a2565b505050565b6001600160a01b03831661332b57600192505b60006133368661071b565b905060008383600081811061334d5761334d615d93565b9050013560f81c60f81b905061336781600060f81b6107d7565b156133dc576001600160a01b038616636d61fe7061338885600181896159a2565b6040518363ffffffff1660e01b81526004016133a5929190615ac2565b600060405180830381600087803b1580156133bf57600080fd5b505af11580156133d3573d6000803e3d6000fd5b5050505061340c565b6133ee816001600160f81b031961290a565b1561340c57604051632d6a6bb760e01b815260040160405180910390fd5b81546001600160a01b039586166001600160a01b03199091161782556001909101805460f89290921c600160a01b026001600160a81b0319909216959094169490941793909317909155505050565b60006134b5835a600080638a91b0e360e01b8760405160240161347e91906156ea565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b0319909316929092179091526145b7565b50604080516001600160a01b038616815282151560208201529192507f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3910160405180910390a192915050565b60008061350d6128ad565b805490915060581b6001600160581b03199081169086160361357d5760405162461bcd60e51b8152602060048201526024808201527f526f6f742076616c696461746f722063616e6e6f7420626520756e696e7374616044820152631b1b195960e21b6064820152608401610a13565b6001600160581b03198516600090815260018201602052604090208054640100000000600160c01b0319811690915564010000000090046001600160a01b03169150846135ce81600160f81b6107d7565b156136285760006135df8760581c90565b90506136218187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b50506123df565b61363681600160f91b6107d7565b15612acf5760006136478760081b90565b9050613654818787614641565b506123df565b600080613666856128d1565b80546001600160a01b031981168255604080516020601f88018190048102820181019092528681526001600160a01b0390921694509192506123df91879190879087908190840183828082843760009201919091525061345b92505050565b6000806136d18561071b565b80546001600160a01b0319811682556001820154604080516020601f89018190048102820181019092528781526001600160a01b039384169650939450613737939190921691879087908190840183828082843760009201919091525061345b92505050565b5060010180546001600160a81b03191660ff60a01b1790559392505050565b606083600881901b61376c82600160f81b6107d7565b156137ef57843585016020810190356137868360006107d7565b1561379c5761379582826147b9565b9450613621565b6137aa83600160f81b6107d7565b156137b9576137958282614889565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606401610a13565b6137fa8260006107d7565b156139285760008036600061380f89896149b6565b6040805160018082528183019092529498509296509094509250816020015b606081526020019060019003908161382e579050509650600061385186826107d7565b156138855761386285858585614a07565b8860008151811061387557613875615d93565b602002602001018190525061391e565b61389386600160f81b6107d7565b156137b9576138a485858585614a3d565b896000815181106138b7576138b7615d93565b602090810291909101015290508061391e577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb76000896000815181106138ff576138ff615d93565b6020026020010151604051613915929190615dcc565b60405180910390a15b50505050506123df565b61393a826001600160f81b03196107d7565b156137b957600061394e60148287896159a2565b61395791615a8f565b60601c905036600061396c876014818b6159a2565b9150915061391e83838361083e565b6001600160a01b038316158061399a57506001600160a01b0383166001145b156139a457505050565b6001600160f81b031982826000816139be576139be615d93565b9050013560f81c60f81b6001600160f81b0319160361331357611151836139e883600181876159a2565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061345b92505050565b6000613a2c6128ad565b90508235830160208101903560fe811180613a45575080155b15613a635760405163b62d956d60e01b815260040160405180910390fd5b6001600160e01b03198616600090815260038401602052604090206001015415613ab1576001600160e01b0319861660009081526003840160205260408120613ab19160019091019061507a565b60005b6000198201811015613c43576001600160e01b0319871660009081526003850160205260409020600101838383818110613af057613af0615d93565b9050602002810190613b029190615a49565b613b11916016916000916159a2565b613b1a91615de5565b81546001810183556000928352602090922090910180546001600160b01b03191660509290921c919091179055828282818110613b5957613b59615d93565b9050602002810190613b6b9190615a49565b613b7a916016916002916159a2565b613b8391615a8f565b60601c636d61fe706001600160e01b03198916858585818110613ba857613ba8615d93565b9050602002810190613bba9190615a49565b613bc89160169082906159a2565b604051602001613bda93929190615e16565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613c0591906156ea565b600060405180830381600087803b158015613c1f57600080fd5b505af1158015613c33573d6000803e3d6000fd5b505060019092019150613ab49050565b50600082826000198101818110613c5c57613c5c615d93565b9050602002810190613c6e9190615a49565b613c7d916016916002916159a2565b613c8691615a8f565b6001600160e01b031988166000908152600386016020526040902080546201000060609390931c92830262010000600160b01b0319909116179055905082826000198101818110613cd957613cd9615d93565b9050602002810190613ceb9190615a49565b613cfa916002916000916159a2565b613d0391615e30565b6001600160e01b0319881660008181526003870160205260409020805461ffff191660f09390931c929092179091556001600160a01b03821690636d61fe709085856000198101818110613d5957613d59615d93565b9050602002810190613d6b9190615a49565b613d799160169082906159a2565b604051602001613d8b93929190615e16565b6040516020818303038152906040526040518263ffffffff1660e01b8152600401613db691906156ea565b600060405180830381600087803b158015613dd057600080fd5b505af1158015613de4573d6000803e3d6000fd5b5050505050505050505050565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416613ee45750604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000009181019190915246606082015230608082015260a090205b67190100000000000060005280601a5281603a52604260182090506000603a52919050565b60008036600080613f186128ad565b60408051610120810182526000808252602082018190529181018290526080810182905260a0810191909152606060c082018190526001600160e01b03198d16908201526001600160a01b038b1660e082015261010081018a9052909150613f8281838a8a614a6e565b87876000818110613f9557613f95615d93565b9091013560f81c60ff149050613fbe5760405163b32eeb6960e01b815260040160405180910390fd5b613fcb876001818b6159a2565b60608301516001600160e01b0319166000908152600394909401602052604093849020549390920151620100009093046001600160a01b03169c929b509950975095505050505050565b600060a082901c65ffffffffffff16828115600019810161403a5765ffffffffffff92505b508360d01c92509193909250565b6000366000806140566128ad565b905060003660006140688a8a8a614cdb565b8654929550909350915060581b600061408582600160f81b6107d7565b15614111578554604051637aa8f17760e11b81526001600160a81b038216916001600160a01b03169063f551e2ee906140c89030908a908a908a906004016159fa565b602060405180830381865afa1580156140e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141099190615a2c565b9150506141c7565b61411f82600160f91b6107d7565b15612acf57855460601b60006141388230898989613f09565b60405163392dffaf60e01b8152929e5090985096509091506001600160a01b0382169063392dffaf90614181906001600160e01b031986169030908c908c908c90600401615ad6565b602060405180830381865afa15801561419e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141c29190615a2c565b925050505b630b135d3f60e11b6001600160e01b03198216146141f8576040516362467c7760e11b815260040160405180910390fd5b50969a60948a0135909901603481019a506014013598975050505050505050565b600081830160601b8260601b81148460601b8214176001600160a01b038486181615176001811461424d57600192506142cf565b6001600160d01b031980851690861681811881831102188686176001600160a01b031617935065ffffffffffff60a01b861690816142925765ffffffffffff60a01b91505b5065ffffffffffff60a01b8516806142b0575065ffffffffffff60a01b5b8082189082110218806142c9575065ffffffffffff60a01b5b92909217915b505092915050565b60008060006142e46128ad565b6001600160e01b03198816600090815260038201602052604081209192506001909101905b81548110156144fb5760008061434284848154811061432a5761432a615d93565b60009182526020909120015460501b90605082901c90565b9150915060008989600081811061435b5761435b615d93565b919091013560f81c9150508381036143ee57600061437d600960018c8e6159a2565b61438691615e5e565b60c01c905061439b6009808301908c8e6159a2565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101008d01526143e48a60098301818e6159a2565b9a509a5050614428565b838160ff16101561441257604051630760bdcf60e11b815260040160405180910390fd5b6040805160208101909152600081526101008c01525b600160f01b83166000036144f0576000826001600160a01b0316637129edce8e6001600160e01b0319168e6040518363ffffffff1660e01b8152600401614470929190615e8c565b6020604051808303816000875af115801561448f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906144b39190615d17565b9050806001600160a01b038116156144e157604051631f24c1fb60e11b815260048101879052602401610a13565b6144eb8a83614219565b995050505b505050600101614309565b508585600081811061450f5761450f615d93565b9091013560f81c60ff1490506145385760405163b32eeb6960e01b815260040160405180910390fd5b61454585600181896159a2565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052506101008c01949094525050506001600160e01b03198916815260039092016020525060409020546001600160a01b036201000090910416905094509492505050565b6000606060008060008661ffff166001600160401b038111156145dc576145dc6154f9565b6040519080825280601f01601f191660200182016040528015614606576020820181803683370190505b5090506000808751602089018b8e8ef191503d925086831115614627578692505b828152826000602083013e90999098509650505050505050565b8135820160208101903560006146556128ad565b6001600160e01b031987166000908152600391909101602052604090206001808201549192506146859190615ea5565b82146146a45760405163013dcc8d60e31b815260040160405180910390fd5b6001810160005b81548110156147315760006146cb83838154811061432a5761432a615d93565b915050614727818a6001600160e01b0319168888868181106146ef576146ef615d93565b90506020028101906147019190615a49565b60405160200161471393929190615e16565b60405160208183030381529060405261345b565b50506001016146ab565b5061473a6128ad565b6001600160e01b031988166000908152600391909101602052604081206147669160019091019061507a565b81546147a2906201000090046001600160a01b03166001600160e01b031989168686614793600182615eb8565b8181106146ef576146ef615d93565b505080546001600160b01b03191690555050505050565b606081806001600160401b038111156147d4576147d46154f9565b60405190808252806020026020018201604052801561480757816020015b60608152602001906001900390816147f25790505b50915060005b818110156142cf573685858381811061482857614828615d93565b905060200281019061483a9190615ecb565b905061486361484c6020830183615301565b602083013561485e6040850185615a49565b614a07565b84838151811061487557614875615d93565b60209081029190910101525060010161480d565b606081806001600160401b038111156148a4576148a46154f9565b6040519080825280602002602001820160405280156148d757816020015b60608152602001906001900390816148c25790505b50915060005b818110156142cf57368585838181106148f8576148f8615d93565b905060200281019061490a9190615ecb565b9050600061493561491e6020840184615301565b60208401356149306040860186615a49565b614a3d565b86858151811061494757614947615d93565b60209081029190910101529050806149ac577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb78386858151811061498d5761498d615d93565b60200260200101516040516149a3929190615dcc565b60405180910390a15b50506001016148dd565b60008036816149c860148287896159a2565b6149d191615a8f565b60601c93506149e46034601487896159a2565b6149ed91615eeb565b92506149fc85603481896159a2565b949793965094505050565b60405181838237600038838387895af1614a24573d6000823e3d81fd5b3d8152602081013d6000823e3d01604052949350505050565b604051600090828482376000388483888a5af191503d8152602081013d6000823e3d81016040525094509492505050565b60608401516001600160e01b03191660009081526003840160205260408120600101905b81548110156115e057614ab082828154811061432a5761432a615d93565b6001600160a01b031660a08801526001600160f01b03191660808701528383600081614ade57614ade615d93565b919091013560f81c8088528290039050614b7b57614b006009600185876159a2565b614b0991615e5e565b60c01c60208701819052614b249060099081019085876159a2565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701526020860151614b7290849060090181876159a2565b93509350614be7565b855160ff16811115614ba057604051630760bdcf60e11b815260040160405180910390fd5b614bad60008085876159a2565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060c08701525b6080860151600160f11b16600003614cd35760a0860151606087015160e088015161010089015160c08a015160405163184dfdbb60e11b81526000956001600160a01b03169463309bfb7694614c4e946001600160e01b0319909216939092600401615f09565b602060405180830381865afa158015614c6b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614c8f9190615d17565b9050806001600160a01b03811615614cbd57604051631f24c1fb60e11b815260048101849052602401610a13565b614ccb886040015183614219565b604089015250505b600101614a92565b60003660008036600036600036600080614cf68e8e8e614d65565b9750975097509750975097509750975060748d013560348e0101995060208a03359850614d278e89898989896130ad565b614d318383614f1a565b614d538e614d436004600086886159a2565b614d4c916159cc565b6001614fe7565b99505050505050505093509350939050565b6040805180820190915260008082526020820152366000366000366000806000614d8d6128ad565b9050614d9d601460008c8e6159a2565b614da691615a8f565b60601c89602001906001600160a01b031690816001600160a01b0316815250508060000160159054906101000a900463ffffffff16896000019063ffffffff16908163ffffffff168152505060148b013560348c010197506020880335965060348b013560348c010195506020860335945060548b013560348c0101935060208403359250614f0a7fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c50560001b8d8360000160159054906101000a900463ffffffff168c602001518c8c604051614e7d929190615f36565b60405180910390208b8b604051614e95929190615f36565b60405180910390208a8a604051614ead929190615f36565b6040805191829003822060208301989098526001600160581b03199096169581019590955263ffffffff90931660608501526001600160a01b03909116608084015260a083015260c082015260e081019190915261010001612b91565b9150509397509397509397509397565b6000614f2960048284866159a2565b614f32916159cc565b90506004821061331357602c8210614fa057602c838101358401604c818101929182013591818701358701918201910135614f8f85614f75601860048a8c6159a2565b614f7e91615a8f565b60601c611a67602c60188b8d6159a2565b6126ae611a8b602c6018898b6159a2565b600482146133135760405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606401610a13565b6000614ff16128ad565b6001600160581b03198516600081815260028301602090815260408083206001600160e01b0319891680855290835292819020805488151560ff1990911681179091558151938452918301939093528183015290519192507f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a919081900360600190a150505050565b5080546000825590600052602060002090810190615098919061509b565b50565b5b808211156150b0576000815560010161509c565b5090565b6001600160a01b038116811461509857600080fd5b80356128a8816150b4565b60008083601f8401126150e657600080fd5b5081356001600160401b038111156150fd57600080fd5b60208301915083602082850101111561511557600080fd5b9250929050565b6000806000806060858703121561513257600080fd5b843593506020850135615144816150b4565b925060408501356001600160401b0381111561515f57600080fd5b61516b878288016150d4565b95989497509550505050565b80356001600160581b0319811681146128a857600080fd5b600080600080600080608087890312156151a857600080fd5b6151b187615177565b955060208701356151c1816150b4565b945060408701356001600160401b03808211156151dd57600080fd5b6151e98a838b016150d4565b9096509450606089013591508082111561520257600080fd5b5061520f89828a016150d4565b979a9699509497509295939492505050565b60008060006040848603121561523657600080fd5b8335925060208401356001600160401b0381111561525357600080fd5b61525f868287016150d4565b9497909650939450505050565b6000610120828403121561527f57600080fd5b50919050565b60008060006060848603121561529a57600080fd5b83356001600160401b038111156152b057600080fd5b6152bc8682870161526c565b9660208601359650604090950135949350505050565b803563ffffffff811681146128a857600080fd5b6000602082840312156152f857600080fd5b610c73826152d2565b60006020828403121561531357600080fd5b8135610c73816150b4565b6001600160e01b03198116811461509857600080fd5b60006020828403121561534657600080fd5b8135610c738161531e565b6000806040838503121561536457600080fd5b61536d83615177565b9150602083013561537d8161531e565b809150509250929050565b60005b838110156153a357818101518382015260200161538b565b50506000910152565b600081518084526153c4816020860160208601615388565b601f01601f19169290920160200192915050565b60ff60f81b881681526000602060e060208401526153f960e084018a6153ac565b838103604085015261540b818a6153ac565b606085018990526001600160a01b038816608086015260a0850187905284810360c08601528551808252602080880193509091019060005b8181101561545f57835183529284019291840191600101615443565b50909c9b505050505050505050505050565b6000806040838503121561548457600080fd5b82356001600160401b0381111561549a57600080fd5b6154a68582860161526c565b95602094909401359450505050565b60008083601f8401126154c757600080fd5b5081356001600160401b038111156154de57600080fd5b6020830191508360208260051b850101111561511557600080fd5b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b0381118282101715615531576155316154f9565b60405290565b60405161012081016001600160401b0381118282101715615531576155316154f9565b604051601f8201601f191681016001600160401b0381118282101715615582576155826154f9565b604052919050565b60008060008060008060006080888a0312156155a557600080fd5b6001600160401b0380893511156155bb57600080fd5b6155c88a8a358b016154b5565b90985096506020890135818111156155df57600080fd5b8901601f81018b136155f057600080fd5b803582811115615602576156026154f9565b61561160208260051b0161555a565b8082825260208201915060208360061b85010192508d83111561563357600080fd5b6020840193505b8284101561568f576040848f03121561565257600080fd5b61565a61550f565b615663856152d2565b81526020850135615673816150b4565b806020830152508083525060208201915060408401935061563a565b98505050506040890135818111156156a657600080fd5b6156b28b828c016154b5565b9096509450506060890135818111156156ca57600080fd5b6156d68b828c016154b5565b999c989b5096995094979396939450505050565b602081526000610c7360208301846153ac565b60006020828403121561570f57600080fd5b610c7382615177565b60006020828403121561572a57600080fd5b5035919050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561578857603f198886030184526157768583516153ac565b9450928501929085019060010161575a565b5092979650505050505050565b602080825282516001600160f01b03191682820152828101516001600160a01b031660408084019190915283015160608084015280516080840181905260009291820190839060a08601905b8083101561580e57835169ffffffffffffffffffff191682529284019260019290920191908401906157e1565b509695505050505050565b60008060008060006060868803121561583157600080fd5b61583a86615177565b945060208601356001600160401b038082111561585657600080fd5b61586289838a016150d4565b9096509450604088013591508082111561587b57600080fd5b50615888888289016150d4565b969995985093965092949392505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0384168152604060208201819052600090612ca39083018486615899565b60006001600160401b03821115615900576159006154f9565b50601f01601f191660200190565b60006020828403121561592057600080fd5b81516001600160401b0381111561593657600080fd5b8201601f8101841361594757600080fd5b805161595a615955826158e7565b61555a565b81815285602083850101111561596f57600080fd5b612ca3826020830160208601615388565b60006020828403121561599257600080fd5b81518015158114610c7357600080fd5b600080858511156159b257600080fd5b838611156159bf57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156142cf5760049490940360031b84901b1690921692915050565b60018060a01b0385168152836020820152606060408201526000615a22606083018486615899565b9695505050505050565b600060208284031215615a3e57600080fd5b8151610c738161531e565b6000808335601e19843603018112615a6057600080fd5b8301803591506001600160401b03821115615a7a57600080fd5b60200191503681900382131561511557600080fd5b6bffffffffffffffffffffffff1981358181169160148510156142cf5760149490940360031b84901b1690921692915050565b6020815260006107cf602083018486615899565b85815260018060a01b0385166020820152836040820152608060608201526000615b04608083018486615899565b979650505050505050565b600082601f830112615b2057600080fd5b8135615b2e615955826158e7565b818152846020838601011115615b4357600080fd5b816020850160208301376000918101602001919091529392505050565b60006101208236031215615b7357600080fd5b615b7b615537565b615b84836150c9565b81526020830135602082015260408301356001600160401b0380821115615baa57600080fd5b615bb636838701615b0f565b60408401526060850135915080821115615bcf57600080fd5b615bdb36838701615b0f565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e0850135915080821115615c1257600080fd5b615c1e36838701615b0f565b60e084015261010091508185013581811115615c3957600080fd5b615c4536828801615b0f565b8385015250505080915050919050565b80516001600160a01b031682526000610120602083015160208501526040830151816040860152615c88828601826153ac565b91505060608301518482036060860152615ca282826153ac565b9150506080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152615cda82826153ac565b9150506101008084015185830382870152615a2283826153ac565b604081526000615d086040830185615c55565b90508260208301529392505050565b600060208284031215615d2957600080fd5b5051919050565b838152606060208201526000615d496060830185615c55565b9050826040830152949350505050565b634e487b7160e01b600052601160045260246000fd5b63ffffffff818116838216019080821115615d8c57615d8c615d59565b5092915050565b634e487b7160e01b600052603260045260246000fd5b600063ffffffff808316818103615dc257615dc2615d59565b6001019392505050565b8281526040602082015260006107cf60408301846153ac565b69ffffffffffffffffffff1981358181169160168510156142cf5760169490940360031b84901b1690921692915050565b838152818360208301376000910160200190815292915050565b6001600160f01b031981358181169160028510156142cf5760029490940360031b84901b1690921692915050565b6001600160c01b031981358181169160088510156142cf5760089490940360031b84901b1690921692915050565b8281526040602082015260006107cf6040830184615c55565b808201808211156107e8576107e8615d59565b818103818111156107e8576107e8615d59565b60008235605e19833603018112615ee157600080fd5b9190910192915050565b803560208310156107e857600019602084900360031b1b1692915050565b84815260018060a01b0384166020820152826040820152608060608201526000615a2260808301846153ac565b8183823760009101908152919050560000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x31", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xecc3c51ae1323f38365dcd10c63bd5d81722373c346863b2ac283fd17aa1cd89", + "transactionType": "CREATE", + "contractName": "KernelFactory", + "contractAddress": "0x24beDBabCb63b04E0042a4e39d322577766726EA", + "function": null, + "arguments": [ + "0xe59cffb45AFFB215e3823F7D1a207a71C1aa09c3" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "gas": "0x5b920", + "value": "0x0", + "data": "0x60a060405234801561001057600080fd5b506040516104d33803806104d383398101604081905261002f91610040565b6001600160a01b0316608052610070565b60006020828403121561005257600080fd5b81516001600160a01b038116811461006957600080fd5b9392505050565b60805161043c6100976000396000818160870152818160f10152610159015261043c6000f3fe6080604052600436106100345760003560e01c806348aac392146100395780635c60da1b14610075578063ea6d13ac146100a9575b600080fd5b34801561004557600080fd5b506100596100543660046103a2565b6100bc565b6040516001600160a01b03909116815260200160405180910390f35b34801561008157600080fd5b506100597f000000000000000000000000000000000000000000000000000000000000000081565b6100596100b73660046103a2565b610120565b6000808484846040516020016100d49392919061041a565b6040516020818303038152906040528051906020012090506101177f00000000000000000000000000000000000000000000000000000000000000008230610213565b95945050505050565b6000808484846040516020016101389392919061041a565b60405160208183030381529060405280519060200120905060008061017e347f00000000000000000000000000000000000000000000000000000000000000008561029c565b9150915081610209576000816001600160a01b031688886040516101a392919061042c565b6000604051808303816000865af19150503d80600081146101e0576040519150601f19603f3d011682016040523d82523d6000602084013e6101e5565b606091505b50509050806102075760405163487e630960e11b815260040160405180910390fd5b505b9695505050505050565b60008061028f85604080517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f360609081527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e20768352616009602052601e9390935268603d3d8160223d3973600a52605f6021209152600090915290565b9050610117818585610380565b6000806040517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e207660405261600960205284601e5268603d3d8160223d3973600a52605f60212060358201523060581b815260ff8153836015820152605581209150813b6103485783605f602188f59150816103435763301164256000526004601cfd5b61036e565b60019250851561036e5760003860003889865af161036e5763b12d13eb6000526004601cfd5b80604052506000606052935093915050565b600060ff60005350603592835260601b60015260155260556000908120915290565b6000806000604084860312156103b757600080fd5b833567ffffffffffffffff808211156103cf57600080fd5b818601915086601f8301126103e357600080fd5b8135818111156103f257600080fd5b87602082850101111561040457600080fd5b6020928301989097509590910135949350505050565b82848237909101908152602001919050565b818382376000910190815291905056000000000000000000000000e59cffb45affb215e3823f7d1a207a71c1aa09c3", + "nonce": "0x32", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x5dac929c7b2d9575830cb2498aa1a4cd7a4a40a62a018ccbcbc8c7fa5c23f241", + "transactionType": "CALL", + "contractName": "FactoryStaker", + "contractAddress": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x24beDBabCb63b04E0042a4e39d322577766726EA", + "true" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0xfa0a", + "value": "0x0", + "data": "0x6e7dbabb00000000000000000000000024bedbabcb63b04e0042a4e39d322577766726ea0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x33", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0x710c7e453988a351631693916c8ba9f05966a24efaaa1c133f1767135868f9c8", + "transactionIndex": "0x7", + "blockHash": "0xf6413e86459668c4af471fb75ff216816e92a4eb6bae01d1f37de0dd5e810895", + "blockNumber": "0x564bfb", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0xe4435", + "gasUsed": "0x76534", + "contractAddress": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "logs": [ + { + "address": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0xf6413e86459668c4af471fb75ff216816e92a4eb6bae01d1f37de0dd5e810895", + "blockNumber": "0x564bfb", + "transactionHash": "0x710c7e453988a351631693916c8ba9f05966a24efaaa1c133f1767135868f9c8", + "transactionIndex": "0x7", + "logIndex": "0x7", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000001020000000004000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000080000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2e6a0a3" + }, + { + "transactionHash": "0x2b56a22f73c5bce6917093ede70e05f97a800c4da77168977308a4b4911d33f3", + "transactionIndex": "0x9", + "blockHash": "0xf6413e86459668c4af471fb75ff216816e92a4eb6bae01d1f37de0dd5e810895", + "blockNumber": "0x564bfb", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", + "cumulativeGasUsed": "0x60c911", + "gasUsed": "0x51c6b8", + "contractAddress": "0xe59cffb45AFFB215e3823F7D1a207a71C1aa09c3", + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2e6a0a3" + }, + { + "transactionHash": "0xecc3c51ae1323f38365dcd10c63bd5d81722373c346863b2ac283fd17aa1cd89", + "transactionIndex": "0xa", + "blockHash": "0xf6413e86459668c4af471fb75ff216816e92a4eb6bae01d1f37de0dd5e810895", + "blockNumber": "0x564bfb", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": null, + "cumulativeGasUsed": "0x653066", + "gasUsed": "0x46755", + "contractAddress": "0x24beDBabCb63b04E0042a4e39d322577766726EA", + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2e6a0a3" + }, + { + "transactionHash": "0x5dac929c7b2d9575830cb2498aa1a4cd7a4a40a62a018ccbcbc8c7fa5c23f241", + "transactionIndex": "0xb", + "blockHash": "0xf6413e86459668c4af471fb75ff216816e92a4eb6bae01d1f37de0dd5e810895", + "blockNumber": "0x564bfb", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "cumulativeGasUsed": "0x65e56d", + "gasUsed": "0xb507", + "contractAddress": null, + "logs": [], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2e6a0a3" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712595823, + "chain": 11155111, + "commit": "2ed1bf4" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/11155111/run-1712597270.json b/broadcast/Deploy.s.sol/11155111/run-1712597270.json new file mode 100644 index 00000000..3b42784a --- /dev/null +++ b/broadcast/Deploy.s.sol/11155111/run-1712597270.json @@ -0,0 +1,66 @@ +{ + "transactions": [ + { + "hash": "0xd4371d9913bac7d8f71709c88990c7c2a9e879beb024ce1a1e425184053d23c0", + "transactionType": "CALL", + "contractName": "FactoryStaker", + "contractAddress": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "type": "0x02", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "data": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x36", + "accessList": [] + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "transactionHash": "0xd4371d9913bac7d8f71709c88990c7c2a9e879beb024ce1a1e425184053d23c0", + "transactionIndex": "0x1b", + "blockHash": "0xe3a8b76fd29cec09b8089de169c90f56be68a61da0f69d2f516cde482fdf4e88", + "blockNumber": "0x564c79", + "from": "0x9775137314fE595c943712B0b336327dfa80aE8A", + "to": "0xd703aaE79538628d27099B8c4f621bE4CCd142d5", + "cumulativeGasUsed": "0x4f5a35", + "gasUsed": "0xed9b", + "contractAddress": null, + "logs": [ + { + "address": "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xe3a8b76fd29cec09b8089de169c90f56be68a61da0f69d2f516cde482fdf4e88", + "blockNumber": "0x564c79", + "transactionHash": "0xd4371d9913bac7d8f71709c88990c7c2a9e879beb024ce1a1e425184053d23c0", + "transactionIndex": "0x1b", + "logIndex": "0x50", + "removed": false + } + ], + "status": "0x1", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x2", + "effectiveGasPrice": "0xb2d7d848" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712597270, + "chain": 11155111, + "commit": "f6316b3" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/11155111/run-1712840412.json b/broadcast/Deploy.s.sol/11155111/run-1712840412.json new file mode 100644 index 00000000..dd1d70db --- /dev/null +++ b/broadcast/Deploy.s.sol/11155111/run-1712840412.json @@ -0,0 +1,81 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x701810859d77cdba314b27302996fdbc35edfa45", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee6c1", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520d38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcc928362000241843960805183614094015260a051836140b7015260c05183614129015260e0518361414f0152518261407301525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fac8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fac833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d81565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f66565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fac8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fac8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fac8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310d565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310d565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ed565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613339565b92909115610d7d5761001b93613360565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b7565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fac8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fac8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ee565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613233565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fac8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d38565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c87565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fac8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613429565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613429565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fac8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136b0565b603460148301359201906135e3565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613497565b611a46565b6018860135956038019491612274565b6135e3565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a2565b600284036125c9576121f993506001600160a01b0316613858565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fe565b91926004810361267e57506121f99261264b91612624600080516020614fac8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374f565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fac8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fac8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a2565b613b58565b906121f992916139ee565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb5565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b61292993613360565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613312565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613233565b91386128aa565b6001600160a01b03166000908152600080516020614f8c8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fac8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fac83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf4565b612b7a926135e3565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fac833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4c5780600114612c3f57600214612c295760206000fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca694612c9a91858585613f54565b94929391969096614048565b509065ffffffffffff8091164210918215612d2c575b5050612d1957612cfa612cd0602096612d38565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5c565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbc565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7981610e5c565b519020614071565b90818060081b9160ff839260f01c16600214612d9957565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd8610ef7565b92612de2816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e10918401612da8565b604086015260608201358381116101d35781612e2d918401612da8565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e68918401612da8565b60e086015261010092838301359081116101d357612e869201612da8565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f19612ee9612ed761012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f4a906040928652606060208701526060860190612e9b565b930152565b929190612f4a602091604086526040860190612e9b565b929092600092612f763682612dc3565b916101009182810191612f898383611f2a565b90949093600160f81b936001600160f81b031993841685146130d2575b505050871603613033575050604051639700320360e01b815293602092859283916000918391612fd99160048401612f4f565b039260581c6001600160a01b03165af190811561089057611d7d92600092613002575b5061456f565b61302591925060203d60201161302c575b61301d8183610ec9565b810190612e8c565b9038612ffc565b503d613013565b909460081b93909291600160f01b613050611eae611ea788611d30565b166130c057600061307161306b60209661309b99858a61436f565b9461456f565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2d565b03926001600160a01b03165af190811561089057611d7d92600092613002575061456f565b6040516314b9743f60e01b8152600490fd5b909195506130ee9398506130e7929450611f2a565b9088614185565b969192909361310185899599369161254d565b90860152388080612fa6565b600080516020614fac83398151915280549163ffffffff92600a848260a81c1601908482116131d75782851691851682116131c55760c81c84161015612b8257600080516020614fac833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131935750565b600080516020614fac833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f981610e92565b600681526512d95c9b995b60d21b60208201529060405161321981610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a357505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132de95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fd575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a3600080946133bc60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cd5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f95760200190565b6133d6565b80518210156133f95760209160051b010190565b908210156133f95761024d9160051b810190611f2a565b96959192939694909460005b86811061344757505050505050509050565b806134888a60019360051b85013561345e81610277565b6134748461346c818c6133fe565b51938c613412565b90613480868b8b613412565b949093612a14565b01613435565b90156133f95790565b6001600160a01b039391929190848316156135da575b6134b690611cf8565b946134e26134d56134c7838561348e565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135bb575050908061350492861693611a73565b823b156101d35761352f92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356b61358b936001936101e3986135a8575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b592610e44565b3861354d565b92509250509491940361296a57600161358b9161356b6101e39661354f565b600192506134ad565b6001600160a01b031691821580156136a6575b6136a15760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613682575b501561364d576001600160f81b0319806136426134c7848661348e565b161461364d57505050565b8061365792611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369b915060203d6020116108f8576108ea8183610ec9565b38613625565b505050565b50600183146135f6565b919392916001600160a01b039081841615613735575b166000818152600080516020614f8c8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613731576133bc9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c6565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137af876137a16020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c28c610e77565b828c525193f1943d90816137f5575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d1565b61380e6138419194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8c8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d46138c2600080516020614fac8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e4611c2583611b7a565b936139056138f184611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393e57506121f9929161392c91369161254d565b9060581c6001600160a01b031661374f565b600160f91b141590506103a9576101e39160081b61460a565b60405161396381610e92565b600181528060005b6020808210156139865790606060209282850101520161396b565b50505090565b9061399682610f04565b6139a36040519182610ec9565b82815280926139b4601f1991610f04565b019060005b8281106139c557505050565b8060606020809385010152016139b9565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a8057505050613a27908035019060208201913590565b929093168015600014613a3f575050611d7d91614888565b03613a4d57611d7d916147cb565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2357505090613a979161471f565b93909294613aa3613957565b971680613ac8575050613ab593614770565b613abe836133ec565b526121f9826133ec565b03613a4d57613ad693614747565b613adf846133ec565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1e613b11846133ec565b51604051918291826139d6565b0390a1565b909650919390925003613a4d57613b4e8280613b486122f16122eb613b549787611a57565b93611a90565b91613339565b5050565b6001600160a01b03169081158015613bab575b6136a15782156133f9576001600160f81b03198135811614613b8c57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6b565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0957505050565b6000526020600020918201915b828110613c2257505050565b818155600101613c16565b6001600160501b03199035818116939260168110613c4a57505050565b60160360031b82901b16169150565b80548210156133f95760005260206000200190600090565b805468010000000000000000811015610e5757613c9391600182018155613c59565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce557505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4c575b613f3a57600180613d1b85611d30565b0154613f21575b60001982019260005b848110613e445750613e099594613e17949093613ded9350613de69250613d86613dd7613dbe611eae613db8613db287878e613dad8e613d7e611c626122f16122eb613d78898989613412565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613412565b90611ae9565b90613cc8565b613dc788611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613412565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb2565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373e565b613e9b611c62611c626122f16122eb613d78868a8e613dad8f613e678e91611d30565b01613e95613e88613e82613e7c888888613412565b90611aad565b90613c2d565b6001600160501b03191690565b90613c71565b90613eaa613de682878b613412565b90613ecb604091613e0983519485928d63ffffffff60e01b168a8501613cb2565b833b156101d3576000938492613ef592519586809481936306d61fe760e41b83526004830161373e565b03925af1918215610890578492613f0e575b5001613d2b565b8061088a613f1b92610e44565b38613f07565b613f356001613f2f86611d30565b01613bf5565b613d22565b60405163b62d956d60e01b8152600490fd5b508015613d0b565b8484613fd792613fc2979694989560405191613f6f83610ead565b613fd160009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614921565b60ff80613ff0613fea6134c7878661348e565b60f81c90565b16036140365761401f61400a8461401a9561402f94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614069575b5060d01c92565b925038614062565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fe575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140df565b91929092614191612720565b9061419c9085611a57565b6141a591612274565b60601c60208201819052600080516020614fac8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142169261254d565b80519060200120913661422a90888861254d565b805190602001203661423d908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c961010082610ec9565b5190206142d590614071565b607489013589018d8b82013591016142ec92614b73565b9a6142f79488612a14565b6143018183614d10565b61430a91611a1b565b61431391611b4e565b61431c91614eca565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434957505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9b565b60009493916001868161438185611d30565b016000835b6143ce575b5050505060ff806143a2613fea6134c7878961348e565b1603614036576101006143c66143bf8561401f96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614567576143ff6143f76143ea8385613c59565b90549060031b1c60501b90565b908160501c90565b98909761441b614415613fea6134c7858561348e565b60ff1690565b808403614536575090818161445461444861444261443c8461447198611af7565b9061432c565b60c01c90565b6001600160401b031690565b600901916144666143bf848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448b575b50830183614386565b99866144c8929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614358565b0393165af1958615610890578896614517575b505084166144fd5750506144f385949392859261456f565b9a91929350614482565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452e929650803d1061302c5761301d8183610ec9565b9338806144db565b909991989083111561455457604051630760bdcf60e11b8152600490fd5b61455c6124fa565b610100880152614476565b96959661438b565b6001600160a01b03818318811615606083811b848601821b9081149186901b1417176001146145a057505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614602575b83811680156145fb575b8781109088180280881897146145f3575b508181119082180218921716171790565b9550386145e2565b50806145d1565b9550856145c7565b9190803501916020906020840193359061462381611d30565b9260019060018501906001825401850361470d57906000835b61469f575b5050505061468e9161468982613ded6101e397986146666001613f2f613e0998611d30565b875461467d9060101c6001600160a01b0316611c62565b94600019810191613412565b61374f565b5080546001600160b01b0319169055565b8154811015614708579083826146fe613e098c6146f08a6146d5868e6146cd6143f76143ea8c9f9e8e613c59565b969050613412565b6040519586939092906001600160e01b0319168c8501613cb2565b6001600160a01b031661374f565b500190919261463c565b614641565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479f573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f95760051b81013590605e19813603018212156101d3570190565b9190916147d78361398c565b9260005b8181106147e757505050565b806147f560019284866147a9565b8035614800816101c2565b6148216020809360409361481685830183611f2a565b939092013590614747565b61482b858b6133fe565b521561483a575b5050016147db565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487e614869858b6133fe565b51838051948594888652850152830190610bef565b0390a13880614832565b9190916148948361398c565b9260005b8181106148a457505050565b806148da60206148b760019486886147a9565b80356148c2816101c2565b6148cf6040830183611f2a565b939092013590614770565b6148e482886133fe565b526148ef81876133fe565b5001614898565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161494061401a845163ffffffff60e01b1690565b01936000936000958054965b87811061495e57505050505050505050565b806149706143f76143ea8c9486613c59565b6001600160a01b031660a0880190815260808801959091614999906001600160f01b0319168752565b6149b36149ac613fea6134c78a8561348e565b60ff168952565b6149c1614415895160ff1690565b808403614b3b57508681816149e661444861444261443c614a3a9c9d614a0d98611af7565b60208c018181528c60c0614a026143bf60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2c906001600160f01b031916611eae565b166001600160f01b03191690565b15614a47575b500161494c565b51909150614a5d906001600160a01b0316611c62565b8651614a8190614a74906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac66101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f6565b03915afa938415610890578b94614b1c575b50506001600160a01b038316614b015750860180518b9392614af99161456f565b905238614a40565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b33929450803d1061302c5761301d8183610ec9565b913880614ad8565b839196945010600014614b5a57604051630760bdcf60e11b8152600490fd5b614a3a8b93614b69368861252a565b60c08a0152614a12565b600080516020614fac8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c365750604051637aa8f17760e11b8152936020938593909284928392614bcb923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c17575b505b6001600160e01b0319166374eca2c160e11b01614c0557565b6040516362467c7760e11b8152600490fd5b614c30915060203d602011611e8657611e7e8183610ec9565b38614bea565b919550929190600160f91b036103a957602091614c599160081b95843088613f54565b60405163392dffaf60e01b81529297929586949385938493614c8c93909230906001600160e01b03191660048701612c5c565b03916001600160a01b03165afa90811561089057600091614cae575b50614bec565b614cc7915060203d602011611e8657611e7e8183610ec9565b38614ca8565b15614cd457565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1d6105c98383611a1b565b906004831015614d2c57505050565b602c8310614ebc57614d47611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d81614d736134d56134c7878761348e565b6001600160f81b0319161590565b80614e2b575b94614dc861242895611c6295614dcd956101e39b956122f19a614ddd575b614db8611c626122f16122eb8a8a611b25565b916001600160a01b031690613497565b611b25565b602c86013595604c019491612274565b614e26606c8701358701614e20602c604c830192013580614e07611c626122f16122eb8488611a57565b93614e1b856001600160a01b038a16614f2f565b611a90565b916135e3565b614da5565b5091939092956040519163ecd0596160e01b835260208380614e5560048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcd97614dc895600091614e9d575b50959a50959b5095509550955050614d87565b614eb6915060203d6020116108f8576108ea8183610ec9565b38614e8a565b505060046101e39114614ccd565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efc82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f82575b16600052600080516020614f8c83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4656fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x38", + "chainId": "0xaa36a7", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0xf6b3d3edfce2ae313faffe7d6578dfa1e3d00969", + "function": null, + "arguments": [ + "0x701810859d77CdbA314b27302996fDBC35edFa45" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6010c", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd000000000000000000000000701810859d77cdba314b27302996fdbc35edfa45", + "nonce": "0x39", + "chainId": "0xaa36a7", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": "FactoryStaker", + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0xf6b3d3EdFCe2aE313FAffE7d6578dfa1e3D00969", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb000000000000000000000000f6b3d3edfce2ae313faffe7d6578dfa1e3d009690000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3a", + "chainId": "0xaa36a7", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712840412, + "chain": 11155111, + "commit": "b5e4a4a" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/11155111/run-1712840540.json b/broadcast/Deploy.s.sol/11155111/run-1712840540.json new file mode 100644 index 00000000..ed97f3e4 --- /dev/null +++ b/broadcast/Deploy.s.sol/11155111/run-1712840540.json @@ -0,0 +1,130 @@ +{ + "transactions": [ + { + "hash": "0xc0602c672bb88fd9ca5a5429bfd547e6b2a1001f3955766d8dbb7d4c82b38bd9", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x701810859d77cdba314b27302996fdbc35edfa45", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee6c1", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520d38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcc928362000241843960805183614094015260a051836140b7015260c05183614129015260e0518361414f0152518261407301525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fac8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fac833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d81565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f66565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fac8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fac8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fac8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310d565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310d565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ed565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613339565b92909115610d7d5761001b93613360565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b7565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fac8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fac8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ee565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613233565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fac8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d38565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c87565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fac8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fac8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613429565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613429565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fac8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136b0565b603460148301359201906135e3565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613497565b611a46565b6018860135956038019491612274565b6135e3565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a2565b600284036125c9576121f993506001600160a01b0316613858565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fe565b91926004810361267e57506121f99261264b91612624600080516020614fac8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374f565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fac8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fac8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a2565b613b58565b906121f992916139ee565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb5565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b61292993613360565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613312565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613233565b91386128aa565b6001600160a01b03166000908152600080516020614f8c8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fac8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fac83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf4565b612b7a926135e3565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fac833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4c5780600114612c3f57600214612c295760206000fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca694612c9a91858585613f54565b94929391969096614048565b509065ffffffffffff8091164210918215612d2c575b5050612d1957612cfa612cd0602096612d38565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5c565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbc565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7981610e5c565b519020614071565b90818060081b9160ff839260f01c16600214612d9957565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd8610ef7565b92612de2816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e10918401612da8565b604086015260608201358381116101d35781612e2d918401612da8565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e68918401612da8565b60e086015261010092838301359081116101d357612e869201612da8565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f19612ee9612ed761012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f4a906040928652606060208701526060860190612e9b565b930152565b929190612f4a602091604086526040860190612e9b565b929092600092612f763682612dc3565b916101009182810191612f898383611f2a565b90949093600160f81b936001600160f81b031993841685146130d2575b505050871603613033575050604051639700320360e01b815293602092859283916000918391612fd99160048401612f4f565b039260581c6001600160a01b03165af190811561089057611d7d92600092613002575b5061456f565b61302591925060203d60201161302c575b61301d8183610ec9565b810190612e8c565b9038612ffc565b503d613013565b909460081b93909291600160f01b613050611eae611ea788611d30565b166130c057600061307161306b60209661309b99858a61436f565b9461456f565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2d565b03926001600160a01b03165af190811561089057611d7d92600092613002575061456f565b6040516314b9743f60e01b8152600490fd5b909195506130ee9398506130e7929450611f2a565b9088614185565b969192909361310185899599369161254d565b90860152388080612fa6565b600080516020614fac83398151915280549163ffffffff92600a848260a81c1601908482116131d75782851691851682116131c55760c81c84161015612b8257600080516020614fac833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131935750565b600080516020614fac833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f981610e92565b600681526512d95c9b995b60d21b60208201529060405161321981610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a357505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132de95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fd575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a3600080946133bc60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cd5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f95760200190565b6133d6565b80518210156133f95760209160051b010190565b908210156133f95761024d9160051b810190611f2a565b96959192939694909460005b86811061344757505050505050509050565b806134888a60019360051b85013561345e81610277565b6134748461346c818c6133fe565b51938c613412565b90613480868b8b613412565b949093612a14565b01613435565b90156133f95790565b6001600160a01b039391929190848316156135da575b6134b690611cf8565b946134e26134d56134c7838561348e565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135bb575050908061350492861693611a73565b823b156101d35761352f92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356b61358b936001936101e3986135a8575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b592610e44565b3861354d565b92509250509491940361296a57600161358b9161356b6101e39661354f565b600192506134ad565b6001600160a01b031691821580156136a6575b6136a15760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613682575b501561364d576001600160f81b0319806136426134c7848661348e565b161461364d57505050565b8061365792611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369b915060203d6020116108f8576108ea8183610ec9565b38613625565b505050565b50600183146135f6565b919392916001600160a01b039081841615613735575b166000818152600080516020614f8c8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613731576133bc9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c6565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137af876137a16020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c28c610e77565b828c525193f1943d90816137f5575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d1565b61380e6138419194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8c8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d46138c2600080516020614fac8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e4611c2583611b7a565b936139056138f184611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393e57506121f9929161392c91369161254d565b9060581c6001600160a01b031661374f565b600160f91b141590506103a9576101e39160081b61460a565b60405161396381610e92565b600181528060005b6020808210156139865790606060209282850101520161396b565b50505090565b9061399682610f04565b6139a36040519182610ec9565b82815280926139b4601f1991610f04565b019060005b8281106139c557505050565b8060606020809385010152016139b9565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a8057505050613a27908035019060208201913590565b929093168015600014613a3f575050611d7d91614888565b03613a4d57611d7d916147cb565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2357505090613a979161471f565b93909294613aa3613957565b971680613ac8575050613ab593614770565b613abe836133ec565b526121f9826133ec565b03613a4d57613ad693614747565b613adf846133ec565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1e613b11846133ec565b51604051918291826139d6565b0390a1565b909650919390925003613a4d57613b4e8280613b486122f16122eb613b549787611a57565b93611a90565b91613339565b5050565b6001600160a01b03169081158015613bab575b6136a15782156133f9576001600160f81b03198135811614613b8c57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6b565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0957505050565b6000526020600020918201915b828110613c2257505050565b818155600101613c16565b6001600160501b03199035818116939260168110613c4a57505050565b60160360031b82901b16169150565b80548210156133f95760005260206000200190600090565b805468010000000000000000811015610e5757613c9391600182018155613c59565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce557505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4c575b613f3a57600180613d1b85611d30565b0154613f21575b60001982019260005b848110613e445750613e099594613e17949093613ded9350613de69250613d86613dd7613dbe611eae613db8613db287878e613dad8e613d7e611c626122f16122eb613d78898989613412565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613412565b90611ae9565b90613cc8565b613dc788611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613412565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb2565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373e565b613e9b611c62611c626122f16122eb613d78868a8e613dad8f613e678e91611d30565b01613e95613e88613e82613e7c888888613412565b90611aad565b90613c2d565b6001600160501b03191690565b90613c71565b90613eaa613de682878b613412565b90613ecb604091613e0983519485928d63ffffffff60e01b168a8501613cb2565b833b156101d3576000938492613ef592519586809481936306d61fe760e41b83526004830161373e565b03925af1918215610890578492613f0e575b5001613d2b565b8061088a613f1b92610e44565b38613f07565b613f356001613f2f86611d30565b01613bf5565b613d22565b60405163b62d956d60e01b8152600490fd5b508015613d0b565b8484613fd792613fc2979694989560405191613f6f83610ead565b613fd160009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614921565b60ff80613ff0613fea6134c7878661348e565b60f81c90565b16036140365761401f61400a8461401a9561402f94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614069575b5060d01c92565b925038614062565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fe575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140df565b91929092614191612720565b9061419c9085611a57565b6141a591612274565b60601c60208201819052600080516020614fac8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142169261254d565b80519060200120913661422a90888861254d565b805190602001203661423d908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c961010082610ec9565b5190206142d590614071565b607489013589018d8b82013591016142ec92614b73565b9a6142f79488612a14565b6143018183614d10565b61430a91611a1b565b61431391611b4e565b61431c91614eca565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434957505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9b565b60009493916001868161438185611d30565b016000835b6143ce575b5050505060ff806143a2613fea6134c7878961348e565b1603614036576101006143c66143bf8561401f96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614567576143ff6143f76143ea8385613c59565b90549060031b1c60501b90565b908160501c90565b98909761441b614415613fea6134c7858561348e565b60ff1690565b808403614536575090818161445461444861444261443c8461447198611af7565b9061432c565b60c01c90565b6001600160401b031690565b600901916144666143bf848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448b575b50830183614386565b99866144c8929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614358565b0393165af1958615610890578896614517575b505084166144fd5750506144f385949392859261456f565b9a91929350614482565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452e929650803d1061302c5761301d8183610ec9565b9338806144db565b909991989083111561455457604051630760bdcf60e11b8152600490fd5b61455c6124fa565b610100880152614476565b96959661438b565b6001600160a01b03818318811615606083811b848601821b9081149186901b1417176001146145a057505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614602575b83811680156145fb575b8781109088180280881897146145f3575b508181119082180218921716171790565b9550386145e2565b50806145d1565b9550856145c7565b9190803501916020906020840193359061462381611d30565b9260019060018501906001825401850361470d57906000835b61469f575b5050505061468e9161468982613ded6101e397986146666001613f2f613e0998611d30565b875461467d9060101c6001600160a01b0316611c62565b94600019810191613412565b61374f565b5080546001600160b01b0319169055565b8154811015614708579083826146fe613e098c6146f08a6146d5868e6146cd6143f76143ea8c9f9e8e613c59565b969050613412565b6040519586939092906001600160e01b0319168c8501613cb2565b6001600160a01b031661374f565b500190919261463c565b614641565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479f573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f95760051b81013590605e19813603018212156101d3570190565b9190916147d78361398c565b9260005b8181106147e757505050565b806147f560019284866147a9565b8035614800816101c2565b6148216020809360409361481685830183611f2a565b939092013590614747565b61482b858b6133fe565b521561483a575b5050016147db565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487e614869858b6133fe565b51838051948594888652850152830190610bef565b0390a13880614832565b9190916148948361398c565b9260005b8181106148a457505050565b806148da60206148b760019486886147a9565b80356148c2816101c2565b6148cf6040830183611f2a565b939092013590614770565b6148e482886133fe565b526148ef81876133fe565b5001614898565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161494061401a845163ffffffff60e01b1690565b01936000936000958054965b87811061495e57505050505050505050565b806149706143f76143ea8c9486613c59565b6001600160a01b031660a0880190815260808801959091614999906001600160f01b0319168752565b6149b36149ac613fea6134c78a8561348e565b60ff168952565b6149c1614415895160ff1690565b808403614b3b57508681816149e661444861444261443c614a3a9c9d614a0d98611af7565b60208c018181528c60c0614a026143bf60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2c906001600160f01b031916611eae565b166001600160f01b03191690565b15614a47575b500161494c565b51909150614a5d906001600160a01b0316611c62565b8651614a8190614a74906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac66101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f6565b03915afa938415610890578b94614b1c575b50506001600160a01b038316614b015750860180518b9392614af99161456f565b905238614a40565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b33929450803d1061302c5761301d8183610ec9565b913880614ad8565b839196945010600014614b5a57604051630760bdcf60e11b8152600490fd5b614a3a8b93614b69368861252a565b60c08a0152614a12565b600080516020614fac8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c365750604051637aa8f17760e11b8152936020938593909284928392614bcb923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c17575b505b6001600160e01b0319166374eca2c160e11b01614c0557565b6040516362467c7760e11b8152600490fd5b614c30915060203d602011611e8657611e7e8183610ec9565b38614bea565b919550929190600160f91b036103a957602091614c599160081b95843088613f54565b60405163392dffaf60e01b81529297929586949385938493614c8c93909230906001600160e01b03191660048701612c5c565b03916001600160a01b03165afa90811561089057600091614cae575b50614bec565b614cc7915060203d602011611e8657611e7e8183610ec9565b38614ca8565b15614cd457565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1d6105c98383611a1b565b906004831015614d2c57505050565b602c8310614ebc57614d47611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d81614d736134d56134c7878761348e565b6001600160f81b0319161590565b80614e2b575b94614dc861242895611c6295614dcd956101e39b956122f19a614ddd575b614db8611c626122f16122eb8a8a611b25565b916001600160a01b031690613497565b611b25565b602c86013595604c019491612274565b614e26606c8701358701614e20602c604c830192013580614e07611c626122f16122eb8488611a57565b93614e1b856001600160a01b038a16614f2f565b611a90565b916135e3565b614da5565b5091939092956040519163ecd0596160e01b835260208380614e5560048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcd97614dc895600091614e9d575b50959a50959b5095509550955050614d87565b614eb6915060203d6020116108f8576108ea8183610ec9565b38614e8a565b505060046101e39114614ccd565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efc82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f82575b16600052600080516020614f8c83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4656fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x38", + "chainId": "0xaa36a7", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x53b260e2af5aa71931e40c149a294e23739e3d934126b2f8f77d436dc18d1d45", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0xf6b3d3edfce2ae313faffe7d6578dfa1e3d00969", + "function": null, + "arguments": [ + "0x701810859d77CdbA314b27302996fDBC35edFa45" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6010c", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd000000000000000000000000701810859d77cdba314b27302996fdbc35edfa45", + "nonce": "0x39", + "chainId": "0xaa36a7", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x248755f82a3728c9a08562d8414b8fd46a04ee96e78a561438c1893539c708a8", + "transactionType": "CALL", + "contractName": "FactoryStaker", + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0xf6b3d3EdFCe2aE313FAffE7d6578dfa1e3D00969", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb000000000000000000000000f6b3d3edfce2ae313faffe7d6578dfa1e3d009690000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3a", + "chainId": "0xaa36a7", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xb59a4d", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xc0602c672bb88fd9ca5a5429bfd547e6b2a1001f3955766d8dbb7d4c82b38bd9", + "transactionIndex": "0x3a", + "blockHash": "0xc6dff577531959b3b9256e3690159a3b615606d727540dffee9f004ffc91a691", + "blockNumber": "0x56983a", + "gasUsed": "0x44ba1b", + "effectiveGasPrice": "0x193f597db", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x701810859d77cdba314b27302996fdbc35edfa45" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xb9b590", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x53b260e2af5aa71931e40c149a294e23739e3d934126b2f8f77d436dc18d1d45", + "transactionIndex": "0x3b", + "blockHash": "0xc6dff577531959b3b9256e3690159a3b615606d727540dffee9f004ffc91a691", + "blockNumber": "0x56983a", + "gasUsed": "0x41b43", + "effectiveGasPrice": "0x193f597db", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0xf6b3d3edfce2ae313faffe7d6578dfa1e3d00969" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0xba6aa3", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x248755f82a3728c9a08562d8414b8fd46a04ee96e78a561438c1893539c708a8", + "transactionIndex": "0x3c", + "blockHash": "0xc6dff577531959b3b9256e3690159a3b615606d727540dffee9f004ffc91a691", + "blockNumber": "0x56983a", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x193f597db", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712840540, + "chain": 11155111, + "commit": "b5e4a4a" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/11155111/run-1712840868.json b/broadcast/Deploy.s.sol/11155111/run-1712840868.json new file mode 100644 index 00000000..91d55ca4 --- /dev/null +++ b/broadcast/Deploy.s.sol/11155111/run-1712840868.json @@ -0,0 +1,130 @@ +{ + "transactions": [ + { + "hash": "0xf19f2946bd17892cbcc25c1c90037dab69df2719847783d532507e210cf43737", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x3b", + "chainId": "0xaa36a7", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb2160420a7454a0ef471ccf901766c8a60f6c305c7bfecd405959828234c4e59", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f", + "function": null, + "arguments": [ + "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6010c", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27", + "nonce": "0x3c", + "chainId": "0xaa36a7", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x5aec773292bec3b2a2bb967ccbd21d667541847b749170cc78062d23e9d14eda", + "transactionType": "CALL", + "contractName": "FactoryStaker", + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3d", + "chainId": "0xaa36a7", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xfcee88", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xf19f2946bd17892cbcc25c1c90037dab69df2719847783d532507e210cf43737", + "transactionIndex": "0x58", + "blockHash": "0xbd8e3d235edd570f162c2f65603fc11cd55e9d8f707ce3d617c50081cc9bf034", + "blockNumber": "0x569855", + "gasUsed": "0x44b92b", + "effectiveGasPrice": "0x17c9db020", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x10109cb", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xb2160420a7454a0ef471ccf901766c8a60f6c305c7bfecd405959828234c4e59", + "transactionIndex": "0x59", + "blockHash": "0xbd8e3d235edd570f162c2f65603fc11cd55e9d8f707ce3d617c50081cc9bf034", + "blockNumber": "0x569855", + "gasUsed": "0x41b43", + "effectiveGasPrice": "0x17c9db020", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x101bede", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x5aec773292bec3b2a2bb967ccbd21d667541847b749170cc78062d23e9d14eda", + "transactionIndex": "0x5a", + "blockHash": "0xbd8e3d235edd570f162c2f65603fc11cd55e9d8f707ce3d617c50081cc9bf034", + "blockNumber": "0x569855", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x17c9db020", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712840868, + "chain": 11155111, + "commit": "b5e4a4a" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/11155111/run-latest.json b/broadcast/Deploy.s.sol/11155111/run-latest.json new file mode 100644 index 00000000..91d55ca4 --- /dev/null +++ b/broadcast/Deploy.s.sol/11155111/run-latest.json @@ -0,0 +1,130 @@ +{ + "transactions": [ + { + "hash": "0xf19f2946bd17892cbcc25c1c90037dab69df2719847783d532507e210cf43737", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x3b", + "chainId": "0xaa36a7", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xb2160420a7454a0ef471ccf901766c8a60f6c305c7bfecd405959828234c4e59", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f", + "function": null, + "arguments": [ + "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6010c", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27", + "nonce": "0x3c", + "chainId": "0xaa36a7", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x5aec773292bec3b2a2bb967ccbd21d667541847b749170cc78062d23e9d14eda", + "transactionType": "CALL", + "contractName": "FactoryStaker", + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x3d", + "chainId": "0xaa36a7", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xfcee88", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xf19f2946bd17892cbcc25c1c90037dab69df2719847783d532507e210cf43737", + "transactionIndex": "0x58", + "blockHash": "0xbd8e3d235edd570f162c2f65603fc11cd55e9d8f707ce3d617c50081cc9bf034", + "blockNumber": "0x569855", + "gasUsed": "0x44b92b", + "effectiveGasPrice": "0x17c9db020", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x10109cb", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xb2160420a7454a0ef471ccf901766c8a60f6c305c7bfecd405959828234c4e59", + "transactionIndex": "0x59", + "blockHash": "0xbd8e3d235edd570f162c2f65603fc11cd55e9d8f707ce3d617c50081cc9bf034", + "blockNumber": "0x569855", + "gasUsed": "0x41b43", + "effectiveGasPrice": "0x17c9db020", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x101bede", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x5aec773292bec3b2a2bb967ccbd21d667541847b749170cc78062d23e9d14eda", + "transactionIndex": "0x5a", + "blockHash": "0xbd8e3d235edd570f162c2f65603fc11cd55e9d8f707ce3d617c50081cc9bf034", + "blockNumber": "0x569855", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x17c9db020", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712840868, + "chain": 11155111, + "commit": "b5e4a4a" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/11155420/run-1712853341.json b/broadcast/Deploy.s.sol/11155420/run-1712853341.json new file mode 100644 index 00000000..b35e5a76 --- /dev/null +++ b/broadcast/Deploy.s.sol/11155420/run-1712853341.json @@ -0,0 +1,59 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xf", + "chainId": "0xaa37dc", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x10", + "chainId": "0xaa37dc", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712853341, + "chain": 11155420, + "commit": "de0f2f3" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/11155420/run-1712853370.json b/broadcast/Deploy.s.sol/11155420/run-1712853370.json new file mode 100644 index 00000000..b2b2cd71 --- /dev/null +++ b/broadcast/Deploy.s.sol/11155420/run-1712853370.json @@ -0,0 +1,113 @@ +{ + "transactions": [ + { + "hash": "0x636e3aac109c0f626363a8c7620bef07d883974134d4b212c5bae8dc05b1228c", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xf", + "chainId": "0xaa37dc", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x555160d37f2c92d5ed18ad8184cd6ba0787c78f39b0652a534a491424f0ca5ad", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x10", + "chainId": "0xaa37dc", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xe287e", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x636e3aac109c0f626363a8c7620bef07d883974134d4b212c5bae8dc05b1228c", + "transactionIndex": "0x4", + "blockHash": "0x3fc9197b42b5ed7a19ee5a1388ef4f48636586e26414d6887226e988dc28d56b", + "blockNumber": "0xa09ae3", + "gasUsed": "0xb513", + "effectiveGasPrice": "0xf433c", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "l1Fee": "0xbac3fa6d19be", + "l1GasPrice": "0x139c231f", + "l1GasUsed": "0x8dc" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x5a28a", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x6a228677ac3ce148016f94e68fcaa19c73c35f3795a28fbce494cf93df209945", + "blockNumber": "0xa09ae4", + "transactionHash": "0x555160d37f2c92d5ed18ad8184cd6ba0787c78f39b0652a534a491424f0ca5ad", + "transactionIndex": "0x3", + "logIndex": "0x6", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x0", + "transactionHash": "0x555160d37f2c92d5ed18ad8184cd6ba0787c78f39b0652a534a491424f0ca5ad", + "transactionIndex": "0x3", + "blockHash": "0x6a228677ac3ce148016f94e68fcaa19c73c35f3795a28fbce494cf93df209945", + "blockNumber": "0xa09ae4", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0xf433c", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "l1Fee": "0xd125b91c9b75", + "l1GasPrice": "0x13458264", + "l1GasUsed": "0x92c" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712853370, + "chain": 11155420, + "commit": "de0f2f3" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/11155420/run-latest.json b/broadcast/Deploy.s.sol/11155420/run-latest.json new file mode 100644 index 00000000..b2b2cd71 --- /dev/null +++ b/broadcast/Deploy.s.sol/11155420/run-latest.json @@ -0,0 +1,113 @@ +{ + "transactions": [ + { + "hash": "0x636e3aac109c0f626363a8c7620bef07d883974134d4b212c5bae8dc05b1228c", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xf", + "chainId": "0xaa37dc", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x555160d37f2c92d5ed18ad8184cd6ba0787c78f39b0652a534a491424f0ca5ad", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x10", + "chainId": "0xaa37dc", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xe287e", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x636e3aac109c0f626363a8c7620bef07d883974134d4b212c5bae8dc05b1228c", + "transactionIndex": "0x4", + "blockHash": "0x3fc9197b42b5ed7a19ee5a1388ef4f48636586e26414d6887226e988dc28d56b", + "blockNumber": "0xa09ae3", + "gasUsed": "0xb513", + "effectiveGasPrice": "0xf433c", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "l1Fee": "0xbac3fa6d19be", + "l1GasPrice": "0x139c231f", + "l1GasUsed": "0x8dc" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x5a28a", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x6a228677ac3ce148016f94e68fcaa19c73c35f3795a28fbce494cf93df209945", + "blockNumber": "0xa09ae4", + "transactionHash": "0x555160d37f2c92d5ed18ad8184cd6ba0787c78f39b0652a534a491424f0ca5ad", + "transactionIndex": "0x3", + "logIndex": "0x6", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x0", + "transactionHash": "0x555160d37f2c92d5ed18ad8184cd6ba0787c78f39b0652a534a491424f0ca5ad", + "transactionIndex": "0x3", + "blockHash": "0x6a228677ac3ce148016f94e68fcaa19c73c35f3795a28fbce494cf93df209945", + "blockNumber": "0xa09ae4", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0xf433c", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "l1Fee": "0xd125b91c9b75", + "l1GasPrice": "0x13458264", + "l1GasUsed": "0x92c" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712853370, + "chain": 11155420, + "commit": "de0f2f3" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/137/run-1712900481.json b/broadcast/Deploy.s.sol/137/run-1712900481.json new file mode 100644 index 00000000..90fb70ff --- /dev/null +++ b/broadcast/Deploy.s.sol/137/run-1712900481.json @@ -0,0 +1,172 @@ +{ + "transactions": [ + { + "hash": "0xd574a44565cae438a1f728240b53ae24fc07d40c99e001b90eaae331091c1aa0", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2e", + "chainId": "0x89", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x2f", + "chainId": "0x89", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1044556", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000001efecb61a2f80aa34d3b9218b564a64d05946290" + ], + "data": "0x00000000000000000000000000000000000000000000000000055fbdad206a140000000000000000000000000000000000000000000000173e59c031424266b500000000000000000000000000000000000000000000072ea660d016f7a28d270000000000000000000000000000000000000000000000173e5460739521fca100000000000000000000000000000000000000000000072ea6662fd4a4c2f73b", + "blockHash": "0x46265559a3c1c33876463a3d166755b6566dfdcbb0c824d888a8a5462621b2d4", + "blockNumber": "0x35257b9", + "transactionHash": "0xd574a44565cae438a1f728240b53ae24fc07d40c99e001b90eaae331091c1aa0", + "transactionIndex": "0x48", + "logIndex": "0x4c2", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000200000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000100000000000001000000000000000000000000000000100000000000002000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "transactionHash": "0xd574a44565cae438a1f728240b53ae24fc07d40c99e001b90eaae331091c1aa0", + "transactionIndex": "0x48", + "blockHash": "0x46265559a3c1c33876463a3d166755b6566dfdcbb0c824d888a8a5462621b2d4", + "blockNumber": "0x35257b9", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x3310148ffc", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x89fb08", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000173df051e7ad9088fd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000173c8d0c6f500688fd000000000000000000000000000000000000000000000000016345785d8a0000", + "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0", + "blockNumber": "0x35257bc", + "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184", + "transactionIndex": "0x3f", + "logIndex": "0xe0", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5", + "0x0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000033da085acde16f6ce00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033f03cb253ba0f6ce", + "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0", + "blockNumber": "0x35257bc", + "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184", + "transactionIndex": "0x3f", + "logIndex": "0xe1", + "removed": false + }, + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0", + "blockNumber": "0x35257bc", + "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184", + "transactionIndex": "0x3f", + "logIndex": "0xe2", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000001efecb61a2f80aa34d3b9218b564a64d05946290" + ], + "data": "0x0000000000000000000000000000000000000000000000000006f65114f9c9550000000000000000000000000000000000000000000000173e35a20886ee8b0100000000000000000000000000000000000000000000072ede6a10c0b3ba0b9a0000000000000000000000000000000000000000000000173e2eabb771f4c1ac00000000000000000000000000000000000000000000072ede710711c8b3d4ef", + "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0", + "blockNumber": "0x35257bc", + "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184", + "transactionIndex": "0x3f", + "logIndex": "0xe3", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000100000000000008000000000000000000000000000210000000000000000000000000000800040000000000000000100000000000200000000000800000000000000200000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000100000000400001000000000000000040000000800000108000000000002100000000000000000000000000000000800a00000000000100000000100000", + "type": "0x0", + "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184", + "transactionIndex": "0x3f", + "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0", + "blockNumber": "0x35257bc", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x3310148ffc", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712900481, + "chain": 137, + "commit": "feedc00" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/137/run-latest.json b/broadcast/Deploy.s.sol/137/run-latest.json new file mode 100644 index 00000000..90fb70ff --- /dev/null +++ b/broadcast/Deploy.s.sol/137/run-latest.json @@ -0,0 +1,172 @@ +{ + "transactions": [ + { + "hash": "0xd574a44565cae438a1f728240b53ae24fc07d40c99e001b90eaae331091c1aa0", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x2e", + "chainId": "0x89", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x2f", + "chainId": "0x89", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1044556", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000001efecb61a2f80aa34d3b9218b564a64d05946290" + ], + "data": "0x00000000000000000000000000000000000000000000000000055fbdad206a140000000000000000000000000000000000000000000000173e59c031424266b500000000000000000000000000000000000000000000072ea660d016f7a28d270000000000000000000000000000000000000000000000173e5460739521fca100000000000000000000000000000000000000000000072ea6662fd4a4c2f73b", + "blockHash": "0x46265559a3c1c33876463a3d166755b6566dfdcbb0c824d888a8a5462621b2d4", + "blockNumber": "0x35257b9", + "transactionHash": "0xd574a44565cae438a1f728240b53ae24fc07d40c99e001b90eaae331091c1aa0", + "transactionIndex": "0x48", + "logIndex": "0x4c2", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000200000000000000000000000000000800000000000000000000100000000000200000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000100000000000001000000000000000000000000000000100000000000002000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "transactionHash": "0xd574a44565cae438a1f728240b53ae24fc07d40c99e001b90eaae331091c1aa0", + "transactionIndex": "0x48", + "blockHash": "0x46265559a3c1c33876463a3d166755b6566dfdcbb0c824d888a8a5462621b2d4", + "blockNumber": "0x35257b9", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x3310148ffc", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x89fb08", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000173df051e7ad9088fd00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000173c8d0c6f500688fd000000000000000000000000000000000000000000000000016345785d8a0000", + "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0", + "blockNumber": "0x35257bc", + "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184", + "transactionIndex": "0x3f", + "logIndex": "0xe0", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5", + "0x0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000033da085acde16f6ce00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033f03cb253ba0f6ce", + "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0", + "blockNumber": "0x35257bc", + "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184", + "transactionIndex": "0x3f", + "logIndex": "0xe1", + "removed": false + }, + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0", + "blockNumber": "0x35257bc", + "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184", + "transactionIndex": "0x3f", + "logIndex": "0xe2", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000001efecb61a2f80aa34d3b9218b564a64d05946290" + ], + "data": "0x0000000000000000000000000000000000000000000000000006f65114f9c9550000000000000000000000000000000000000000000000173e35a20886ee8b0100000000000000000000000000000000000000000000072ede6a10c0b3ba0b9a0000000000000000000000000000000000000000000000173e2eabb771f4c1ac00000000000000000000000000000000000000000000072ede710711c8b3d4ef", + "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0", + "blockNumber": "0x35257bc", + "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184", + "transactionIndex": "0x3f", + "logIndex": "0xe3", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000100000000000008000000000000000000000000000210000000000000000000000000000800040000000000000000100000000000200000000000800000000000000200000000000000000000080000000000000000000000000000000000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000100000000400001000000000000000040000000800000108000000000002100000000000000000000000000000000800a00000000000100000000100000", + "type": "0x0", + "transactionHash": "0xfaccae4bdf12af1eb46771da479d742d572b10a16c59d8cab3371e75a35d9184", + "transactionIndex": "0x3f", + "blockHash": "0x8154c72f924636cc13a2a373550843605d0e04af04f173974489c6f8ae0648a0", + "blockNumber": "0x35257bc", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x3310148ffc", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712900481, + "chain": 137, + "commit": "feedc00" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/168587773/run-1712925069.json b/broadcast/Deploy.s.sol/168587773/run-1712925069.json new file mode 100644 index 00000000..7ae8c0a8 --- /dev/null +++ b/broadcast/Deploy.s.sol/168587773/run-1712925069.json @@ -0,0 +1,82 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x5", + "chainId": "0xa0c71fd", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x6", + "chainId": "0xa0c71fd", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x7", + "chainId": "0xa0c71fd", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712925069, + "chain": 168587773, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/168587773/run-1712925099.json b/broadcast/Deploy.s.sol/168587773/run-1712925099.json new file mode 100644 index 00000000..11d6a0dd --- /dev/null +++ b/broadcast/Deploy.s.sol/168587773/run-1712925099.json @@ -0,0 +1,82 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x5", + "chainId": "0xa0c71fd", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x6", + "chainId": "0xa0c71fd", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x7", + "chainId": "0xa0c71fd", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712925099, + "chain": 168587773, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/168587773/run-1712925243.json b/broadcast/Deploy.s.sol/168587773/run-1712925243.json new file mode 100644 index 00000000..7dd54506 --- /dev/null +++ b/broadcast/Deploy.s.sol/168587773/run-1712925243.json @@ -0,0 +1,82 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x5", + "chainId": "0xa0c71fd", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x6", + "chainId": "0xa0c71fd", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x7", + "chainId": "0xa0c71fd", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712925243, + "chain": 168587773, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/168587773/run-1712925385.json b/broadcast/Deploy.s.sol/168587773/run-1712925385.json new file mode 100644 index 00000000..40bd4f4b --- /dev/null +++ b/broadcast/Deploy.s.sol/168587773/run-1712925385.json @@ -0,0 +1,82 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x5", + "chainId": "0xa0c71fd", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x6", + "chainId": "0xa0c71fd", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x7", + "chainId": "0xa0c71fd", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712925385, + "chain": 168587773, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/168587773/run-1712925425.json b/broadcast/Deploy.s.sol/168587773/run-1712925425.json new file mode 100644 index 00000000..d59907ab --- /dev/null +++ b/broadcast/Deploy.s.sol/168587773/run-1712925425.json @@ -0,0 +1,82 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x5", + "chainId": "0xa0c71fd", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x6", + "chainId": "0xa0c71fd", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x7", + "chainId": "0xa0c71fd", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712925425, + "chain": 168587773, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/168587773/run-latest.json b/broadcast/Deploy.s.sol/168587773/run-latest.json new file mode 100644 index 00000000..d59907ab --- /dev/null +++ b/broadcast/Deploy.s.sol/168587773/run-latest.json @@ -0,0 +1,82 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x5", + "chainId": "0xa0c71fd", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x6", + "chainId": "0xa0c71fd", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x7", + "chainId": "0xa0c71fd", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712925425, + "chain": 168587773, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/204/run-1712900818.json b/broadcast/Deploy.s.sol/204/run-1712900818.json new file mode 100644 index 00000000..26ff09d5 --- /dev/null +++ b/broadcast/Deploy.s.sol/204/run-1712900818.json @@ -0,0 +1,158 @@ +{ + "transactions": [ + { + "hash": "0x0283f7d9fca6332c2565273252cd78a502a48c99d3ef2be6c42fdd7fdba3972f", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0xd", + "chainId": "0xcc", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x69aae133fa328967fd46df4a1f037377f5eeaa79089322d603fe4806d7152007", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xe", + "chainId": "0xcc", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x23ecac31c2b09fce75e3b7c3316c39851440affc2687d1842d8dee8a36e155d8", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0xf", + "chainId": "0xcc", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x76ee91", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x0283f7d9fca6332c2565273252cd78a502a48c99d3ef2be6c42fdd7fdba3972f", + "transactionIndex": "0x32", + "blockHash": "0x14396c6175840b36b29688539d0f1b6fbc467aaa0b77869a5d20ba36a4ebf239", + "blockNumber": "0x142adce", + "gasUsed": "0x44b407", + "effectiveGasPrice": "0xa", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null, + "l1Fee": "0x2661e7f0c8400", + "l1FeeScalar": "0.684", + "l1GasPrice": "0xb2d05e00", + "l1GasUsed": "0x50564" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x77a3a4", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x69aae133fa328967fd46df4a1f037377f5eeaa79089322d603fe4806d7152007", + "transactionIndex": "0x33", + "blockHash": "0x14396c6175840b36b29688539d0f1b6fbc467aaa0b77869a5d20ba36a4ebf239", + "blockNumber": "0x142adce", + "gasUsed": "0xb513", + "effectiveGasPrice": "0xa", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "l1Fee": "0x4861c5d3800", + "l1FeeScalar": "0.684", + "l1GasPrice": "0xb2d05e00", + "l1GasUsed": "0x978" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x78913f", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x14396c6175840b36b29688539d0f1b6fbc467aaa0b77869a5d20ba36a4ebf239", + "blockNumber": "0x142adce", + "transactionHash": "0x23ecac31c2b09fce75e3b7c3316c39851440affc2687d1842d8dee8a36e155d8", + "transactionIndex": "0x34", + "logIndex": "0x3d", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x2", + "transactionHash": "0x23ecac31c2b09fce75e3b7c3316c39851440affc2687d1842d8dee8a36e155d8", + "transactionIndex": "0x34", + "blockHash": "0x14396c6175840b36b29688539d0f1b6fbc467aaa0b77869a5d20ba36a4ebf239", + "blockNumber": "0x142adce", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0xa", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "l1Fee": "0x4ac55100800", + "l1FeeScalar": "0.684", + "l1GasPrice": "0xb2d05e00", + "l1GasUsed": "0x9c8" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712900818, + "chain": 204, + "commit": "1de94fa" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/204/run-latest.json b/broadcast/Deploy.s.sol/204/run-latest.json new file mode 100644 index 00000000..26ff09d5 --- /dev/null +++ b/broadcast/Deploy.s.sol/204/run-latest.json @@ -0,0 +1,158 @@ +{ + "transactions": [ + { + "hash": "0x0283f7d9fca6332c2565273252cd78a502a48c99d3ef2be6c42fdd7fdba3972f", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0xd", + "chainId": "0xcc", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x69aae133fa328967fd46df4a1f037377f5eeaa79089322d603fe4806d7152007", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xe", + "chainId": "0xcc", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x23ecac31c2b09fce75e3b7c3316c39851440affc2687d1842d8dee8a36e155d8", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0xf", + "chainId": "0xcc", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x76ee91", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x0283f7d9fca6332c2565273252cd78a502a48c99d3ef2be6c42fdd7fdba3972f", + "transactionIndex": "0x32", + "blockHash": "0x14396c6175840b36b29688539d0f1b6fbc467aaa0b77869a5d20ba36a4ebf239", + "blockNumber": "0x142adce", + "gasUsed": "0x44b407", + "effectiveGasPrice": "0xa", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null, + "l1Fee": "0x2661e7f0c8400", + "l1FeeScalar": "0.684", + "l1GasPrice": "0xb2d05e00", + "l1GasUsed": "0x50564" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x77a3a4", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x69aae133fa328967fd46df4a1f037377f5eeaa79089322d603fe4806d7152007", + "transactionIndex": "0x33", + "blockHash": "0x14396c6175840b36b29688539d0f1b6fbc467aaa0b77869a5d20ba36a4ebf239", + "blockNumber": "0x142adce", + "gasUsed": "0xb513", + "effectiveGasPrice": "0xa", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "l1Fee": "0x4861c5d3800", + "l1FeeScalar": "0.684", + "l1GasPrice": "0xb2d05e00", + "l1GasUsed": "0x978" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x78913f", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x14396c6175840b36b29688539d0f1b6fbc467aaa0b77869a5d20ba36a4ebf239", + "blockNumber": "0x142adce", + "transactionHash": "0x23ecac31c2b09fce75e3b7c3316c39851440affc2687d1842d8dee8a36e155d8", + "transactionIndex": "0x34", + "logIndex": "0x3d", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x2", + "transactionHash": "0x23ecac31c2b09fce75e3b7c3316c39851440affc2687d1842d8dee8a36e155d8", + "transactionIndex": "0x34", + "blockHash": "0x14396c6175840b36b29688539d0f1b6fbc467aaa0b77869a5d20ba36a4ebf239", + "blockNumber": "0x142adce", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0xa", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "l1Fee": "0x4ac55100800", + "l1FeeScalar": "0.684", + "l1GasPrice": "0xb2d05e00", + "l1GasUsed": "0x9c8" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712900818, + "chain": 204, + "commit": "1de94fa" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/42161/run-1712897474.json b/broadcast/Deploy.s.sol/42161/run-1712897474.json new file mode 100644 index 00000000..c9c933ba --- /dev/null +++ b/broadcast/Deploy.s.sol/42161/run-1712897474.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0xbf6a11fac908987f5aec3df3f4cce6e55a4646915b47a484ee0f303b6c2051ba", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x1b35f", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x1e", + "chainId": "0xa4b1", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x3557bc05b4917bc0ec822d2f7af6ceb96925c093866c5ea41760a3d2835fbdb3", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x208e8", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x1f", + "chainId": "0xa4b1", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1293f", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xbf6a11fac908987f5aec3df3f4cce6e55a4646915b47a484ee0f303b6c2051ba", + "transactionIndex": "0x1", + "blockHash": "0xd39a7c665479e96fb1817d7c70d7b980fa68634cbdc9ed42e143f6f2a37600c6", + "blockNumber": "0xbede03f", + "gasUsed": "0x1293f", + "effectiveGasPrice": "0x989680", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "gasUsedForL1": "0x742c", + "l1BlockNumber": "0x12ba404" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x801bd", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xdc53cb96bfbc22802b3055e6e977a465b7170ca1a2b88c02e7aca58ac60339b5", + "blockNumber": "0xbede043", + "transactionHash": "0x3557bc05b4917bc0ec822d2f7af6ceb96925c093866c5ea41760a3d2835fbdb3", + "transactionIndex": "0x3", + "logIndex": "0x2", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x0", + "transactionHash": "0x3557bc05b4917bc0ec822d2f7af6ceb96925c093866c5ea41760a3d2835fbdb3", + "transactionIndex": "0x3", + "blockHash": "0xdc53cb96bfbc22802b3055e6e977a465b7170ca1a2b88c02e7aca58ac60339b5", + "blockNumber": "0xbede043", + "gasUsed": "0x16708", + "effectiveGasPrice": "0x989680", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "gasUsedForL1": "0x796d", + "l1BlockNumber": "0x12ba404" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712897474, + "chain": 42161, + "commit": "feedc00" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/42161/run-latest.json b/broadcast/Deploy.s.sol/42161/run-latest.json new file mode 100644 index 00000000..c9c933ba --- /dev/null +++ b/broadcast/Deploy.s.sol/42161/run-latest.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0xbf6a11fac908987f5aec3df3f4cce6e55a4646915b47a484ee0f303b6c2051ba", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x1b35f", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x1e", + "chainId": "0xa4b1", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x3557bc05b4917bc0ec822d2f7af6ceb96925c093866c5ea41760a3d2835fbdb3", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x208e8", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x1f", + "chainId": "0xa4b1", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x1293f", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xbf6a11fac908987f5aec3df3f4cce6e55a4646915b47a484ee0f303b6c2051ba", + "transactionIndex": "0x1", + "blockHash": "0xd39a7c665479e96fb1817d7c70d7b980fa68634cbdc9ed42e143f6f2a37600c6", + "blockNumber": "0xbede03f", + "gasUsed": "0x1293f", + "effectiveGasPrice": "0x989680", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "gasUsedForL1": "0x742c", + "l1BlockNumber": "0x12ba404" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x801bd", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xdc53cb96bfbc22802b3055e6e977a465b7170ca1a2b88c02e7aca58ac60339b5", + "blockNumber": "0xbede043", + "transactionHash": "0x3557bc05b4917bc0ec822d2f7af6ceb96925c093866c5ea41760a3d2835fbdb3", + "transactionIndex": "0x3", + "logIndex": "0x2", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x0", + "transactionHash": "0x3557bc05b4917bc0ec822d2f7af6ceb96925c093866c5ea41760a3d2835fbdb3", + "transactionIndex": "0x3", + "blockHash": "0xdc53cb96bfbc22802b3055e6e977a465b7170ca1a2b88c02e7aca58ac60339b5", + "blockNumber": "0xbede043", + "gasUsed": "0x16708", + "effectiveGasPrice": "0x989680", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "gasUsedForL1": "0x796d", + "l1BlockNumber": "0x12ba404" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712897474, + "chain": 42161, + "commit": "feedc00" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/421614/run-1712852878.json b/broadcast/Deploy.s.sol/421614/run-1712852878.json new file mode 100644 index 00000000..32413539 --- /dev/null +++ b/broadcast/Deploy.s.sol/421614/run-1712852878.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0xa41ae6ddb3c75c61403e3f534b9ec79bb6ae877d375d6483ef0efb61ab1bae62", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x119036", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x1c", + "chainId": "0x66eee", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xef432f4c46259ad834b59dffbb14fd3b1a2efc8354da241977101af325a6c61b", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x12809b", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x1d", + "chainId": "0x66eee", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x8801f", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xa41ae6ddb3c75c61403e3f534b9ec79bb6ae877d375d6483ef0efb61ab1bae62", + "transactionIndex": "0x1", + "blockHash": "0x56a845331f68cddabf7bd9b1b92ac55abda5e5cb2cf346fdecb396d503c13be9", + "blockNumber": "0x1f2254d", + "gasUsed": "0x8801f", + "effectiveGasPrice": "0x1a77f870", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "gasUsedForL1": "0x7cb0c", + "l1BlockNumber": "0x569c14" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1c514d", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x2a65c91f0840d2afaf37abce1f1cefcaf20b52dc9136ff802cbe315a7a8bb537", + "blockNumber": "0x1f22551", + "transactionHash": "0xef432f4c46259ad834b59dffbb14fd3b1a2efc8354da241977101af325a6c61b", + "transactionIndex": "0x3", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x2", + "transactionHash": "0xef432f4c46259ad834b59dffbb14fd3b1a2efc8354da241977101af325a6c61b", + "transactionIndex": "0x3", + "blockHash": "0x2a65c91f0840d2afaf37abce1f1cefcaf20b52dc9136ff802cbe315a7a8bb537", + "blockNumber": "0x1f22551", + "gasUsed": "0x91be7", + "effectiveGasPrice": "0x1a529620", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "gasUsedForL1": "0x82e4c", + "l1BlockNumber": "0x569c14" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712852878, + "chain": 421614, + "commit": "de0f2f3" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/421614/run-latest.json b/broadcast/Deploy.s.sol/421614/run-latest.json new file mode 100644 index 00000000..32413539 --- /dev/null +++ b/broadcast/Deploy.s.sol/421614/run-latest.json @@ -0,0 +1,111 @@ +{ + "transactions": [ + { + "hash": "0xa41ae6ddb3c75c61403e3f534b9ec79bb6ae877d375d6483ef0efb61ab1bae62", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x119036", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x1c", + "chainId": "0x66eee", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xef432f4c46259ad834b59dffbb14fd3b1a2efc8354da241977101af325a6c61b", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x12809b", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x1d", + "chainId": "0x66eee", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x8801f", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0xa41ae6ddb3c75c61403e3f534b9ec79bb6ae877d375d6483ef0efb61ab1bae62", + "transactionIndex": "0x1", + "blockHash": "0x56a845331f68cddabf7bd9b1b92ac55abda5e5cb2cf346fdecb396d503c13be9", + "blockNumber": "0x1f2254d", + "gasUsed": "0x8801f", + "effectiveGasPrice": "0x1a77f870", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "gasUsedForL1": "0x7cb0c", + "l1BlockNumber": "0x569c14" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1c514d", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x2a65c91f0840d2afaf37abce1f1cefcaf20b52dc9136ff802cbe315a7a8bb537", + "blockNumber": "0x1f22551", + "transactionHash": "0xef432f4c46259ad834b59dffbb14fd3b1a2efc8354da241977101af325a6c61b", + "transactionIndex": "0x3", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x2", + "transactionHash": "0xef432f4c46259ad834b59dffbb14fd3b1a2efc8354da241977101af325a6c61b", + "transactionIndex": "0x3", + "blockHash": "0x2a65c91f0840d2afaf37abce1f1cefcaf20b52dc9136ff802cbe315a7a8bb537", + "blockNumber": "0x1f22551", + "gasUsed": "0x91be7", + "effectiveGasPrice": "0x1a529620", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "gasUsedForL1": "0x82e4c", + "l1BlockNumber": "0x569c14" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712852878, + "chain": 421614, + "commit": "de0f2f3" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/42170/run-1712904562.json b/broadcast/Deploy.s.sol/42170/run-1712904562.json new file mode 100644 index 00000000..238c9ac4 --- /dev/null +++ b/broadcast/Deploy.s.sol/42170/run-1712904562.json @@ -0,0 +1,152 @@ +{ + "transactions": [ + { + "hash": "0x79f6ab6aa1454a2c992de442132d7aa86f344f7e2048ce27b62c7fe049cac6cc", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0xa", + "chainId": "0xa4ba", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x742967006f689e32cf1ecda8e44b53b3b549deca6135c4af0092112ee18234b5", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xb", + "chainId": "0xa4ba", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe2181a9d6400c6c7419cb013c81f7c7474004efafce25ddd1bad8a89d0e949b1", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0xc", + "chainId": "0xa4ba", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x460c51", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x79f6ab6aa1454a2c992de442132d7aa86f344f7e2048ce27b62c7fe049cac6cc", + "transactionIndex": "0x1", + "blockHash": "0x621989d42106a305c06219e8450723eb4e79d5b44c304434f586a7f3237f572a", + "blockNumber": "0x3db9e86", + "gasUsed": "0x460c51", + "effectiveGasPrice": "0x2fc9660", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null, + "gasUsedForL1": "0x15326", + "l1BlockNumber": "0x12ba64e" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x46c66f", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x742967006f689e32cf1ecda8e44b53b3b549deca6135c4af0092112ee18234b5", + "transactionIndex": "0x2", + "blockHash": "0x621989d42106a305c06219e8450723eb4e79d5b44c304434f586a7f3237f572a", + "blockNumber": "0x3db9e86", + "gasUsed": "0xba1e", + "effectiveGasPrice": "0x2fc9660", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "gasUsedForL1": "0x50b", + "l1BlockNumber": "0x12ba64e" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x47b94e", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x621989d42106a305c06219e8450723eb4e79d5b44c304434f586a7f3237f572a", + "blockNumber": "0x3db9e86", + "transactionHash": "0xe2181a9d6400c6c7419cb013c81f7c7474004efafce25ddd1bad8a89d0e949b1", + "transactionIndex": "0x3", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x2", + "transactionHash": "0xe2181a9d6400c6c7419cb013c81f7c7474004efafce25ddd1bad8a89d0e949b1", + "transactionIndex": "0x3", + "blockHash": "0x621989d42106a305c06219e8450723eb4e79d5b44c304434f586a7f3237f572a", + "blockNumber": "0x3db9e86", + "gasUsed": "0xf2df", + "effectiveGasPrice": "0x2fc9660", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "gasUsedForL1": "0x544", + "l1BlockNumber": "0x12ba64e" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712904562, + "chain": 42170, + "commit": "a3cd755" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/42170/run-latest.json b/broadcast/Deploy.s.sol/42170/run-latest.json new file mode 100644 index 00000000..238c9ac4 --- /dev/null +++ b/broadcast/Deploy.s.sol/42170/run-latest.json @@ -0,0 +1,152 @@ +{ + "transactions": [ + { + "hash": "0x79f6ab6aa1454a2c992de442132d7aa86f344f7e2048ce27b62c7fe049cac6cc", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0xa", + "chainId": "0xa4ba", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x742967006f689e32cf1ecda8e44b53b3b549deca6135c4af0092112ee18234b5", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xb", + "chainId": "0xa4ba", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe2181a9d6400c6c7419cb013c81f7c7474004efafce25ddd1bad8a89d0e949b1", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0xc", + "chainId": "0xa4ba", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x460c51", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x79f6ab6aa1454a2c992de442132d7aa86f344f7e2048ce27b62c7fe049cac6cc", + "transactionIndex": "0x1", + "blockHash": "0x621989d42106a305c06219e8450723eb4e79d5b44c304434f586a7f3237f572a", + "blockNumber": "0x3db9e86", + "gasUsed": "0x460c51", + "effectiveGasPrice": "0x2fc9660", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null, + "gasUsedForL1": "0x15326", + "l1BlockNumber": "0x12ba64e" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x46c66f", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x742967006f689e32cf1ecda8e44b53b3b549deca6135c4af0092112ee18234b5", + "transactionIndex": "0x2", + "blockHash": "0x621989d42106a305c06219e8450723eb4e79d5b44c304434f586a7f3237f572a", + "blockNumber": "0x3db9e86", + "gasUsed": "0xba1e", + "effectiveGasPrice": "0x2fc9660", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "gasUsedForL1": "0x50b", + "l1BlockNumber": "0x12ba64e" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x47b94e", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x621989d42106a305c06219e8450723eb4e79d5b44c304434f586a7f3237f572a", + "blockNumber": "0x3db9e86", + "transactionHash": "0xe2181a9d6400c6c7419cb013c81f7c7474004efafce25ddd1bad8a89d0e949b1", + "transactionIndex": "0x3", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x2", + "transactionHash": "0xe2181a9d6400c6c7419cb013c81f7c7474004efafce25ddd1bad8a89d0e949b1", + "transactionIndex": "0x3", + "blockHash": "0x621989d42106a305c06219e8450723eb4e79d5b44c304434f586a7f3237f572a", + "blockNumber": "0x3db9e86", + "gasUsed": "0xf2df", + "effectiveGasPrice": "0x2fc9660", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "gasUsedForL1": "0x544", + "l1BlockNumber": "0x12ba64e" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712904562, + "chain": 42170, + "commit": "a3cd755" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/42220/run-1712924410.json b/broadcast/Deploy.s.sol/42220/run-1712924410.json new file mode 100644 index 00000000..14c7cb40 --- /dev/null +++ b/broadcast/Deploy.s.sol/42220/run-1712924410.json @@ -0,0 +1,238 @@ +{ + "transactions": [ + { + "hash": "0x53db4e0bcc453bfe8a2eb8ab14bba96e6f560aa40105cb1f00162d913540798b", + "transactionType": "CREATE2", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": null, + "arguments": null, + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xa3646", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "nonce": "0x5", + "chainId": "0xa4ec", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x719070af7bb92cf1da1cdd7e02f88dae2a51a4f9ee88595a8e7dd9c7510fd1b0", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x6", + "chainId": "0xa4ec", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xddc19cbdbb3233dd00422bc293e28e8d2abd25763465dd21f10444aa83e8d2eb", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f", + "function": null, + "arguments": [ + "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6010c", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27", + "nonce": "0x7", + "chainId": "0xa4ec", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xa3a298a41452f51ddd377035aab859ccc6447cb8b2131ca8903a7891e7ed2d8d", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x8", + "chainId": "0xa4ec", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x0f8d864cb362045dac235612262f460b405096af95ff662ea553494fb0b38938", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x9", + "chainId": "0xa4ec", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xc6dd2", + "logs": [ + { + "address": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7", + "blockNumber": "0x17e3e90", + "transactionHash": "0x53db4e0bcc453bfe8a2eb8ab14bba96e6f560aa40105cb1f00162d913540798b", + "transactionIndex": "0x2", + "logIndex": "0x5", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000001020000000004000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000080000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x53db4e0bcc453bfe8a2eb8ab14bba96e6f560aa40105cb1f00162d913540798b", + "transactionIndex": "0x2", + "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7", + "blockNumber": "0x17e3e90", + "gasUsed": "0x764b0", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x5121d9", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x719070af7bb92cf1da1cdd7e02f88dae2a51a4f9ee88595a8e7dd9c7510fd1b0", + "transactionIndex": "0x3", + "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7", + "blockNumber": "0x17e3e90", + "gasUsed": "0x44b407", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x553cd2", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xddc19cbdbb3233dd00422bc293e28e8d2abd25763465dd21f10444aa83e8d2eb", + "transactionIndex": "0x4", + "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7", + "blockNumber": "0x17e3e90", + "gasUsed": "0x41af9", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x55f1e5", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xa3a298a41452f51ddd377035aab859ccc6447cb8b2131ca8903a7891e7ed2d8d", + "transactionIndex": "0x5", + "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7", + "blockNumber": "0x17e3e90", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x56df80", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7", + "blockNumber": "0x17e3e90", + "transactionHash": "0x0f8d864cb362045dac235612262f460b405096af95ff662ea553494fb0b38938", + "transactionIndex": "0x6", + "logIndex": "0x6", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x0", + "transactionHash": "0x0f8d864cb362045dac235612262f460b405096af95ff662ea553494fb0b38938", + "transactionIndex": "0x6", + "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7", + "blockNumber": "0x17e3e90", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712924410, + "chain": 42220, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/42220/run-latest.json b/broadcast/Deploy.s.sol/42220/run-latest.json new file mode 100644 index 00000000..14c7cb40 --- /dev/null +++ b/broadcast/Deploy.s.sol/42220/run-latest.json @@ -0,0 +1,238 @@ +{ + "transactions": [ + { + "hash": "0x53db4e0bcc453bfe8a2eb8ab14bba96e6f560aa40105cb1f00162d913540798b", + "transactionType": "CREATE2", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": null, + "arguments": null, + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xa3646", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "nonce": "0x5", + "chainId": "0xa4ec", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x719070af7bb92cf1da1cdd7e02f88dae2a51a4f9ee88595a8e7dd9c7510fd1b0", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x6", + "chainId": "0xa4ec", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xddc19cbdbb3233dd00422bc293e28e8d2abd25763465dd21f10444aa83e8d2eb", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f", + "function": null, + "arguments": [ + "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6010c", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27", + "nonce": "0x7", + "chainId": "0xa4ec", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xa3a298a41452f51ddd377035aab859ccc6447cb8b2131ca8903a7891e7ed2d8d", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x8", + "chainId": "0xa4ec", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x0f8d864cb362045dac235612262f460b405096af95ff662ea553494fb0b38938", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x9", + "chainId": "0xa4ec", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xc6dd2", + "logs": [ + { + "address": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7", + "blockNumber": "0x17e3e90", + "transactionHash": "0x53db4e0bcc453bfe8a2eb8ab14bba96e6f560aa40105cb1f00162d913540798b", + "transactionIndex": "0x2", + "logIndex": "0x5", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000001020000000004000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000080000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x53db4e0bcc453bfe8a2eb8ab14bba96e6f560aa40105cb1f00162d913540798b", + "transactionIndex": "0x2", + "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7", + "blockNumber": "0x17e3e90", + "gasUsed": "0x764b0", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x5121d9", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x719070af7bb92cf1da1cdd7e02f88dae2a51a4f9ee88595a8e7dd9c7510fd1b0", + "transactionIndex": "0x3", + "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7", + "blockNumber": "0x17e3e90", + "gasUsed": "0x44b407", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x553cd2", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xddc19cbdbb3233dd00422bc293e28e8d2abd25763465dd21f10444aa83e8d2eb", + "transactionIndex": "0x4", + "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7", + "blockNumber": "0x17e3e90", + "gasUsed": "0x41af9", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x55f1e5", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xa3a298a41452f51ddd377035aab859ccc6447cb8b2131ca8903a7891e7ed2d8d", + "transactionIndex": "0x5", + "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7", + "blockNumber": "0x17e3e90", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x56df80", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7", + "blockNumber": "0x17e3e90", + "transactionHash": "0x0f8d864cb362045dac235612262f460b405096af95ff662ea553494fb0b38938", + "transactionIndex": "0x6", + "logIndex": "0x6", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x0", + "transactionHash": "0x0f8d864cb362045dac235612262f460b405096af95ff662ea553494fb0b38938", + "transactionIndex": "0x6", + "blockHash": "0x3fb69298b4479d0e3e6430040bda597fae51cf59f013536d095694d67e53adc7", + "blockNumber": "0x17e3e90", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712924410, + "chain": 42220, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/43113/run-1712852801.json b/broadcast/Deploy.s.sol/43113/run-1712852801.json new file mode 100644 index 00000000..9d331352 --- /dev/null +++ b/broadcast/Deploy.s.sol/43113/run-1712852801.json @@ -0,0 +1,59 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x1b", + "chainId": "0xa869", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x1c", + "chainId": "0xa869", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712852801, + "chain": 43113, + "commit": "de0f2f3" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/43113/run-1712852835.json b/broadcast/Deploy.s.sol/43113/run-1712852835.json new file mode 100644 index 00000000..dd7911c4 --- /dev/null +++ b/broadcast/Deploy.s.sol/43113/run-1712852835.json @@ -0,0 +1,107 @@ +{ + "transactions": [ + { + "hash": "0x0d1dfb896feea78070aa3002bccd34b9f31c57c5d3078e7747106f22acea09af", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x1b", + "chainId": "0xa869", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x857888053f49359159bb9ec7b181cdb5ea62be3717b988b764614928ceda3989", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x1c", + "chainId": "0xa869", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xb513", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x0d1dfb896feea78070aa3002bccd34b9f31c57c5d3078e7747106f22acea09af", + "transactionIndex": "0x0", + "blockHash": "0x9c55b2d812daebbac26b132c2ffc1e5ef1ca580982778a324cb6c181cf286724", + "blockNumber": "0x1e49e2e", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x6fc23ac00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1a2ae", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x9c55b2d812daebbac26b132c2ffc1e5ef1ca580982778a324cb6c181cf286724", + "blockNumber": "0x1e49e2e", + "transactionHash": "0x857888053f49359159bb9ec7b181cdb5ea62be3717b988b764614928ceda3989", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x2", + "transactionHash": "0x857888053f49359159bb9ec7b181cdb5ea62be3717b988b764614928ceda3989", + "transactionIndex": "0x1", + "blockHash": "0x9c55b2d812daebbac26b132c2ffc1e5ef1ca580982778a324cb6c181cf286724", + "blockNumber": "0x1e49e2e", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x6fc23ac00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712852835, + "chain": 43113, + "commit": "de0f2f3" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/43113/run-latest.json b/broadcast/Deploy.s.sol/43113/run-latest.json new file mode 100644 index 00000000..dd7911c4 --- /dev/null +++ b/broadcast/Deploy.s.sol/43113/run-latest.json @@ -0,0 +1,107 @@ +{ + "transactions": [ + { + "hash": "0x0d1dfb896feea78070aa3002bccd34b9f31c57c5d3078e7747106f22acea09af", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x1b", + "chainId": "0xa869", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x857888053f49359159bb9ec7b181cdb5ea62be3717b988b764614928ceda3989", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x1c", + "chainId": "0xa869", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xb513", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x0d1dfb896feea78070aa3002bccd34b9f31c57c5d3078e7747106f22acea09af", + "transactionIndex": "0x0", + "blockHash": "0x9c55b2d812daebbac26b132c2ffc1e5ef1ca580982778a324cb6c181cf286724", + "blockNumber": "0x1e49e2e", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x6fc23ac00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1a2ae", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x9c55b2d812daebbac26b132c2ffc1e5ef1ca580982778a324cb6c181cf286724", + "blockNumber": "0x1e49e2e", + "transactionHash": "0x857888053f49359159bb9ec7b181cdb5ea62be3717b988b764614928ceda3989", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x2", + "transactionHash": "0x857888053f49359159bb9ec7b181cdb5ea62be3717b988b764614928ceda3989", + "transactionIndex": "0x1", + "blockHash": "0x9c55b2d812daebbac26b132c2ffc1e5ef1ca580982778a324cb6c181cf286724", + "blockNumber": "0x1e49e2e", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x6fc23ac00", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712852835, + "chain": 43113, + "commit": "de0f2f3" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/43114/run-1712900579.json b/broadcast/Deploy.s.sol/43114/run-1712900579.json new file mode 100644 index 00000000..1f96f824 --- /dev/null +++ b/broadcast/Deploy.s.sol/43114/run-1712900579.json @@ -0,0 +1,107 @@ +{ + "transactions": [ + { + "hash": "0x2c9fcb584fe14803a3ec6864be80f1e8370e16632e4e22a18ad2130a19a7daca", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x1a", + "chainId": "0xa86a", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe7f340f76a7b02a186eaf6816a09df8f8d810d26da3290040bb3c210ec075862", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x1b", + "chainId": "0xa86a", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x2d28b", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x2c9fcb584fe14803a3ec6864be80f1e8370e16632e4e22a18ad2130a19a7daca", + "transactionIndex": "0x1", + "blockHash": "0x80952e76d063adc4c2296b5078caf34d87d4401b1f77d1afee290b3ae17b1fbb", + "blockNumber": "0x2a0d978", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x62b85e900", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x3c026", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x80952e76d063adc4c2296b5078caf34d87d4401b1f77d1afee290b3ae17b1fbb", + "blockNumber": "0x2a0d978", + "transactionHash": "0xe7f340f76a7b02a186eaf6816a09df8f8d810d26da3290040bb3c210ec075862", + "transactionIndex": "0x2", + "logIndex": "0x1", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x2", + "transactionHash": "0xe7f340f76a7b02a186eaf6816a09df8f8d810d26da3290040bb3c210ec075862", + "transactionIndex": "0x2", + "blockHash": "0x80952e76d063adc4c2296b5078caf34d87d4401b1f77d1afee290b3ae17b1fbb", + "blockNumber": "0x2a0d978", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x62b85e900", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712900579, + "chain": 43114, + "commit": "feedc00" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/43114/run-latest.json b/broadcast/Deploy.s.sol/43114/run-latest.json new file mode 100644 index 00000000..1f96f824 --- /dev/null +++ b/broadcast/Deploy.s.sol/43114/run-latest.json @@ -0,0 +1,107 @@ +{ + "transactions": [ + { + "hash": "0x2c9fcb584fe14803a3ec6864be80f1e8370e16632e4e22a18ad2130a19a7daca", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x1a", + "chainId": "0xa86a", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe7f340f76a7b02a186eaf6816a09df8f8d810d26da3290040bb3c210ec075862", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x1b", + "chainId": "0xa86a", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x2d28b", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x2c9fcb584fe14803a3ec6864be80f1e8370e16632e4e22a18ad2130a19a7daca", + "transactionIndex": "0x1", + "blockHash": "0x80952e76d063adc4c2296b5078caf34d87d4401b1f77d1afee290b3ae17b1fbb", + "blockNumber": "0x2a0d978", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x62b85e900", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x3c026", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x80952e76d063adc4c2296b5078caf34d87d4401b1f77d1afee290b3ae17b1fbb", + "blockNumber": "0x2a0d978", + "transactionHash": "0xe7f340f76a7b02a186eaf6816a09df8f8d810d26da3290040bb3c210ec075862", + "transactionIndex": "0x2", + "logIndex": "0x1", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x2", + "transactionHash": "0xe7f340f76a7b02a186eaf6816a09df8f8d810d26da3290040bb3c210ec075862", + "transactionIndex": "0x2", + "blockHash": "0x80952e76d063adc4c2296b5078caf34d87d4401b1f77d1afee290b3ae17b1fbb", + "blockNumber": "0x2a0d978", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x62b85e900", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712900579, + "chain": 43114, + "commit": "feedc00" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/44787/run-1712924330.json b/broadcast/Deploy.s.sol/44787/run-1712924330.json new file mode 100644 index 00000000..195525c5 --- /dev/null +++ b/broadcast/Deploy.s.sol/44787/run-1712924330.json @@ -0,0 +1,238 @@ +{ + "transactions": [ + { + "hash": "0x1158b60e384ba43eab86b63dcdc395cf2577bac3d5ff41514f1fe8466f857f53", + "transactionType": "CREATE2", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": null, + "arguments": null, + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xa3646", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "nonce": "0x5", + "chainId": "0xaef3", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x3c77f8719665bc7f072a67719eee5bf1fbffbda8a119599cc2922e5bd21a44b6", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x6", + "chainId": "0xaef3", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd7a575072a3c55af61b4f94d241a7822686fcc138c1d373192a31d48f8f34369", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f", + "function": null, + "arguments": [ + "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6010c", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27", + "nonce": "0x7", + "chainId": "0xaef3", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xfc2882f406c3fcc10442a3efe1b38640f94fa63e03628f2da20005bef5de097c", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x8", + "chainId": "0xaef3", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x370e921dad444c3fe1bde0b1a859aa72408c95128406849e1a4a10adf7d4f0f1", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x9", + "chainId": "0xaef3", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x764b0", + "logs": [ + { + "address": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df", + "blockNumber": "0x166aead", + "transactionHash": "0x1158b60e384ba43eab86b63dcdc395cf2577bac3d5ff41514f1fe8466f857f53", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000001020000000004000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000080000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x1158b60e384ba43eab86b63dcdc395cf2577bac3d5ff41514f1fe8466f857f53", + "transactionIndex": "0x0", + "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df", + "blockNumber": "0x166aead", + "gasUsed": "0x764b0", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x4c18b7", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x3c77f8719665bc7f072a67719eee5bf1fbffbda8a119599cc2922e5bd21a44b6", + "transactionIndex": "0x1", + "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df", + "blockNumber": "0x166aead", + "gasUsed": "0x44b407", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x5033b0", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xd7a575072a3c55af61b4f94d241a7822686fcc138c1d373192a31d48f8f34369", + "transactionIndex": "0x2", + "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df", + "blockNumber": "0x166aead", + "gasUsed": "0x41af9", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x50e8c3", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xfc2882f406c3fcc10442a3efe1b38640f94fa63e03628f2da20005bef5de097c", + "transactionIndex": "0x3", + "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df", + "blockNumber": "0x166aead", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x51d65e", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df", + "blockNumber": "0x166aead", + "transactionHash": "0x370e921dad444c3fe1bde0b1a859aa72408c95128406849e1a4a10adf7d4f0f1", + "transactionIndex": "0x4", + "logIndex": "0x1", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x0", + "transactionHash": "0x370e921dad444c3fe1bde0b1a859aa72408c95128406849e1a4a10adf7d4f0f1", + "transactionIndex": "0x4", + "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df", + "blockNumber": "0x166aead", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712924330, + "chain": 44787, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/44787/run-latest.json b/broadcast/Deploy.s.sol/44787/run-latest.json new file mode 100644 index 00000000..195525c5 --- /dev/null +++ b/broadcast/Deploy.s.sol/44787/run-latest.json @@ -0,0 +1,238 @@ +{ + "transactions": [ + { + "hash": "0x1158b60e384ba43eab86b63dcdc395cf2577bac3d5ff41514f1fe8466f857f53", + "transactionType": "CREATE2", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": null, + "arguments": null, + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xa3646", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "nonce": "0x5", + "chainId": "0xaef3", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x3c77f8719665bc7f072a67719eee5bf1fbffbda8a119599cc2922e5bd21a44b6", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x6", + "chainId": "0xaef3", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd7a575072a3c55af61b4f94d241a7822686fcc138c1d373192a31d48f8f34369", + "transactionType": "CREATE2", + "contractName": "KernelFactory", + "contractAddress": "0x6723b44abeec4e71ebe3232bd5b455805badd22f", + "function": null, + "arguments": [ + "0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x6010c", + "value": "0x0", + "input": "0x000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27", + "nonce": "0x7", + "chainId": "0xaef3", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xfc2882f406c3fcc10442a3efe1b38640f94fa63e03628f2da20005bef5de097c", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x8", + "chainId": "0xaef3", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x370e921dad444c3fe1bde0b1a859aa72408c95128406849e1a4a10adf7d4f0f1", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x9", + "chainId": "0xaef3", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x764b0", + "logs": [ + { + "address": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a" + ], + "data": "0x", + "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df", + "blockNumber": "0x166aead", + "transactionHash": "0x1158b60e384ba43eab86b63dcdc395cf2577bac3d5ff41514f1fe8466f857f53", + "transactionIndex": "0x0", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000200000001020000000004000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000080000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x1158b60e384ba43eab86b63dcdc395cf2577bac3d5ff41514f1fe8466f857f53", + "transactionIndex": "0x0", + "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df", + "blockNumber": "0x166aead", + "gasUsed": "0x764b0", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x4c18b7", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x3c77f8719665bc7f072a67719eee5bf1fbffbda8a119599cc2922e5bd21a44b6", + "transactionIndex": "0x1", + "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df", + "blockNumber": "0x166aead", + "gasUsed": "0x44b407", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x5033b0", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xd7a575072a3c55af61b4f94d241a7822686fcc138c1d373192a31d48f8f34369", + "transactionIndex": "0x2", + "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df", + "blockNumber": "0x166aead", + "gasUsed": "0x41af9", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x50e8c3", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xfc2882f406c3fcc10442a3efe1b38640f94fa63e03628f2da20005bef5de097c", + "transactionIndex": "0x3", + "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df", + "blockNumber": "0x166aead", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x51d65e", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df", + "blockNumber": "0x166aead", + "transactionHash": "0x370e921dad444c3fe1bde0b1a859aa72408c95128406849e1a4a10adf7d4f0f1", + "transactionIndex": "0x4", + "logIndex": "0x1", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x0", + "transactionHash": "0x370e921dad444c3fe1bde0b1a859aa72408c95128406849e1a4a10adf7d4f0f1", + "transactionIndex": "0x4", + "blockHash": "0xfb44ac055f575649e0011ac021c867f2776dd1fe6e67ece450ef5b401011a9df", + "blockNumber": "0x166aead", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712924330, + "chain": 44787, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/56/run-1712900012.json b/broadcast/Deploy.s.sol/56/run-1712900012.json new file mode 100644 index 00000000..118f0581 --- /dev/null +++ b/broadcast/Deploy.s.sol/56/run-1712900012.json @@ -0,0 +1,61 @@ +{ + "transactions": [ + { + "hash": "0x56fb1d9586de9bd76a5cc280ac7a02156256db6eb612b7442931919f44d6f4c2", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x15", + "chainId": "0x38", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x16", + "chainId": "0x38", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x56fb1d9586de9bd76a5cc280ac7a02156256db6eb612b7442931919f44d6f4c2" + ], + "returns": {}, + "timestamp": 1712900012, + "chain": 56, + "commit": "feedc00" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/56/run-latest.json b/broadcast/Deploy.s.sol/56/run-latest.json new file mode 100644 index 00000000..118f0581 --- /dev/null +++ b/broadcast/Deploy.s.sol/56/run-latest.json @@ -0,0 +1,61 @@ +{ + "transactions": [ + { + "hash": "0x56fb1d9586de9bd76a5cc280ac7a02156256db6eb612b7442931919f44d6f4c2", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x15", + "chainId": "0x38", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x16", + "chainId": "0x38", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x56fb1d9586de9bd76a5cc280ac7a02156256db6eb612b7442931919f44d6f4c2" + ], + "returns": {}, + "timestamp": 1712900012, + "chain": 56, + "commit": "feedc00" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/59140/run-1712853413.json b/broadcast/Deploy.s.sol/59140/run-1712853413.json new file mode 100644 index 00000000..852bdaf8 --- /dev/null +++ b/broadcast/Deploy.s.sol/59140/run-1712853413.json @@ -0,0 +1,107 @@ +{ + "transactions": [ + { + "hash": "0xee6fd9c8d09469cea1ba085ffa80af72b446d3412dbfbd7bdaf97b5675ae6a50", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xe", + "chainId": "0xe704", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd15b2c111ec91cfdd02be4d5de6990db75ac5953f41b22221e397f6a208be3c3", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0xf", + "chainId": "0xe704", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xb513", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xee6fd9c8d09469cea1ba085ffa80af72b446d3412dbfbd7bdaf97b5675ae6a50", + "transactionIndex": "0x0", + "blockHash": "0xef84ffc845baa2daf10649cee18627db6a8aba2ac23d97f2a50ec3cb52026b50", + "blockNumber": "0x493086", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x23c34607", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1a2ae", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xef84ffc845baa2daf10649cee18627db6a8aba2ac23d97f2a50ec3cb52026b50", + "blockNumber": "0x493086", + "transactionHash": "0xd15b2c111ec91cfdd02be4d5de6990db75ac5953f41b22221e397f6a208be3c3", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x0", + "transactionHash": "0xd15b2c111ec91cfdd02be4d5de6990db75ac5953f41b22221e397f6a208be3c3", + "transactionIndex": "0x1", + "blockHash": "0xef84ffc845baa2daf10649cee18627db6a8aba2ac23d97f2a50ec3cb52026b50", + "blockNumber": "0x493086", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x23c34607", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712853413, + "chain": 59140, + "commit": "de0f2f3" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/59140/run-latest.json b/broadcast/Deploy.s.sol/59140/run-latest.json new file mode 100644 index 00000000..852bdaf8 --- /dev/null +++ b/broadcast/Deploy.s.sol/59140/run-latest.json @@ -0,0 +1,107 @@ +{ + "transactions": [ + { + "hash": "0xee6fd9c8d09469cea1ba085ffa80af72b446d3412dbfbd7bdaf97b5675ae6a50", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xe", + "chainId": "0xe704", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xd15b2c111ec91cfdd02be4d5de6990db75ac5953f41b22221e397f6a208be3c3", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0xf", + "chainId": "0xe704", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xb513", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xee6fd9c8d09469cea1ba085ffa80af72b446d3412dbfbd7bdaf97b5675ae6a50", + "transactionIndex": "0x0", + "blockHash": "0xef84ffc845baa2daf10649cee18627db6a8aba2ac23d97f2a50ec3cb52026b50", + "blockNumber": "0x493086", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x23c34607", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x1a2ae", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xef84ffc845baa2daf10649cee18627db6a8aba2ac23d97f2a50ec3cb52026b50", + "blockNumber": "0x493086", + "transactionHash": "0xd15b2c111ec91cfdd02be4d5de6990db75ac5953f41b22221e397f6a208be3c3", + "transactionIndex": "0x1", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x0", + "transactionHash": "0xd15b2c111ec91cfdd02be4d5de6990db75ac5953f41b22221e397f6a208be3c3", + "transactionIndex": "0x1", + "blockHash": "0xef84ffc845baa2daf10649cee18627db6a8aba2ac23d97f2a50ec3cb52026b50", + "blockNumber": "0x493086", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x23c34607", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712853413, + "chain": 59140, + "commit": "de0f2f3" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/59144/run-1712904298.json b/broadcast/Deploy.s.sol/59144/run-1712904298.json new file mode 100644 index 00000000..a712e51b --- /dev/null +++ b/broadcast/Deploy.s.sol/59144/run-1712904298.json @@ -0,0 +1,82 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x15", + "chainId": "0xe708", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x16", + "chainId": "0xe708", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x17", + "chainId": "0xe708", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712904298, + "chain": 59144, + "commit": "a3cd755" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/59144/run-1712904302.json b/broadcast/Deploy.s.sol/59144/run-1712904302.json new file mode 100644 index 00000000..55fadc75 --- /dev/null +++ b/broadcast/Deploy.s.sol/59144/run-1712904302.json @@ -0,0 +1,82 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x15", + "chainId": "0xe708", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x16", + "chainId": "0xe708", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x17", + "chainId": "0xe708", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712904302, + "chain": 59144, + "commit": "a3cd755" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/59144/run-1712904331.json b/broadcast/Deploy.s.sol/59144/run-1712904331.json new file mode 100644 index 00000000..0d079338 --- /dev/null +++ b/broadcast/Deploy.s.sol/59144/run-1712904331.json @@ -0,0 +1,146 @@ +{ + "transactions": [ + { + "hash": "0x20a79b2a1472e934c420627960d30ed65a7bfa99aec02bcf03c68ca4b98bd921", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x15", + "chainId": "0xe708", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe273752738bc7892abef1963459a36abafaffc5fda8a9ee5524b2c1369e1b172", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x16", + "chainId": "0xe708", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x7d03fb992e51af80e2f3e4f9b8c7d32e4271815eb4db655438a8ab3065dbfe6b", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x17", + "chainId": "0xe708", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x5cfb9e", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x20a79b2a1472e934c420627960d30ed65a7bfa99aec02bcf03c68ca4b98bd921", + "transactionIndex": "0xb", + "blockHash": "0xadc638f7a04dcb0b7b7e872e8c7bd332dcb995cbcfab8f963e126139b0ba1e41", + "blockNumber": "0x373df8", + "gasUsed": "0x44b407", + "effectiveGasPrice": "0x4425d46", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x5db0b1", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xe273752738bc7892abef1963459a36abafaffc5fda8a9ee5524b2c1369e1b172", + "transactionIndex": "0xc", + "blockHash": "0xadc638f7a04dcb0b7b7e872e8c7bd332dcb995cbcfab8f963e126139b0ba1e41", + "blockNumber": "0x373df8", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x4425d46", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x5e9e4c", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xadc638f7a04dcb0b7b7e872e8c7bd332dcb995cbcfab8f963e126139b0ba1e41", + "blockNumber": "0x373df8", + "transactionHash": "0x7d03fb992e51af80e2f3e4f9b8c7d32e4271815eb4db655438a8ab3065dbfe6b", + "transactionIndex": "0xd", + "logIndex": "0x24", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x0", + "transactionHash": "0x7d03fb992e51af80e2f3e4f9b8c7d32e4271815eb4db655438a8ab3065dbfe6b", + "transactionIndex": "0xd", + "blockHash": "0xadc638f7a04dcb0b7b7e872e8c7bd332dcb995cbcfab8f963e126139b0ba1e41", + "blockNumber": "0x373df8", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x4425d46", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712904331, + "chain": 59144, + "commit": "a3cd755" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/59144/run-latest.json b/broadcast/Deploy.s.sol/59144/run-latest.json new file mode 100644 index 00000000..0d079338 --- /dev/null +++ b/broadcast/Deploy.s.sol/59144/run-latest.json @@ -0,0 +1,146 @@ +{ + "transactions": [ + { + "hash": "0x20a79b2a1472e934c420627960d30ed65a7bfa99aec02bcf03c68ca4b98bd921", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x15", + "chainId": "0xe708", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe273752738bc7892abef1963459a36abafaffc5fda8a9ee5524b2c1369e1b172", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x16", + "chainId": "0xe708", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x7d03fb992e51af80e2f3e4f9b8c7d32e4271815eb4db655438a8ab3065dbfe6b", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x17", + "chainId": "0xe708", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x5cfb9e", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0x20a79b2a1472e934c420627960d30ed65a7bfa99aec02bcf03c68ca4b98bd921", + "transactionIndex": "0xb", + "blockHash": "0xadc638f7a04dcb0b7b7e872e8c7bd332dcb995cbcfab8f963e126139b0ba1e41", + "blockNumber": "0x373df8", + "gasUsed": "0x44b407", + "effectiveGasPrice": "0x4425d46", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x5db0b1", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xe273752738bc7892abef1963459a36abafaffc5fda8a9ee5524b2c1369e1b172", + "transactionIndex": "0xc", + "blockHash": "0xadc638f7a04dcb0b7b7e872e8c7bd332dcb995cbcfab8f963e126139b0ba1e41", + "blockNumber": "0x373df8", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x4425d46", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x5e9e4c", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xadc638f7a04dcb0b7b7e872e8c7bd332dcb995cbcfab8f963e126139b0ba1e41", + "blockNumber": "0x373df8", + "transactionHash": "0x7d03fb992e51af80e2f3e4f9b8c7d32e4271815eb4db655438a8ab3065dbfe6b", + "transactionIndex": "0xd", + "logIndex": "0x24", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x0", + "transactionHash": "0x7d03fb992e51af80e2f3e4f9b8c7d32e4271815eb4db655438a8ab3065dbfe6b", + "transactionIndex": "0xd", + "blockHash": "0xadc638f7a04dcb0b7b7e872e8c7bd332dcb995cbcfab8f963e126139b0ba1e41", + "blockNumber": "0x373df8", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x4425d46", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712904331, + "chain": 59144, + "commit": "a3cd755" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/80001/run-1712853455.json b/broadcast/Deploy.s.sol/80001/run-1712853455.json new file mode 100644 index 00000000..6c02e889 --- /dev/null +++ b/broadcast/Deploy.s.sol/80001/run-1712853455.json @@ -0,0 +1,172 @@ +{ + "transactions": [ + { + "hash": "0xf6d98c1605b3ad3024124456ee559f72dad754c0c3940f43722d3b4483034ed9", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x124", + "chainId": "0x13881", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x125", + "chainId": "0x13881", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x90edc", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000004cefb7df2ff89a05ddd0176de11e01ef0cf7ed84" + ], + "data": "0x0000000000000000000000000000000000000000000000000000d2cc528059e300000000000000000000000000000000000000000000000016565c06bae859f50000000000000000000000000000000000000000000000a7fef9b788f0c573280000000000000000000000000000000000000000000000001655893a686800120000000000000000000000000000000000000000000000a7fefa8a554345cd0b", + "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8", + "blockNumber": "0x2de6e82", + "transactionHash": "0xf6d98c1605b3ad3024124456ee559f72dad754c0c3940f43722d3b4483034ed9", + "transactionIndex": "0x4", + "logIndex": "0x10", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000001000000000100000000000200000001000000000000000000000000000000000000000080000000000000000000000000000020000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "transactionHash": "0xf6d98c1605b3ad3024124456ee559f72dad754c0c3940f43722d3b4483034ed9", + "transactionIndex": "0x4", + "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8", + "blockNumber": "0x2de6e82", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x12a05f200", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x9fc77", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000001653f4b0806455f5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014f0af3822da55f5000000000000000000000000000000000000000000000000016345785d8a0000", + "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8", + "blockNumber": "0x2de6e82", + "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d", + "transactionIndex": "0x5", + "logIndex": "0x11", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5", + "0x0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000082fe08c968d8b9d6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084614e41c662b9d6", + "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8", + "blockNumber": "0x2de6e82", + "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d", + "transactionIndex": "0x5", + "logIndex": "0x12", + "removed": false + }, + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8", + "blockNumber": "0x2de6e82", + "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d", + "transactionIndex": "0x5", + "logIndex": "0x13", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000004cefb7df2ff89a05ddd0176de11e01ef0cf7ed84" + ], + "data": "0x0000000000000000000000000000000000000000000000000001149bf29599eb0000000000000000000000000000000000000000000000001655893a685d63f50000000000000000000000000000000000000000000000a7fefa8a554345cd0b0000000000000000000000000000000000000000000000001654749e75c7ca0a0000000000000000000000000000000000000000000000a7fefb9ef135db66f6", + "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8", + "blockNumber": "0x2de6e82", + "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d", + "transactionIndex": "0x5", + "logIndex": "0x14", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000100000000000008000000000000000000000000000010000000000000000000000000000800040000001000000000100000000000200000001000800000000000000200000000000000000000080000000000000000000000000000020000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000400001000000000000000040000000800000108000000000000100000000000000000000000000000000800a00000000000100000000100000", + "type": "0x0", + "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d", + "transactionIndex": "0x5", + "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8", + "blockNumber": "0x2de6e82", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x12a05f200", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712853455, + "chain": 80001, + "commit": "de0f2f3" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/80001/run-latest.json b/broadcast/Deploy.s.sol/80001/run-latest.json new file mode 100644 index 00000000..6c02e889 --- /dev/null +++ b/broadcast/Deploy.s.sol/80001/run-latest.json @@ -0,0 +1,172 @@ +{ + "transactions": [ + { + "hash": "0xf6d98c1605b3ad3024124456ee559f72dad754c0c3940f43722d3b4483034ed9", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x124", + "chainId": "0x13881", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x125", + "chainId": "0x13881", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x90edc", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000004cefb7df2ff89a05ddd0176de11e01ef0cf7ed84" + ], + "data": "0x0000000000000000000000000000000000000000000000000000d2cc528059e300000000000000000000000000000000000000000000000016565c06bae859f50000000000000000000000000000000000000000000000a7fef9b788f0c573280000000000000000000000000000000000000000000000001655893a686800120000000000000000000000000000000000000000000000a7fefa8a554345cd0b", + "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8", + "blockNumber": "0x2de6e82", + "transactionHash": "0xf6d98c1605b3ad3024124456ee559f72dad754c0c3940f43722d3b4483034ed9", + "transactionIndex": "0x4", + "logIndex": "0x10", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000800000000001000000000100000000000200000001000000000000000000000000000000000000000080000000000000000000000000000020000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000100000", + "type": "0x0", + "transactionHash": "0xf6d98c1605b3ad3024124456ee559f72dad754c0c3940f43722d3b4483034ed9", + "transactionIndex": "0x4", + "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8", + "blockNumber": "0x2de6e82", + "gasUsed": "0xb513", + "effectiveGasPrice": "0x12a05f200", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x9fc77", + "logs": [ + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000001653f4b0806455f5000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000014f0af3822da55f5000000000000000000000000000000000000000000000000016345785d8a0000", + "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8", + "blockNumber": "0x2de6e82", + "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d", + "transactionIndex": "0x5", + "logIndex": "0x11", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0xe6497e3ee548a3372136af2fcb0696db31fc6cf20260707645068bd3fe97f3c4", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5", + "0x0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a0000000000000000000000000000000000000000000000000000016345785d8a000000000000000000000000000000000000000000000000000082fe08c968d8b9d6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084614e41c662b9d6", + "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8", + "blockNumber": "0x2de6e82", + "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d", + "transactionIndex": "0x5", + "logIndex": "0x12", + "removed": false + }, + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8", + "blockNumber": "0x2de6e82", + "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d", + "transactionIndex": "0x5", + "logIndex": "0x13", + "removed": false + }, + { + "address": "0x0000000000000000000000000000000000001010", + "topics": [ + "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", + "0x0000000000000000000000000000000000000000000000000000000000001010", + "0x0000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a", + "0x0000000000000000000000004cefb7df2ff89a05ddd0176de11e01ef0cf7ed84" + ], + "data": "0x0000000000000000000000000000000000000000000000000001149bf29599eb0000000000000000000000000000000000000000000000001655893a685d63f50000000000000000000000000000000000000000000000a7fefa8a554345cd0b0000000000000000000000000000000000000000000000001654749e75c7ca0a0000000000000000000000000000000000000000000000a7fefb9ef135db66f6", + "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8", + "blockNumber": "0x2de6e82", + "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d", + "transactionIndex": "0x5", + "logIndex": "0x14", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000100000000000008000000000000000000000000000010000000000000000000000000000800040000001000000000100000000000200000001000800000000000000200000000000000000000080000000000000000000000000000020000000000000000000000000000000000000080000000000201000000000000000000000000000000000000000000000000000000000004000000000000000400001000000000000000040000000800000108000000000000100000000000000000000000000000000800a00000000000100000000100000", + "type": "0x0", + "transactionHash": "0x1a3877a0860ddbd96932789a39a92f4a32dea293f91358459ce1bbbdf5baab5d", + "transactionIndex": "0x5", + "blockHash": "0x8a82ac93f2601f3c80628c97e674d94fa628e8f68f1a13e4abad2599a76b43d8", + "blockNumber": "0x2de6e82", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0x12a05f200", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712853455, + "chain": 80001, + "commit": "de0f2f3" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/80002/run-1712896788.json b/broadcast/Deploy.s.sol/80002/run-1712896788.json new file mode 100644 index 00000000..5a18c609 --- /dev/null +++ b/broadcast/Deploy.s.sol/80002/run-1712896788.json @@ -0,0 +1,82 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x9", + "chainId": "0x13882", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xa", + "chainId": "0x13882", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0xb", + "chainId": "0x13882", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712896788, + "chain": 80002, + "commit": "1ae967d" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/80002/run-1712896833.json b/broadcast/Deploy.s.sol/80002/run-1712896833.json new file mode 100644 index 00000000..0fd49823 --- /dev/null +++ b/broadcast/Deploy.s.sol/80002/run-1712896833.json @@ -0,0 +1,85 @@ +{ + "transactions": [ + { + "hash": "0x4f5f0a1f7f0133e553eb279c0e4757f154b20ea3684f141f1599331ab7ab555f", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x9", + "chainId": "0x13882", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x36a419186878ca2cd4bc0056678ee6bcbedadd13d54f4addbd6654a1b821021b", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xa", + "chainId": "0x13882", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0xb", + "chainId": "0x13882", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x4f5f0a1f7f0133e553eb279c0e4757f154b20ea3684f141f1599331ab7ab555f", + "0x36a419186878ca2cd4bc0056678ee6bcbedadd13d54f4addbd6654a1b821021b" + ], + "returns": {}, + "timestamp": 1712896833, + "chain": 80002, + "commit": "1ae967d" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/80002/run-latest.json b/broadcast/Deploy.s.sol/80002/run-latest.json new file mode 100644 index 00000000..0fd49823 --- /dev/null +++ b/broadcast/Deploy.s.sol/80002/run-latest.json @@ -0,0 +1,85 @@ +{ + "transactions": [ + { + "hash": "0x4f5f0a1f7f0133e553eb279c0e4757f154b20ea3684f141f1599331ab7ab555f", + "transactionType": "CREATE2", + "contractName": "Kernel", + "contractAddress": "0x94f097e1ebeb4eca3aae54cabb08905b239a7d27", + "function": null, + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0x5ee575", + "value": "0x0", + "input": "0x0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032", + "nonce": "0x9", + "chainId": "0x13882", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x36a419186878ca2cd4bc0056678ee6bcbedadd13d54f4addbd6654a1b821021b", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xa", + "chainId": "0x13882", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0xb", + "chainId": "0x13882", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x4f5f0a1f7f0133e553eb279c0e4757f154b20ea3684f141f1599331ab7ab555f", + "0x36a419186878ca2cd4bc0056678ee6bcbedadd13d54f4addbd6654a1b821021b" + ], + "returns": {}, + "timestamp": 1712896833, + "chain": 80002, + "commit": "1ae967d" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/8453/run-latest.json b/broadcast/Deploy.s.sol/8453/run-latest.json new file mode 100644 index 00000000..ac152243 --- /dev/null +++ b/broadcast/Deploy.s.sol/8453/run-latest.json @@ -0,0 +1,62 @@ +{ + "transactions": [ + { + "hash": "0x64fbd1ee9c767c67d9480aca9d39ae3ea3d1abe23a260bb3c2e73dfda93f3041", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0x1a", + "chainId": "0x2105", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0xe465c36e182d2575c0ab7fd0d8d3a7904f96297acdb3fbe7abc5599cd004fb49", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x1b", + "chainId": "0x2105", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [ + "0x64fbd1ee9c767c67d9480aca9d39ae3ea3d1abe23a260bb3c2e73dfda93f3041", + "0xe465c36e182d2575c0ab7fd0d8d3a7904f96297acdb3fbe7abc5599cd004fb49" + ], + "returns": {}, + "timestamp": 1712899269, + "chain": 8453, + "commit": "feedc00" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/84532/run-1712853126.json b/broadcast/Deploy.s.sol/84532/run-1712853126.json new file mode 100644 index 00000000..d9512fb6 --- /dev/null +++ b/broadcast/Deploy.s.sol/84532/run-1712853126.json @@ -0,0 +1,59 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xf", + "chainId": "0x14a34", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x10", + "chainId": "0x14a34", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712853126, + "chain": 84532, + "commit": "de0f2f3" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/84532/run-1712853142.json b/broadcast/Deploy.s.sol/84532/run-1712853142.json new file mode 100644 index 00000000..c553ab57 --- /dev/null +++ b/broadcast/Deploy.s.sol/84532/run-1712853142.json @@ -0,0 +1,59 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xf", + "chainId": "0x14a34", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x10", + "chainId": "0x14a34", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712853142, + "chain": 84532, + "commit": "de0f2f3" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/84532/run-1712853185.json b/broadcast/Deploy.s.sol/84532/run-1712853185.json new file mode 100644 index 00000000..345bad0f --- /dev/null +++ b/broadcast/Deploy.s.sol/84532/run-1712853185.json @@ -0,0 +1,59 @@ +{ + "transactions": [ + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xf", + "chainId": "0x14a34", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": null, + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x10", + "chainId": "0x14a34", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712853185, + "chain": 84532, + "commit": "de0f2f3" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/84532/run-1712853220.json b/broadcast/Deploy.s.sol/84532/run-1712853220.json new file mode 100644 index 00000000..b3c0695f --- /dev/null +++ b/broadcast/Deploy.s.sol/84532/run-1712853220.json @@ -0,0 +1,113 @@ +{ + "transactions": [ + { + "hash": "0xae59ef91c4ccd79c73dacd816aa0ec92b19a24e5c2a67b9ebca11e72bc670384", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xf", + "chainId": "0x14a34", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x75926d9afc1e817263714392021ab1998116044d5a09a56619947066c09dac22", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x10", + "chainId": "0x14a34", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x6221a", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xae59ef91c4ccd79c73dacd816aa0ec92b19a24e5c2a67b9ebca11e72bc670384", + "transactionIndex": "0x6", + "blockHash": "0xe6a62442dc36b99f1ef0464318f05fa503cc9474453b0bbf2a6e6da0188e1708", + "blockNumber": "0x8258fe", + "gasUsed": "0xb513", + "effectiveGasPrice": "0xf4359", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "l1Fee": "0x93a386cb4b44", + "l1GasPrice": "0x7fbaf22", + "l1GasUsed": "0x8cc" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x70fb5", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xe6a62442dc36b99f1ef0464318f05fa503cc9474453b0bbf2a6e6da0188e1708", + "blockNumber": "0x8258fe", + "transactionHash": "0x75926d9afc1e817263714392021ab1998116044d5a09a56619947066c09dac22", + "transactionIndex": "0x7", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x0", + "transactionHash": "0x75926d9afc1e817263714392021ab1998116044d5a09a56619947066c09dac22", + "transactionIndex": "0x7", + "blockHash": "0xe6a62442dc36b99f1ef0464318f05fa503cc9474453b0bbf2a6e6da0188e1708", + "blockNumber": "0x8258fe", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0xf4359", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "l1Fee": "0x98e22c8c7daf", + "l1GasPrice": "0x7fbaf22", + "l1GasUsed": "0x91c" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712853220, + "chain": 84532, + "commit": "de0f2f3" +} \ No newline at end of file diff --git a/broadcast/Deploy.s.sol/84532/run-latest.json b/broadcast/Deploy.s.sol/84532/run-latest.json new file mode 100644 index 00000000..b3c0695f --- /dev/null +++ b/broadcast/Deploy.s.sol/84532/run-latest.json @@ -0,0 +1,113 @@ +{ + "transactions": [ + { + "hash": "0xae59ef91c4ccd79c73dacd816aa0ec92b19a24e5c2a67b9ebca11e72bc670384", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "approveFactory(address,bool)", + "arguments": [ + "0x6723b44Abeec4E71eBE3232BD5B455805baDD22f", + "true" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x108d1", + "value": "0x0", + "input": "0x6e7dbabb0000000000000000000000006723b44abeec4e71ebe3232bd5b455805badd22f0000000000000000000000000000000000000000000000000000000000000001", + "nonce": "0xf", + "chainId": "0x14a34", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + }, + { + "hash": "0x75926d9afc1e817263714392021ab1998116044d5a09a56619947066c09dac22", + "transactionType": "CALL", + "contractName": null, + "contractAddress": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "function": "stake(address,uint32)", + "arguments": [ + "0x0000000071727De22E5E9d8BAf0edAc6f37da032", + "86400" + ], + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "gas": "0x15b7f", + "value": "0x16345785d8a0000", + "input": "0xc7e55f3e0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da0320000000000000000000000000000000000000000000000000000000000015180", + "nonce": "0x10", + "chainId": "0x14a34", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x6221a", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xae59ef91c4ccd79c73dacd816aa0ec92b19a24e5c2a67b9ebca11e72bc670384", + "transactionIndex": "0x6", + "blockHash": "0xe6a62442dc36b99f1ef0464318f05fa503cc9474453b0bbf2a6e6da0188e1708", + "blockNumber": "0x8258fe", + "gasUsed": "0xb513", + "effectiveGasPrice": "0xf4359", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "l1Fee": "0x93a386cb4b44", + "l1GasPrice": "0x7fbaf22", + "l1GasUsed": "0x8cc" + }, + { + "status": "0x1", + "cumulativeGasUsed": "0x70fb5", + "logs": [ + { + "address": "0x0000000071727de22e5e9d8baf0edac6f37da032", + "topics": [ + "0xa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c01", + "0x000000000000000000000000d703aae79538628d27099b8c4f621be4ccd142d5" + ], + "data": "0x000000000000000000000000000000000000000000000000016345785d8a00000000000000000000000000000000000000000000000000000000000000015180", + "blockHash": "0xe6a62442dc36b99f1ef0464318f05fa503cc9474453b0bbf2a6e6da0188e1708", + "blockNumber": "0x8258fe", + "transactionHash": "0x75926d9afc1e817263714392021ab1998116044d5a09a56619947066c09dac22", + "transactionIndex": "0x7", + "logIndex": "0x0", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000800000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000040000000000000000000000000000100000000000000000000000000000000000a00000000000000000000000000", + "type": "0x0", + "transactionHash": "0x75926d9afc1e817263714392021ab1998116044d5a09a56619947066c09dac22", + "transactionIndex": "0x7", + "blockHash": "0xe6a62442dc36b99f1ef0464318f05fa503cc9474453b0bbf2a6e6da0188e1708", + "blockNumber": "0x8258fe", + "gasUsed": "0xed9b", + "effectiveGasPrice": "0xf4359", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0xd703aae79538628d27099b8c4f621be4ccd142d5", + "contractAddress": null, + "l1Fee": "0x98e22c8c7daf", + "l1GasPrice": "0x7fbaf22", + "l1GasUsed": "0x91c" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712853220, + "chain": 84532, + "commit": "de0f2f3" +} \ No newline at end of file diff --git a/broadcast/DeployECDSA.s.sol/11155111/run-1712847787.json b/broadcast/DeployECDSA.s.sol/11155111/run-1712847787.json new file mode 100644 index 00000000..485e7e90 --- /dev/null +++ b/broadcast/DeployECDSA.s.sol/11155111/run-1712847787.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x8562ad26e46f807af71418ec082c720698f553e8eba477999545a42408ffa4a4", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0x8104e3ad430ea6d354d013a6789fdfc71e671c43", + "function": null, + "arguments": null, + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xa28d7", + "value": "0x0", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657610740908161001c8239f35b600080fdfe608060408181526004918236101561001657600080fd5b600090813560e01c90816320709efc14610459575080636d61fe70146103a05780638a91b0e31461032e57806397003203146102e8578063aacbd72a1461028e578063d60b347f14610240578063d68f602514610124578063ecd05961146100e55763f551e2ee1461008757600080fd5b346100e25760603660031901126100e2576100a0610490565b506044359067ffffffffffffffff82116100e257506100c76020936100d0923691016104ab565b9060243561060a565b90516001600160e01b03199091168152f35b80fd5b50919034610120576020366003190112610120576020925081359160018314928315610116575b5050519015158152f35b149150388061010c565b8280fd5b509160603660031901126101205761013a610490565b9267ffffffffffffffff6044358181116101205761015b90369085016104ab565b505033825260208281528483205490956001600160a01b039182169116036101f157835192858401918211848310176101de575083949291945283815282519382859384528251928382860152825b8481106101c857505050828201840152601f01601f19168101030190f35b81810183015188820188015287955082016101aa565b634e487b7160e01b835260419052602482fd5b835162461bcd60e51b8152808401869052602360248201527f454344534156616c696461746f723a2073656e646572206973206e6f74206f776044820152623732b960e91b6064820152608490fd5b50903461028a57602036600319011261028a57602090610281610261610490565b6001600160a01b0390811660009081526020819052604090205416151590565b90519015158152f35b5080fd5b5082606036600319011261028a5767ffffffffffffffff9080358281116102e4576102bc90369083016104ab565b50506024358015150361012057604435918211610120576102df913691016104ab565b505080f35b8380fd5b506003199082823601126100e25783359167ffffffffffffffff831161028a576101209083360301126100e25750602092610327916024359101610542565b9051908152f35b5091602036600319011261012057803567ffffffffffffffff81116102e45761035a90369083016104ab565b5050336000908152602081905260409020546001600160a01b03161561038a575081903382528160205281205580f35b602491519063f91bd6f160e01b82523390820152fd5b5091602036600319011261012057803567ffffffffffffffff81116102e4576103cc90369083016104ab565b33600090815260208190526040902054919290916001600160a01b03166104425750601411610120573560601c90338352826020528220816bffffffffffffffffffffffff60a01b825416179055337fa5e1f8b4009110f5525798d04ae2125421a12d0590aa52c13682ff1bd3c492ca8380a380f35b6024908451906393360fbf60e01b82523390820152fd5b90508234610120576020366003190112610120576020926001600160a01b03919082610483610490565b1681528085522054168152f35b600435906001600160a01b03821682036104a657565b600080fd5b9181601f840112156104a65782359167ffffffffffffffff83116104a657602083818601950101116104a657565b92919267ffffffffffffffff9182811161052c5760405192601f8201601f19908116603f011684019081118482101761052c576040528294818452818301116104a6578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b3360009081526020819052604081205490926001600160a01b03918216926101008101359036819003601e1901821215610606570180359067ffffffffffffffff82116106065760200191813603831361060657836105ab6105a53685876104d9565b836106a2565b1685146105fe576105ef926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916104d9565b906106a2565b16036105f85790565b50600190565b505050505090565b8580fd5b919033600052600060205260018060a01b0391826040600020541693836106356105a53685876104d9565b16851461069157610674926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c6004209236916104d9565b160361068557630b135d3f60e11b90565b6001600160e01b031990565b50630b135d3f60e11b949350505050565b919091602060016080600082948390604080998151986106e0575b5050505afa51923d156106d257600060605252565b638baa579f6000526004601cfd5b8492835287808201518352828251146107205760418251146107095750505090503888816106bd565b60609384830151901a9052015190523888816106bd565b9250015190601b8260ff1c019052848060ff1b03166060523888816106bd56", + "nonce": "0x3e", + "chainId": "0xaa36a7", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xaf2a76", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x8562ad26e46f807af71418ec082c720698f553e8eba477999545a42408ffa4a4", + "transactionIndex": "0x42", + "blockHash": "0x05be0f541009e1f0df7b4c62fdfe876fb76559f2d962acd90cb8f1afb24bfefe", + "blockNumber": "0x569a7d", + "gasUsed": "0x6f2d1", + "effectiveGasPrice": "0x66b60fa8", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x8104e3ad430ea6d354d013a6789fdfc71e671c43" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712847787, + "chain": 11155111, + "commit": "f8be0c5" +} \ No newline at end of file diff --git a/broadcast/DeployECDSA.s.sol/11155111/run-latest.json b/broadcast/DeployECDSA.s.sol/11155111/run-latest.json new file mode 100644 index 00000000..485e7e90 --- /dev/null +++ b/broadcast/DeployECDSA.s.sol/11155111/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0x8562ad26e46f807af71418ec082c720698f553e8eba477999545a42408ffa4a4", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0x8104e3ad430ea6d354d013a6789fdfc71e671c43", + "function": null, + "arguments": null, + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xa28d7", + "value": "0x0", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657610740908161001c8239f35b600080fdfe608060408181526004918236101561001657600080fd5b600090813560e01c90816320709efc14610459575080636d61fe70146103a05780638a91b0e31461032e57806397003203146102e8578063aacbd72a1461028e578063d60b347f14610240578063d68f602514610124578063ecd05961146100e55763f551e2ee1461008757600080fd5b346100e25760603660031901126100e2576100a0610490565b506044359067ffffffffffffffff82116100e257506100c76020936100d0923691016104ab565b9060243561060a565b90516001600160e01b03199091168152f35b80fd5b50919034610120576020366003190112610120576020925081359160018314928315610116575b5050519015158152f35b149150388061010c565b8280fd5b509160603660031901126101205761013a610490565b9267ffffffffffffffff6044358181116101205761015b90369085016104ab565b505033825260208281528483205490956001600160a01b039182169116036101f157835192858401918211848310176101de575083949291945283815282519382859384528251928382860152825b8481106101c857505050828201840152601f01601f19168101030190f35b81810183015188820188015287955082016101aa565b634e487b7160e01b835260419052602482fd5b835162461bcd60e51b8152808401869052602360248201527f454344534156616c696461746f723a2073656e646572206973206e6f74206f776044820152623732b960e91b6064820152608490fd5b50903461028a57602036600319011261028a57602090610281610261610490565b6001600160a01b0390811660009081526020819052604090205416151590565b90519015158152f35b5080fd5b5082606036600319011261028a5767ffffffffffffffff9080358281116102e4576102bc90369083016104ab565b50506024358015150361012057604435918211610120576102df913691016104ab565b505080f35b8380fd5b506003199082823601126100e25783359167ffffffffffffffff831161028a576101209083360301126100e25750602092610327916024359101610542565b9051908152f35b5091602036600319011261012057803567ffffffffffffffff81116102e45761035a90369083016104ab565b5050336000908152602081905260409020546001600160a01b03161561038a575081903382528160205281205580f35b602491519063f91bd6f160e01b82523390820152fd5b5091602036600319011261012057803567ffffffffffffffff81116102e4576103cc90369083016104ab565b33600090815260208190526040902054919290916001600160a01b03166104425750601411610120573560601c90338352826020528220816bffffffffffffffffffffffff60a01b825416179055337fa5e1f8b4009110f5525798d04ae2125421a12d0590aa52c13682ff1bd3c492ca8380a380f35b6024908451906393360fbf60e01b82523390820152fd5b90508234610120576020366003190112610120576020926001600160a01b03919082610483610490565b1681528085522054168152f35b600435906001600160a01b03821682036104a657565b600080fd5b9181601f840112156104a65782359167ffffffffffffffff83116104a657602083818601950101116104a657565b92919267ffffffffffffffff9182811161052c5760405192601f8201601f19908116603f011684019081118482101761052c576040528294818452818301116104a6578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b3360009081526020819052604081205490926001600160a01b03918216926101008101359036819003601e1901821215610606570180359067ffffffffffffffff82116106065760200191813603831361060657836105ab6105a53685876104d9565b836106a2565b1685146105fe576105ef926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916104d9565b906106a2565b16036105f85790565b50600190565b505050505090565b8580fd5b919033600052600060205260018060a01b0391826040600020541693836106356105a53685876104d9565b16851461069157610674926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c6004209236916104d9565b160361068557630b135d3f60e11b90565b6001600160e01b031990565b50630b135d3f60e11b949350505050565b919091602060016080600082948390604080998151986106e0575b5050505afa51923d156106d257600060605252565b638baa579f6000526004601cfd5b8492835287808201518352828251146107205760418251146107095750505090503888816106bd565b60609384830151901a9052015190523888816106bd565b9250015190601b8260ff1c019052848060ff1b03166060523888816106bd56", + "nonce": "0x3e", + "chainId": "0xaa36a7", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xaf2a76", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x2", + "transactionHash": "0x8562ad26e46f807af71418ec082c720698f553e8eba477999545a42408ffa4a4", + "transactionIndex": "0x42", + "blockHash": "0x05be0f541009e1f0df7b4c62fdfe876fb76559f2d962acd90cb8f1afb24bfefe", + "blockNumber": "0x569a7d", + "gasUsed": "0x6f2d1", + "effectiveGasPrice": "0x66b60fa8", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": "0x8104e3ad430ea6d354d013a6789fdfc71e671c43" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712847787, + "chain": 11155111, + "commit": "f8be0c5" +} \ No newline at end of file diff --git a/broadcast/DeployECDSA.s.sol/42220/run-1712924455.json b/broadcast/DeployECDSA.s.sol/42220/run-1712924455.json new file mode 100644 index 00000000..d577d1db --- /dev/null +++ b/broadcast/DeployECDSA.s.sol/42220/run-1712924455.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xcf3af4c75a60a7d02873340b7078ac4e2d32af989899e93cc3fdb42d6b36292b", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0x8104e3ad430ea6d354d013a6789fdfc71e671c43", + "function": null, + "arguments": null, + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xa28d7", + "value": "0x0", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657610740908161001c8239f35b600080fdfe608060408181526004918236101561001657600080fd5b600090813560e01c90816320709efc14610459575080636d61fe70146103a05780638a91b0e31461032e57806397003203146102e8578063aacbd72a1461028e578063d60b347f14610240578063d68f602514610124578063ecd05961146100e55763f551e2ee1461008757600080fd5b346100e25760603660031901126100e2576100a0610490565b506044359067ffffffffffffffff82116100e257506100c76020936100d0923691016104ab565b9060243561060a565b90516001600160e01b03199091168152f35b80fd5b50919034610120576020366003190112610120576020925081359160018314928315610116575b5050519015158152f35b149150388061010c565b8280fd5b509160603660031901126101205761013a610490565b9267ffffffffffffffff6044358181116101205761015b90369085016104ab565b505033825260208281528483205490956001600160a01b039182169116036101f157835192858401918211848310176101de575083949291945283815282519382859384528251928382860152825b8481106101c857505050828201840152601f01601f19168101030190f35b81810183015188820188015287955082016101aa565b634e487b7160e01b835260419052602482fd5b835162461bcd60e51b8152808401869052602360248201527f454344534156616c696461746f723a2073656e646572206973206e6f74206f776044820152623732b960e91b6064820152608490fd5b50903461028a57602036600319011261028a57602090610281610261610490565b6001600160a01b0390811660009081526020819052604090205416151590565b90519015158152f35b5080fd5b5082606036600319011261028a5767ffffffffffffffff9080358281116102e4576102bc90369083016104ab565b50506024358015150361012057604435918211610120576102df913691016104ab565b505080f35b8380fd5b506003199082823601126100e25783359167ffffffffffffffff831161028a576101209083360301126100e25750602092610327916024359101610542565b9051908152f35b5091602036600319011261012057803567ffffffffffffffff81116102e45761035a90369083016104ab565b5050336000908152602081905260409020546001600160a01b03161561038a575081903382528160205281205580f35b602491519063f91bd6f160e01b82523390820152fd5b5091602036600319011261012057803567ffffffffffffffff81116102e4576103cc90369083016104ab565b33600090815260208190526040902054919290916001600160a01b03166104425750601411610120573560601c90338352826020528220816bffffffffffffffffffffffff60a01b825416179055337fa5e1f8b4009110f5525798d04ae2125421a12d0590aa52c13682ff1bd3c492ca8380a380f35b6024908451906393360fbf60e01b82523390820152fd5b90508234610120576020366003190112610120576020926001600160a01b03919082610483610490565b1681528085522054168152f35b600435906001600160a01b03821682036104a657565b600080fd5b9181601f840112156104a65782359167ffffffffffffffff83116104a657602083818601950101116104a657565b92919267ffffffffffffffff9182811161052c5760405192601f8201601f19908116603f011684019081118482101761052c576040528294818452818301116104a6578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b3360009081526020819052604081205490926001600160a01b03918216926101008101359036819003601e1901821215610606570180359067ffffffffffffffff82116106065760200191813603831361060657836105ab6105a53685876104d9565b836106a2565b1685146105fe576105ef926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916104d9565b906106a2565b16036105f85790565b50600190565b505050505090565b8580fd5b919033600052600060205260018060a01b0391826040600020541693836106356105a53685876104d9565b16851461069157610674926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c6004209236916104d9565b160361068557630b135d3f60e11b90565b6001600160e01b031990565b50630b135d3f60e11b949350505050565b919091602060016080600082948390604080998151986106e0575b5050505afa51923d156106d257600060605252565b638baa579f6000526004601cfd5b8492835287808201518352828251146107205760418251146107095750505090503888816106bd565b60609384830151901a9052015190523888816106bd565b9250015190601b8260ff1c019052848060ff1b03166060523888816106bd56", + "nonce": "0xa", + "chainId": "0xa4ec", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xb8015", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xcf3af4c75a60a7d02873340b7078ac4e2d32af989899e93cc3fdb42d6b36292b", + "transactionIndex": "0x3", + "blockHash": "0xe18d5a96741bb842dd23cf01cf69f7bf55b1b15205bacd899b86bb611fcc6f22", + "blockNumber": "0x17e3e99", + "gasUsed": "0x6f25b", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712924455, + "chain": 42220, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/DeployECDSA.s.sol/42220/run-latest.json b/broadcast/DeployECDSA.s.sol/42220/run-latest.json new file mode 100644 index 00000000..d577d1db --- /dev/null +++ b/broadcast/DeployECDSA.s.sol/42220/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xcf3af4c75a60a7d02873340b7078ac4e2d32af989899e93cc3fdb42d6b36292b", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0x8104e3ad430ea6d354d013a6789fdfc71e671c43", + "function": null, + "arguments": null, + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xa28d7", + "value": "0x0", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657610740908161001c8239f35b600080fdfe608060408181526004918236101561001657600080fd5b600090813560e01c90816320709efc14610459575080636d61fe70146103a05780638a91b0e31461032e57806397003203146102e8578063aacbd72a1461028e578063d60b347f14610240578063d68f602514610124578063ecd05961146100e55763f551e2ee1461008757600080fd5b346100e25760603660031901126100e2576100a0610490565b506044359067ffffffffffffffff82116100e257506100c76020936100d0923691016104ab565b9060243561060a565b90516001600160e01b03199091168152f35b80fd5b50919034610120576020366003190112610120576020925081359160018314928315610116575b5050519015158152f35b149150388061010c565b8280fd5b509160603660031901126101205761013a610490565b9267ffffffffffffffff6044358181116101205761015b90369085016104ab565b505033825260208281528483205490956001600160a01b039182169116036101f157835192858401918211848310176101de575083949291945283815282519382859384528251928382860152825b8481106101c857505050828201840152601f01601f19168101030190f35b81810183015188820188015287955082016101aa565b634e487b7160e01b835260419052602482fd5b835162461bcd60e51b8152808401869052602360248201527f454344534156616c696461746f723a2073656e646572206973206e6f74206f776044820152623732b960e91b6064820152608490fd5b50903461028a57602036600319011261028a57602090610281610261610490565b6001600160a01b0390811660009081526020819052604090205416151590565b90519015158152f35b5080fd5b5082606036600319011261028a5767ffffffffffffffff9080358281116102e4576102bc90369083016104ab565b50506024358015150361012057604435918211610120576102df913691016104ab565b505080f35b8380fd5b506003199082823601126100e25783359167ffffffffffffffff831161028a576101209083360301126100e25750602092610327916024359101610542565b9051908152f35b5091602036600319011261012057803567ffffffffffffffff81116102e45761035a90369083016104ab565b5050336000908152602081905260409020546001600160a01b03161561038a575081903382528160205281205580f35b602491519063f91bd6f160e01b82523390820152fd5b5091602036600319011261012057803567ffffffffffffffff81116102e4576103cc90369083016104ab565b33600090815260208190526040902054919290916001600160a01b03166104425750601411610120573560601c90338352826020528220816bffffffffffffffffffffffff60a01b825416179055337fa5e1f8b4009110f5525798d04ae2125421a12d0590aa52c13682ff1bd3c492ca8380a380f35b6024908451906393360fbf60e01b82523390820152fd5b90508234610120576020366003190112610120576020926001600160a01b03919082610483610490565b1681528085522054168152f35b600435906001600160a01b03821682036104a657565b600080fd5b9181601f840112156104a65782359167ffffffffffffffff83116104a657602083818601950101116104a657565b92919267ffffffffffffffff9182811161052c5760405192601f8201601f19908116603f011684019081118482101761052c576040528294818452818301116104a6578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b3360009081526020819052604081205490926001600160a01b03918216926101008101359036819003601e1901821215610606570180359067ffffffffffffffff82116106065760200191813603831361060657836105ab6105a53685876104d9565b836106a2565b1685146105fe576105ef926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916104d9565b906106a2565b16036105f85790565b50600190565b505050505090565b8580fd5b919033600052600060205260018060a01b0391826040600020541693836106356105a53685876104d9565b16851461069157610674926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c6004209236916104d9565b160361068557630b135d3f60e11b90565b6001600160e01b031990565b50630b135d3f60e11b949350505050565b919091602060016080600082948390604080998151986106e0575b5050505afa51923d156106d257600060605252565b638baa579f6000526004601cfd5b8492835287808201518352828251146107205760418251146107095750505090503888816106bd565b60609384830151901a9052015190523888816106bd565b9250015190601b8260ff1c019052848060ff1b03166060523888816106bd56", + "nonce": "0xa", + "chainId": "0xa4ec", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0xb8015", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xcf3af4c75a60a7d02873340b7078ac4e2d32af989899e93cc3fdb42d6b36292b", + "transactionIndex": "0x3", + "blockHash": "0xe18d5a96741bb842dd23cf01cf69f7bf55b1b15205bacd899b86bb611fcc6f22", + "blockNumber": "0x17e3e99", + "gasUsed": "0x6f25b", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712924455, + "chain": 42220, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/DeployECDSA.s.sol/44787/run-1712924509.json b/broadcast/DeployECDSA.s.sol/44787/run-1712924509.json new file mode 100644 index 00000000..32e7de2d --- /dev/null +++ b/broadcast/DeployECDSA.s.sol/44787/run-1712924509.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xd91b307d7aedc6223c7e88585f8f16a186fcca09d527863680546b31ed98a680", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0x8104e3ad430ea6d354d013a6789fdfc71e671c43", + "function": null, + "arguments": null, + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xa28d7", + "value": "0x0", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657610740908161001c8239f35b600080fdfe608060408181526004918236101561001657600080fd5b600090813560e01c90816320709efc14610459575080636d61fe70146103a05780638a91b0e31461032e57806397003203146102e8578063aacbd72a1461028e578063d60b347f14610240578063d68f602514610124578063ecd05961146100e55763f551e2ee1461008757600080fd5b346100e25760603660031901126100e2576100a0610490565b506044359067ffffffffffffffff82116100e257506100c76020936100d0923691016104ab565b9060243561060a565b90516001600160e01b03199091168152f35b80fd5b50919034610120576020366003190112610120576020925081359160018314928315610116575b5050519015158152f35b149150388061010c565b8280fd5b509160603660031901126101205761013a610490565b9267ffffffffffffffff6044358181116101205761015b90369085016104ab565b505033825260208281528483205490956001600160a01b039182169116036101f157835192858401918211848310176101de575083949291945283815282519382859384528251928382860152825b8481106101c857505050828201840152601f01601f19168101030190f35b81810183015188820188015287955082016101aa565b634e487b7160e01b835260419052602482fd5b835162461bcd60e51b8152808401869052602360248201527f454344534156616c696461746f723a2073656e646572206973206e6f74206f776044820152623732b960e91b6064820152608490fd5b50903461028a57602036600319011261028a57602090610281610261610490565b6001600160a01b0390811660009081526020819052604090205416151590565b90519015158152f35b5080fd5b5082606036600319011261028a5767ffffffffffffffff9080358281116102e4576102bc90369083016104ab565b50506024358015150361012057604435918211610120576102df913691016104ab565b505080f35b8380fd5b506003199082823601126100e25783359167ffffffffffffffff831161028a576101209083360301126100e25750602092610327916024359101610542565b9051908152f35b5091602036600319011261012057803567ffffffffffffffff81116102e45761035a90369083016104ab565b5050336000908152602081905260409020546001600160a01b03161561038a575081903382528160205281205580f35b602491519063f91bd6f160e01b82523390820152fd5b5091602036600319011261012057803567ffffffffffffffff81116102e4576103cc90369083016104ab565b33600090815260208190526040902054919290916001600160a01b03166104425750601411610120573560601c90338352826020528220816bffffffffffffffffffffffff60a01b825416179055337fa5e1f8b4009110f5525798d04ae2125421a12d0590aa52c13682ff1bd3c492ca8380a380f35b6024908451906393360fbf60e01b82523390820152fd5b90508234610120576020366003190112610120576020926001600160a01b03919082610483610490565b1681528085522054168152f35b600435906001600160a01b03821682036104a657565b600080fd5b9181601f840112156104a65782359167ffffffffffffffff83116104a657602083818601950101116104a657565b92919267ffffffffffffffff9182811161052c5760405192601f8201601f19908116603f011684019081118482101761052c576040528294818452818301116104a6578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b3360009081526020819052604081205490926001600160a01b03918216926101008101359036819003601e1901821215610606570180359067ffffffffffffffff82116106065760200191813603831361060657836105ab6105a53685876104d9565b836106a2565b1685146105fe576105ef926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916104d9565b906106a2565b16036105f85790565b50600190565b505050505090565b8580fd5b919033600052600060205260018060a01b0391826040600020541693836106356105a53685876104d9565b16851461069157610674926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c6004209236916104d9565b160361068557630b135d3f60e11b90565b6001600160e01b031990565b50630b135d3f60e11b949350505050565b919091602060016080600082948390604080998151986106e0575b5050505afa51923d156106d257600060605252565b638baa579f6000526004601cfd5b8492835287808201518352828251146107205760418251146107095750505090503888816106bd565b60609384830151901a9052015190523888816106bd565b9250015190601b8260ff1c019052848060ff1b03166060523888816106bd56", + "nonce": "0xa", + "chainId": "0xaef3", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x6f25b", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xd91b307d7aedc6223c7e88585f8f16a186fcca09d527863680546b31ed98a680", + "transactionIndex": "0x0", + "blockHash": "0x32f80ab5be794c44e610dce5ca1ddae5fac15c73033285a5cdf61e2859815dd1", + "blockNumber": "0x166aed1", + "gasUsed": "0x6f25b", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712924509, + "chain": 44787, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/DeployECDSA.s.sol/44787/run-latest.json b/broadcast/DeployECDSA.s.sol/44787/run-latest.json new file mode 100644 index 00000000..32e7de2d --- /dev/null +++ b/broadcast/DeployECDSA.s.sol/44787/run-latest.json @@ -0,0 +1,49 @@ +{ + "transactions": [ + { + "hash": "0xd91b307d7aedc6223c7e88585f8f16a186fcca09d527863680546b31ed98a680", + "transactionType": "CREATE2", + "contractName": "ECDSAValidator", + "contractAddress": "0x8104e3ad430ea6d354d013a6789fdfc71e671c43", + "function": null, + "arguments": null, + "transaction": { + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "gas": "0xa28d7", + "value": "0x0", + "input": "0x00000000000000000000000000000000000000000000000000000000000000006080806040523461001657610740908161001c8239f35b600080fdfe608060408181526004918236101561001657600080fd5b600090813560e01c90816320709efc14610459575080636d61fe70146103a05780638a91b0e31461032e57806397003203146102e8578063aacbd72a1461028e578063d60b347f14610240578063d68f602514610124578063ecd05961146100e55763f551e2ee1461008757600080fd5b346100e25760603660031901126100e2576100a0610490565b506044359067ffffffffffffffff82116100e257506100c76020936100d0923691016104ab565b9060243561060a565b90516001600160e01b03199091168152f35b80fd5b50919034610120576020366003190112610120576020925081359160018314928315610116575b5050519015158152f35b149150388061010c565b8280fd5b509160603660031901126101205761013a610490565b9267ffffffffffffffff6044358181116101205761015b90369085016104ab565b505033825260208281528483205490956001600160a01b039182169116036101f157835192858401918211848310176101de575083949291945283815282519382859384528251928382860152825b8481106101c857505050828201840152601f01601f19168101030190f35b81810183015188820188015287955082016101aa565b634e487b7160e01b835260419052602482fd5b835162461bcd60e51b8152808401869052602360248201527f454344534156616c696461746f723a2073656e646572206973206e6f74206f776044820152623732b960e91b6064820152608490fd5b50903461028a57602036600319011261028a57602090610281610261610490565b6001600160a01b0390811660009081526020819052604090205416151590565b90519015158152f35b5080fd5b5082606036600319011261028a5767ffffffffffffffff9080358281116102e4576102bc90369083016104ab565b50506024358015150361012057604435918211610120576102df913691016104ab565b505080f35b8380fd5b506003199082823601126100e25783359167ffffffffffffffff831161028a576101209083360301126100e25750602092610327916024359101610542565b9051908152f35b5091602036600319011261012057803567ffffffffffffffff81116102e45761035a90369083016104ab565b5050336000908152602081905260409020546001600160a01b03161561038a575081903382528160205281205580f35b602491519063f91bd6f160e01b82523390820152fd5b5091602036600319011261012057803567ffffffffffffffff81116102e4576103cc90369083016104ab565b33600090815260208190526040902054919290916001600160a01b03166104425750601411610120573560601c90338352826020528220816bffffffffffffffffffffffff60a01b825416179055337fa5e1f8b4009110f5525798d04ae2125421a12d0590aa52c13682ff1bd3c492ca8380a380f35b6024908451906393360fbf60e01b82523390820152fd5b90508234610120576020366003190112610120576020926001600160a01b03919082610483610490565b1681528085522054168152f35b600435906001600160a01b03821682036104a657565b600080fd5b9181601f840112156104a65782359167ffffffffffffffff83116104a657602083818601950101116104a657565b92919267ffffffffffffffff9182811161052c5760405192601f8201601f19908116603f011684019081118482101761052c576040528294818452818301116104a6578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b3360009081526020819052604081205490926001600160a01b03918216926101008101359036819003601e1901821215610606570180359067ffffffffffffffff82116106065760200191813603831361060657836105ab6105a53685876104d9565b836106a2565b1685146105fe576105ef926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916104d9565b906106a2565b16036105f85790565b50600190565b505050505090565b8580fd5b919033600052600060205260018060a01b0391826040600020541693836106356105a53685876104d9565b16851461069157610674926105e9916020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c6004209236916104d9565b160361068557630b135d3f60e11b90565b6001600160e01b031990565b50630b135d3f60e11b949350505050565b919091602060016080600082948390604080998151986106e0575b5050505afa51923d156106d257600060605252565b638baa579f6000526004601cfd5b8492835287808201518352828251146107205760418251146107095750505090503888816106bd565b60609384830151901a9052015190523888816106bd565b9250015190601b8260ff1c019052848060ff1b03166060523888816106bd56", + "nonce": "0xa", + "chainId": "0xaef3", + "accessList": null, + "type": null + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x6f25b", + "logs": [], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "type": "0x0", + "transactionHash": "0xd91b307d7aedc6223c7e88585f8f16a186fcca09d527863680546b31ed98a680", + "transactionIndex": "0x0", + "blockHash": "0x32f80ab5be794c44e610dce5ca1ddae5fac15c73033285a5cdf61e2859815dd1", + "blockNumber": "0x166aed1", + "gasUsed": "0x6f25b", + "effectiveGasPrice": "0x2540be400", + "from": "0x9775137314fe595c943712b0b336327dfa80ae8a", + "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", + "contractAddress": null + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1712924509, + "chain": 44787, + "commit": "74b863b" +} \ No newline at end of file diff --git a/broadcast/DeployWeightedECDSA.s.sol/80001/run-1695305026.json b/broadcast/DeployWeightedECDSA.s.sol/80001/run-1695305026.json deleted file mode 100644 index 11dfcc67..00000000 --- a/broadcast/DeployWeightedECDSA.s.sol/80001/run-1695305026.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "transactions": [ - { - "hash": "0xa634526a3e1e346707cc64143ee18503821c53879519fc0b9e60da68af444e70", - "transactionType": "CREATE2", - "contractName": "WeightedECDSAValidator", - "contractAddress": "0xa24C32F45092AfB64F79CF0D31361000D5b70BD5", - "function": null, - "arguments": null, - "transaction": { - "type": "0x00", - "from": "0xa02cddfa44b8c01b4257f54ac1c43f75801e8175", - "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "gas": "0x19954d", - "value": "0x0", - "data": "0x00000000000000000000000000000000000000000000000000000000000000006101203461011c57306080524660a0526040906001600160401b03908083018281118282101761010657835260168152602081017f5765696768746564454344534156616c696461746f72000000000000000000008152835190848201938285109085111761010657602060019260a09587528381520192603160f81b845251902091208160c0528060e0528351917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152838201524660608201523060808201522090610100918252516114e4918261012283396080518261110a015260a0518261112d015260c0518261119f015260e051826111c5015251816110e90152f35b634e487b7160e01b600052604160045260246000fd5b600080fdfe6040608081526004908136101561001557600080fd5b600090813560e01c80630c9595561461098b578063333daf921461094e5780633a871cdd1461090b5780634f1169a8146108b2578063666d05f4146108335780638025aa49146105c457806384b0196e146104ed5780638fc925aa146104175780639469d148146103945780639ea9bd5914610352578063b2e2c99b14610186578063e6f68b9f146101265763fb6f93f9146100b057600080fd5b34610122576020366003190112610122578235825260026020528082203383526020528120805460ff81168481101561010f57906100fa8260029315908115610104575b50610f87565b60ff191617905580f35b6001915014866100f4565b634e487b7160e01b845260218552602484fd5b5080fd5b50346101225760203660031901126101225760809181906001600160a01b0361014d610e21565b16815280602052205481519162ffffff80831684528260181c16602084015265ffffffffffff8260301c169083015260601c6060820152f35b5082903461034e578060031936011261034e578135906101a4610e37565b338552600160209081528286206001600160a01b039092168087529181528286205462ffffff939190841615610315578487526002815281872083885281528187209460ff86541687811015610302576101fe9015610f87565b8752600381528187203388528152818720838852815281872080549660ff88169060028210156102ef57509061023689939215610fca565b600160ff1980991617905533825260018152828220848352815261028661026886858520541687895460381c16610f70565b875462ffffff60381b191660389190911b62ffffff60381b16178755565b85549382525285209180835460181c16908260381c1610156102a6578480f35b6102e793600191161782556102c865ffffffffffff80925460301c1642611006565b825466ffffffffffff001916911660081b66ffffffffffff0016179055565b818080808480f35b634e487b7160e01b8a5260219052602489fd5b634e487b7160e01b895260218852602489fd5b8590606492519162461bcd60e51b8352820152601460248201527311dd585c991a585b881b9bdd08195b98589b195960621b6044820152fd5b8280fd5b503461012257806003193601126101225761036b610e21565b506024356001600160401b03811161034e5760209361038c91369101610def565b505051908152f35b50346101225780600319360112610122576103ad610e37565b83358352600260209081528284206001600160a01b039092168452528082205481519260ff82169085821015610404576060858562ffffff8686845265ffffffffffff8160081c16602085015260381c1690820152f35b634e487b7160e01b815260218652602490fd5b506020928360031936011261034e5780356001600160401b0381116104e9576104439036908301610def565b505033835282845262ffffff8284205416156104ba57503382528183528082205460601c5b6001600160a01b03908116903382146104ab5781845260019081865283852033865286528385205460181c16918452845281832033845284528282812055610468565b50508180933382525281205580f35b83606492519162461bcd60e51b8352820152600b60248201526a139bdd08195b98589b195960aa1b6044820152fd5b8380fd5b5090346105c157806003193601126105c1579080519061050c82610ebe565b60168252602092752bb2b4b3b43a32b222a1a229a0ab30b634b230ba37b960511b8484015261057982519261054084610ebe565b600193848152603160f81b8782015261056c825196600f60f81b885260e08989015260e0880190610e4d565b9186830390870152610e4d565b4660608501523060808501528160a085015283810360c0850152846060519182815201946080925b8281106105ae5785870386f35b83518752958101959281019284016105a1565b80fd5b5034610122576060366003190112610122576105de610e37565b906044356001600160401b0381116104e9576105fd9036908601610def565b939085358083526002906020918083528585209360018060a01b038098169485875284528686209760ff91828a54168c8110156108205761063e9015610f87565b875b6041808d048210156107cc576106918b8051898b8201927f067fee5d1749b3f616375b51aab37cde80fb2cfe2f38b20d4a277ec1cbc21acd84528201528d815261068981610e8d565b5190206110e7565b818302918383048114841517156107b8576001928385018086116107a25782810292818404149015171561078d578f6106e093926106da926106d39289611013565b369161102b565b90611071565b878b5260038952848c8c20911690818c5289528b8b208a8c5289528b8b2080548781168981101561077757938093929161071e610772979615610fca565b60ff19161790558b5288528a8a20898b52885261076d61074f8d8d8d62ffffff918291205416915460381c16610f70565b8d5462ffffff60381b191660389190911b62ffffff60381b16178d55565b610f21565b610640565b50508f8c6021602492634e487b7160e01b835252fd5b508f8c6011602492634e487b7160e01b835252fd5b50508f8c6011602492634e487b7160e01b835252fd5b8f8c6011602492634e487b7160e01b835252fd5b89898d8d838c835494825252832062ffffff80825460181c16908460381c1610156107f5578380f35b60016108199360ff19161782556102c865ffffffffffff80925460301c1642611006565b8180808380f35b634e487b7160e01b895260218d52602489fd5b50346101225760603660031901126101225761084d610e37565b6044356001600160a01b0381811692918390036108ae578535855260036020528385209116845260205281832090835260205260ff8183205416905191600282101561089b57602083838152f35b634e487b7160e01b815260218452602490fd5b8480fd5b5090346105c157816003193601126105c157816108cd610e21565b916108d6610e37565b60018060a01b0380941682526001602052838383209116825260205220549082519162ffffff8116835260181c166020820152f35b5082600319926060843601126105c1578135936001600160401b038511610122576101609085360301126105c15750602092610947910161122d565b9051908152f35b5090346105c157816003193601126105c157602435906001600160401b0382116105c1575060209261098291369101610def565b50505160018152f35b5090602080600319360112610122576001600160401b039284358481116104e9576109b99036908701610def565b8194910160808582031261012257843586811161034e5785019481601f8701121561034e578535956109ea87610efa565b966109f786519889610ed9565b808852868089019160051b83010191848311610dc8578701905b828210610dcc57505050848101358781116104e95781019180601f840112156104e9578235610a3f81610efa565b93610a4c87519586610ed9565b818552878086019260051b820101928311610dc85787809101915b838310610db05750505050610a7d848201610f11565b956060809201359765ffffffffffff891689036108ae578151845103610d7b5733855284875262ffffff97888787205416610d4657338652858852610ade33888820906bffffffffffffffffffffffff82549181199060601b169116179055565b855b8351811015610d04576001600160a01b0380610afc8387610f46565b511615610cca578a610b0e8389610f46565b511615610c925780610b208387610f46565b511688526001808b52898920338a528b528b8a8a205416610c4f578b610b46848a610f46565b511690338a52898c528a8a2054881c908b51928c840184811089821117610c39578f908f8f8f929589610b908f9c610c349d819d9b99610bfe9d9b87528b52868b01998a52610f46565b511684528252822033909252528d8d209251835492516001600160b81b031990931691161760189190911b6301000000600160b81b0316179055610bd48388610f46565b5116338a52898c528a8a20906bffffffffffffffffffffffff82549181199060601b169116179055565b8a610c098289610f46565b5116338952888b52898920908c610c24835492828416610f70565b169062ffffff1916179055610f21565b610ae0565b50508f8b6041602492634e487b7160e01b835252fd5b895162461bcd60e51b8152808f018c9052601860248201527f477561726469616e20616c726561647920656e61626c656400000000000000006044820152606490fd5b885162461bcd60e51b8152808e018b9052601260248201527105765696768742063616e6e6f7420626520360741b6044820152606490fd5b885162461bcd60e51b8152808e018b905260146024820152730477561726469616e2063616e6e6f7420626520360641b6044820152606490fd5b33875286895287872080546bffffffffffffffffff000000191660308d901b6bffffffffffff0000000000001617601884901b65ffffff000000161790558680f35b865162461bcd60e51b8152808c01899052600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606490fd5b855162461bcd60e51b8152808b01889052600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b6044820152606490fd5b8190610dbb84610f11565b8152019101908790610a67565b8580fd5b81356001600160a01b0381168103610deb578152908701908701610a11565b8680fd5b9181601f84011215610e1c578235916001600160401b038311610e1c5760208381860195010111610e1c57565b600080fd5b600435906001600160a01b0382168203610e1c57565b602435906001600160a01b0382168203610e1c57565b919082519283825260005b848110610e79575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610e58565b606081019081106001600160401b03821117610ea857604052565b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b03821117610ea857604052565b90601f801991011681019081106001600160401b03821117610ea857604052565b6001600160401b038111610ea85760051b60200190565b359062ffffff82168203610e1c57565b6000198114610f305760010190565b634e487b7160e01b600052601160045260246000fd5b8051821015610f5a5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b91909162ffffff80809416911601918211610f3057565b15610f8e57565b60405162461bcd60e51b815260206004820152601460248201527350726f706f73616c206e6f74206f6e676f696e6760601b6044820152606490fd5b15610fd157565b60405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481d9bdd1959609a1b6044820152606490fd5b91908201809211610f3057565b90939293848311610e1c578411610e1c578101920390565b9291926001600160401b038211610ea85760405191611054601f8201601f191660200184610ed9565b829481845281830111610e1c578281602093846000960137010152565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d156110da57606052604052565b638baa579f90526004601cfd5b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611174575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611155565b903590601e1981360301821215610e1c57018035906001600160401b038211610e1c57602001918136038313610e1c57565b9061123b60608301836111fb565b611282608060405183819460208301966040885281606085015284840137600083828401015260208801356040830152601f80199101168101036060810184520182610ed9565b519020908160005260029081602052604060002033600052602052604060002092600060205260406000209380549560ff871696600497888110156114cf578061149957505065ffffffffffff865460301c1661148d57806101406112e89201906111fb565b919062ffffff825460381c16946000955b604180860488101561145a5761134660405160208101907f067fee5d1749b3f616375b51aab37cde80fb2cfe2f38b20d4a277ec1cbc21acd82528960408201526040815261068981610e8d565b9088818102048114891517156114455760018901808a11611430578082810204821481151715611430576106d38261138894936106da9302908c028a89611013565b86600052600360205260406000209060018060a01b031690816000526020526040600020336000526020526040600020805460ff81168b81101561141b5761140e5791611408939160016114029460ff1916179055600052600160205260406000203360005260205262ffffff6040600020541690611006565b96610f21565b956112f9565b5050509561140890610f21565b60218e634e487b7160e01b6000525260246000fd5b60118d634e487b7160e01b6000525260246000fd5b60118c634e487b7160e01b6000525260246000fd5b5097955097505091505062ffffff9250600360ff198254161790555460181c16111560001461148857600090565b600190565b50505092505050600190565b935096505092506001919350146000146114c857600365ffffffffffff60d01b8460c81b169360ff1916179055565b5060019150565b602189634e487b7160e01b6000525260246000fd", - "nonce": "0x190" - }, - "additionalContracts": [], - "isFixedGasLimit": false - } - ], - "receipts": [ - { - "transactionHash": "0xa634526a3e1e346707cc64143ee18503821c53879519fc0b9e60da68af444e70", - "transactionIndex": "0x7", - "blockHash": "0xf185114dc6dde6b3c0e4f9d6f565aa2ec01ee86c39b9b7728091ab064e594b16", - "blockNumber": "0x267c47a", - "from": "0xA02CDdFa44B8C01b4257F54ac1c43F75801E8175", - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "cumulativeGasUsed": "0x1a845e", - "gasUsed": "0x128594", - "contractAddress": null, - "logs": [ - { - "address": "0x0000000000000000000000000000000000001010", - "topics": [ - "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", - "0x0000000000000000000000000000000000000000000000000000000000001010", - "0x000000000000000000000000a02cddfa44b8c01b4257f54ac1c43f75801e8175", - "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99" - ], - "data": "0x000000000000000000000000000000000000000000000000000677fa1ea62c00000000000000000000000000000000000000000000000000011633372b336590000000000000000000000000000000000000000000001154a17fc27e1daf1e6b000000000000000000000000000000000000000000000000010fbb3d0c8d3990000000000000000000000000000000000000000000001154a1863a783c554a6b", - "blockHash": "0xf185114dc6dde6b3c0e4f9d6f565aa2ec01ee86c39b9b7728091ab064e594b16", - "blockNumber": "0x267c47a", - "transactionHash": "0xa634526a3e1e346707cc64143ee18503821c53879519fc0b9e60da68af444e70", - "transactionIndex": "0x7", - "logIndex": "0x10", - "removed": false - } - ], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000010000000000000000000000020000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000020000000080000040000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000008000000000000000000000000100000001000000000000000000000000000000000000000000000000000000000000000100000", - "type": "0x0", - "effectiveGasPrice": "0x59682f10" - } - ], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1695305026, - "chain": 80001, - "multi": false, - "commit": "a6ecd6a" -} \ No newline at end of file diff --git a/broadcast/DeployWeightedECDSA.s.sol/80001/run-latest.json b/broadcast/DeployWeightedECDSA.s.sol/80001/run-latest.json deleted file mode 100644 index 11dfcc67..00000000 --- a/broadcast/DeployWeightedECDSA.s.sol/80001/run-latest.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "transactions": [ - { - "hash": "0xa634526a3e1e346707cc64143ee18503821c53879519fc0b9e60da68af444e70", - "transactionType": "CREATE2", - "contractName": "WeightedECDSAValidator", - "contractAddress": "0xa24C32F45092AfB64F79CF0D31361000D5b70BD5", - "function": null, - "arguments": null, - "transaction": { - "type": "0x00", - "from": "0xa02cddfa44b8c01b4257f54ac1c43f75801e8175", - "to": "0x4e59b44847b379578588920ca78fbf26c0b4956c", - "gas": "0x19954d", - "value": "0x0", - "data": "0x00000000000000000000000000000000000000000000000000000000000000006101203461011c57306080524660a0526040906001600160401b03908083018281118282101761010657835260168152602081017f5765696768746564454344534156616c696461746f72000000000000000000008152835190848201938285109085111761010657602060019260a09587528381520192603160f81b845251902091208160c0528060e0528351917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152838201524660608201523060808201522090610100918252516114e4918261012283396080518261110a015260a0518261112d015260c0518261119f015260e051826111c5015251816110e90152f35b634e487b7160e01b600052604160045260246000fd5b600080fdfe6040608081526004908136101561001557600080fd5b600090813560e01c80630c9595561461098b578063333daf921461094e5780633a871cdd1461090b5780634f1169a8146108b2578063666d05f4146108335780638025aa49146105c457806384b0196e146104ed5780638fc925aa146104175780639469d148146103945780639ea9bd5914610352578063b2e2c99b14610186578063e6f68b9f146101265763fb6f93f9146100b057600080fd5b34610122576020366003190112610122578235825260026020528082203383526020528120805460ff81168481101561010f57906100fa8260029315908115610104575b50610f87565b60ff191617905580f35b6001915014866100f4565b634e487b7160e01b845260218552602484fd5b5080fd5b50346101225760203660031901126101225760809181906001600160a01b0361014d610e21565b16815280602052205481519162ffffff80831684528260181c16602084015265ffffffffffff8260301c169083015260601c6060820152f35b5082903461034e578060031936011261034e578135906101a4610e37565b338552600160209081528286206001600160a01b039092168087529181528286205462ffffff939190841615610315578487526002815281872083885281528187209460ff86541687811015610302576101fe9015610f87565b8752600381528187203388528152818720838852815281872080549660ff88169060028210156102ef57509061023689939215610fca565b600160ff1980991617905533825260018152828220848352815261028661026886858520541687895460381c16610f70565b875462ffffff60381b191660389190911b62ffffff60381b16178755565b85549382525285209180835460181c16908260381c1610156102a6578480f35b6102e793600191161782556102c865ffffffffffff80925460301c1642611006565b825466ffffffffffff001916911660081b66ffffffffffff0016179055565b818080808480f35b634e487b7160e01b8a5260219052602489fd5b634e487b7160e01b895260218852602489fd5b8590606492519162461bcd60e51b8352820152601460248201527311dd585c991a585b881b9bdd08195b98589b195960621b6044820152fd5b8280fd5b503461012257806003193601126101225761036b610e21565b506024356001600160401b03811161034e5760209361038c91369101610def565b505051908152f35b50346101225780600319360112610122576103ad610e37565b83358352600260209081528284206001600160a01b039092168452528082205481519260ff82169085821015610404576060858562ffffff8686845265ffffffffffff8160081c16602085015260381c1690820152f35b634e487b7160e01b815260218652602490fd5b506020928360031936011261034e5780356001600160401b0381116104e9576104439036908301610def565b505033835282845262ffffff8284205416156104ba57503382528183528082205460601c5b6001600160a01b03908116903382146104ab5781845260019081865283852033865286528385205460181c16918452845281832033845284528282812055610468565b50508180933382525281205580f35b83606492519162461bcd60e51b8352820152600b60248201526a139bdd08195b98589b195960aa1b6044820152fd5b8380fd5b5090346105c157806003193601126105c1579080519061050c82610ebe565b60168252602092752bb2b4b3b43a32b222a1a229a0ab30b634b230ba37b960511b8484015261057982519261054084610ebe565b600193848152603160f81b8782015261056c825196600f60f81b885260e08989015260e0880190610e4d565b9186830390870152610e4d565b4660608501523060808501528160a085015283810360c0850152846060519182815201946080925b8281106105ae5785870386f35b83518752958101959281019284016105a1565b80fd5b5034610122576060366003190112610122576105de610e37565b906044356001600160401b0381116104e9576105fd9036908601610def565b939085358083526002906020918083528585209360018060a01b038098169485875284528686209760ff91828a54168c8110156108205761063e9015610f87565b875b6041808d048210156107cc576106918b8051898b8201927f067fee5d1749b3f616375b51aab37cde80fb2cfe2f38b20d4a277ec1cbc21acd84528201528d815261068981610e8d565b5190206110e7565b818302918383048114841517156107b8576001928385018086116107a25782810292818404149015171561078d578f6106e093926106da926106d39289611013565b369161102b565b90611071565b878b5260038952848c8c20911690818c5289528b8b208a8c5289528b8b2080548781168981101561077757938093929161071e610772979615610fca565b60ff19161790558b5288528a8a20898b52885261076d61074f8d8d8d62ffffff918291205416915460381c16610f70565b8d5462ffffff60381b191660389190911b62ffffff60381b16178d55565b610f21565b610640565b50508f8c6021602492634e487b7160e01b835252fd5b508f8c6011602492634e487b7160e01b835252fd5b50508f8c6011602492634e487b7160e01b835252fd5b8f8c6011602492634e487b7160e01b835252fd5b89898d8d838c835494825252832062ffffff80825460181c16908460381c1610156107f5578380f35b60016108199360ff19161782556102c865ffffffffffff80925460301c1642611006565b8180808380f35b634e487b7160e01b895260218d52602489fd5b50346101225760603660031901126101225761084d610e37565b6044356001600160a01b0381811692918390036108ae578535855260036020528385209116845260205281832090835260205260ff8183205416905191600282101561089b57602083838152f35b634e487b7160e01b815260218452602490fd5b8480fd5b5090346105c157816003193601126105c157816108cd610e21565b916108d6610e37565b60018060a01b0380941682526001602052838383209116825260205220549082519162ffffff8116835260181c166020820152f35b5082600319926060843601126105c1578135936001600160401b038511610122576101609085360301126105c15750602092610947910161122d565b9051908152f35b5090346105c157816003193601126105c157602435906001600160401b0382116105c1575060209261098291369101610def565b50505160018152f35b5090602080600319360112610122576001600160401b039284358481116104e9576109b99036908701610def565b8194910160808582031261012257843586811161034e5785019481601f8701121561034e578535956109ea87610efa565b966109f786519889610ed9565b808852868089019160051b83010191848311610dc8578701905b828210610dcc57505050848101358781116104e95781019180601f840112156104e9578235610a3f81610efa565b93610a4c87519586610ed9565b818552878086019260051b820101928311610dc85787809101915b838310610db05750505050610a7d848201610f11565b956060809201359765ffffffffffff891689036108ae578151845103610d7b5733855284875262ffffff97888787205416610d4657338652858852610ade33888820906bffffffffffffffffffffffff82549181199060601b169116179055565b855b8351811015610d04576001600160a01b0380610afc8387610f46565b511615610cca578a610b0e8389610f46565b511615610c925780610b208387610f46565b511688526001808b52898920338a528b528b8a8a205416610c4f578b610b46848a610f46565b511690338a52898c528a8a2054881c908b51928c840184811089821117610c39578f908f8f8f929589610b908f9c610c349d819d9b99610bfe9d9b87528b52868b01998a52610f46565b511684528252822033909252528d8d209251835492516001600160b81b031990931691161760189190911b6301000000600160b81b0316179055610bd48388610f46565b5116338a52898c528a8a20906bffffffffffffffffffffffff82549181199060601b169116179055565b8a610c098289610f46565b5116338952888b52898920908c610c24835492828416610f70565b169062ffffff1916179055610f21565b610ae0565b50508f8b6041602492634e487b7160e01b835252fd5b895162461bcd60e51b8152808f018c9052601860248201527f477561726469616e20616c726561647920656e61626c656400000000000000006044820152606490fd5b885162461bcd60e51b8152808e018b9052601260248201527105765696768742063616e6e6f7420626520360741b6044820152606490fd5b885162461bcd60e51b8152808e018b905260146024820152730477561726469616e2063616e6e6f7420626520360641b6044820152606490fd5b33875286895287872080546bffffffffffffffffff000000191660308d901b6bffffffffffff0000000000001617601884901b65ffffff000000161790558680f35b865162461bcd60e51b8152808c01899052600f60248201526e105b1c9958591e48195b98589b1959608a1b6044820152606490fd5b855162461bcd60e51b8152808b01889052600f60248201526e098cadccee8d040dad2e6dac2e8c6d608b1b6044820152606490fd5b8190610dbb84610f11565b8152019101908790610a67565b8580fd5b81356001600160a01b0381168103610deb578152908701908701610a11565b8680fd5b9181601f84011215610e1c578235916001600160401b038311610e1c5760208381860195010111610e1c57565b600080fd5b600435906001600160a01b0382168203610e1c57565b602435906001600160a01b0382168203610e1c57565b919082519283825260005b848110610e79575050826000602080949584010152601f8019910116010190565b602081830181015184830182015201610e58565b606081019081106001600160401b03821117610ea857604052565b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b03821117610ea857604052565b90601f801991011681019081106001600160401b03821117610ea857604052565b6001600160401b038111610ea85760051b60200190565b359062ffffff82168203610e1c57565b6000198114610f305760010190565b634e487b7160e01b600052601160045260246000fd5b8051821015610f5a5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b91909162ffffff80809416911601918211610f3057565b15610f8e57565b60405162461bcd60e51b815260206004820152601460248201527350726f706f73616c206e6f74206f6e676f696e6760601b6044820152606490fd5b15610fd157565b60405162461bcd60e51b815260206004820152600d60248201526c105b1c9958591e481d9bdd1959609a1b6044820152606490fd5b91908201809211610f3057565b90939293848311610e1c578411610e1c578101920390565b9291926001600160401b038211610ea85760405191611054601f8201601f191660200184610ed9565b829481845281830111610e1c578281602093846000960137010152565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d156110da57606052604052565b638baa579f90526004601cfd5b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611174575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611155565b903590601e1981360301821215610e1c57018035906001600160401b038211610e1c57602001918136038313610e1c57565b9061123b60608301836111fb565b611282608060405183819460208301966040885281606085015284840137600083828401015260208801356040830152601f80199101168101036060810184520182610ed9565b519020908160005260029081602052604060002033600052602052604060002092600060205260406000209380549560ff871696600497888110156114cf578061149957505065ffffffffffff865460301c1661148d57806101406112e89201906111fb565b919062ffffff825460381c16946000955b604180860488101561145a5761134660405160208101907f067fee5d1749b3f616375b51aab37cde80fb2cfe2f38b20d4a277ec1cbc21acd82528960408201526040815261068981610e8d565b9088818102048114891517156114455760018901808a11611430578082810204821481151715611430576106d38261138894936106da9302908c028a89611013565b86600052600360205260406000209060018060a01b031690816000526020526040600020336000526020526040600020805460ff81168b81101561141b5761140e5791611408939160016114029460ff1916179055600052600160205260406000203360005260205262ffffff6040600020541690611006565b96610f21565b956112f9565b5050509561140890610f21565b60218e634e487b7160e01b6000525260246000fd5b60118d634e487b7160e01b6000525260246000fd5b60118c634e487b7160e01b6000525260246000fd5b5097955097505091505062ffffff9250600360ff198254161790555460181c16111560001461148857600090565b600190565b50505092505050600190565b935096505092506001919350146000146114c857600365ffffffffffff60d01b8460c81b169360ff1916179055565b5060019150565b602189634e487b7160e01b6000525260246000fd", - "nonce": "0x190" - }, - "additionalContracts": [], - "isFixedGasLimit": false - } - ], - "receipts": [ - { - "transactionHash": "0xa634526a3e1e346707cc64143ee18503821c53879519fc0b9e60da68af444e70", - "transactionIndex": "0x7", - "blockHash": "0xf185114dc6dde6b3c0e4f9d6f565aa2ec01ee86c39b9b7728091ab064e594b16", - "blockNumber": "0x267c47a", - "from": "0xA02CDdFa44B8C01b4257F54ac1c43F75801E8175", - "to": "0x4e59b44847b379578588920cA78FbF26c0B4956C", - "cumulativeGasUsed": "0x1a845e", - "gasUsed": "0x128594", - "contractAddress": null, - "logs": [ - { - "address": "0x0000000000000000000000000000000000001010", - "topics": [ - "0x4dfe1bbbcf077ddc3e01291eea2d5c70c2b422b415d95645b9adcfd678cb1d63", - "0x0000000000000000000000000000000000000000000000000000000000001010", - "0x000000000000000000000000a02cddfa44b8c01b4257f54ac1c43f75801e8175", - "0x000000000000000000000000f903ba9e006193c1527bfbe65fe2123704ea3f99" - ], - "data": "0x000000000000000000000000000000000000000000000000000677fa1ea62c00000000000000000000000000000000000000000000000000011633372b336590000000000000000000000000000000000000000000001154a17fc27e1daf1e6b000000000000000000000000000000000000000000000000010fbb3d0c8d3990000000000000000000000000000000000000000000001154a1863a783c554a6b", - "blockHash": "0xf185114dc6dde6b3c0e4f9d6f565aa2ec01ee86c39b9b7728091ab064e594b16", - "blockNumber": "0x267c47a", - "transactionHash": "0xa634526a3e1e346707cc64143ee18503821c53879519fc0b9e60da68af444e70", - "transactionIndex": "0x7", - "logIndex": "0x10", - "removed": false - } - ], - "status": "0x1", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000010000000000000000000000020000000000000000000008000000000000000000000000000000000000000000000000000000000800000000000000000000100000000000000000000000000000000000000000000000000020000000080000040000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000004000000000000000000001000008000000000000000000000000100000001000000000000000000000000000000000000000000000000000000000000000100000", - "type": "0x0", - "effectiveGasPrice": "0x59682f10" - } - ], - "libraries": [], - "pending": [], - "returns": {}, - "timestamp": 1695305026, - "chain": 80001, - "multi": false, - "commit": "a6ecd6a" -} \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index 1ea2a0fe..b054a2fa 100644 --- a/foundry.toml +++ b/foundry.toml @@ -1,17 +1,16 @@ [profile.default] -src = 'src' -out = 'out' -libs = ['lib'] -solc_version = '0.8.21' -evm_version = 'paris' +src = "src" +out = "out" +libs = ["lib"] bytecode_hash = "none" cbor_metadata = false optimize = true -via-ir = false -runs = 1000000 +via-ir = true +runs = 1000 -[profile.optimized] +[profile.deploy] via-ir = true +# See more config options https://github.com/foundry-rs/foundry/blob/master/crates/config/README.md#all-options [fuzz] -runs = 1024 +runs = 256 diff --git a/gas/ecdsa/report-lite.txt b/gas/ecdsa/report-lite.txt deleted file mode 100644 index 47456d26..00000000 --- a/gas/ecdsa/report-lite.txt +++ /dev/null @@ -1,61 +0,0 @@ -No files changed, compilation skipped - -Running 8 tests for test/foundry/KernelLiteECDSA.t.sol:KernelECDSATest -[PASS] test_disable_mode() (gas: 171411) -[PASS] test_external_call_default() (gas: 23005) -[PASS] test_external_call_execution() (gas: 434541) -[PASS] test_initialize_twice() (gas: 18288) -[PASS] test_set_default_validator() (gas: 369796) -[PASS] test_set_execution() (gas: 395426) -[PASS] test_should_return_address_if_deployed() (gas: 21360) -[PASS] test_validate_signature() (gas: 22840) -Test result: ok. 8 passed; 0 failed; 0 skipped; finished in 2.62ms -| lib/account-abstraction/contracts/core/EntryPoint.sol:EntryPoint contract | | | | | | -|---------------------------------------------------------------------------|-----------------|--------|--------|--------|---------| -| Deployment Cost | Deployment Size | | | | | -| 3665417 | 18206 | | | | | -| Function Name | min | avg | median | max | # calls | -| getNonce | 2729 | 2729 | 2729 | 2729 | 4 | -| getUserOpHash | 2253 | 2273 | 2275 | 2289 | 4 | -| handleOps | 143067 | 157598 | 158576 | 170176 | 4 | -| innerHandleOp | 49569 | 64070 | 65053 | 76605 | 4 | -| receive | 22193 | 22193 | 22193 | 22193 | 4 | - - -| src/factory/KernelFactory.sol:KernelFactory contract | | | | | | -|------------------------------------------------------|-----------------|-------|--------|--------|---------| -| Deployment Cost | Deployment Size | | | | | -| 577582 | 2925 | | | | | -| Function Name | min | avg | median | max | # calls | -| createAccount | 5962 | 97252 | 108664 | 108664 | 9 | -| setImplementation | 22862 | 22862 | 22862 | 22862 | 16 | - - -| src/lite/KernelLiteECDSA.sol:KernelLiteECDSA contract | | | | | | -|-------------------------------------------------------|-----------------|-------|--------|-------|---------| -| Deployment Cost | Deployment Size | | | | | -| 1586991 | 8335 | | | | | -| Function Name | min | avg | median | max | # calls | -| disableMode | 22865 | 22865 | 22865 | 22865 | 1 | -| getDefaultValidator | 341 | 341 | 341 | 341 | 1 | -| getDisabledMode | 577 | 577 | 577 | 577 | 1 | -| getExecution | 1249 | 1249 | 1249 | 1249 | 2 | -| initialize | 3117 | 20852 | 23069 | 23069 | 9 | -| isValidSignature | 6582 | 6582 | 6582 | 6582 | 1 | -| setDefaultValidator | 26810 | 26810 | 26810 | 26810 | 1 | -| setExecution | 49865 | 49865 | 49865 | 49865 | 2 | -| validateUserOp | 35978 | 35978 | 35978 | 35978 | 4 | - - -| src/test/TestValidator.sol:TestValidator contract | | | | | | -|---------------------------------------------------|-----------------|-------|--------|-------|---------| -| Deployment Cost | Deployment Size | | | | | -| 163214 | 843 | | | | | -| Function Name | min | avg | median | max | # calls | -| enable | 1721 | 1721 | 1721 | 1721 | 3 | -| sudoSetCaller | 22559 | 22559 | 22559 | 22559 | 1 | -| validCaller | 748 | 748 | 748 | 748 | 2 | - - - -Ran 1 test suites: 8 tests passed, 0 failed, 0 skipped (8 total tests) diff --git a/gas/ecdsa/report.txt b/gas/ecdsa/report.txt deleted file mode 100644 index 0fa738cd..00000000 --- a/gas/ecdsa/report.txt +++ /dev/null @@ -1,72 +0,0 @@ -No files changed, compilation skipped - -Running 8 tests for test/foundry/KernelECDSA.t.sol:KernelECDSATest -[PASS] test_disable_mode() (gas: 162628) -[PASS] test_external_call_default() (gas: 28886) -[PASS] test_external_call_execution() (gas: 447890) -[PASS] test_initialize_twice() (gas: 18173) -[PASS] test_set_default_validator() (gas: 361110) -[PASS] test_set_execution() (gas: 406029) -[PASS] test_should_return_address_if_deployed() (gas: 21363) -[PASS] test_validate_signature() (gas: 32132) -Test result: ok. 8 passed; 0 failed; 0 skipped; finished in 2.49ms -| lib/account-abstraction/contracts/core/EntryPoint.sol:EntryPoint contract | | | | | | -|---------------------------------------------------------------------------|-----------------|--------|--------|--------|---------| -| Deployment Cost | Deployment Size | | | | | -| 3665417 | 18206 | | | | | -| Function Name | min | avg | median | max | # calls | -| getNonce | 2729 | 2729 | 2729 | 2729 | 4 | -| getUserOpHash | 2253 | 2273 | 2275 | 2289 | 4 | -| handleOps | 134347 | 158576 | 159572 | 180815 | 4 | -| innerHandleOp | 30469 | 54560 | 55583 | 76605 | 4 | -| receive | 22193 | 22193 | 22193 | 22193 | 4 | - - -| src/Kernel.sol:Kernel contract | | | | | | -|--------------------------------|-----------------|-------|--------|-------|---------| -| Deployment Cost | Deployment Size | | | | | -| 1545342 | 8127 | | | | | -| Function Name | min | avg | median | max | # calls | -| disableMode | 3765 | 3765 | 3765 | 3765 | 1 | -| getDefaultValidator | 341 | 341 | 341 | 341 | 1 | -| getDisabledMode | 577 | 577 | 577 | 577 | 1 | -| getExecution | 1249 | 1249 | 1249 | 1249 | 2 | -| initialize | 3046 | 43230 | 48253 | 48253 | 9 | -| isValidSignature | 15897 | 15897 | 15897 | 15897 | 1 | -| setDefaultValidator | 7870 | 7870 | 7870 | 7870 | 1 | -| setExecution | 49865 | 49865 | 49865 | 49865 | 2 | -| validateUserOp | 45773 | 45967 | 45989 | 46119 | 4 | - - -| src/factory/KernelFactory.sol:KernelFactory contract | | | | | | -|------------------------------------------------------|-----------------|--------|--------|--------|---------| -| Deployment Cost | Deployment Size | | | | | -| 577582 | 2925 | | | | | -| Function Name | min | avg | median | max | # calls | -| createAccount | 5962 | 119638 | 133848 | 133848 | 9 | -| setImplementation | 22862 | 22862 | 22862 | 22862 | 8 | - - -| src/test/TestValidator.sol:TestValidator contract | | | | | | -|---------------------------------------------------|-----------------|-------|--------|-------|---------| -| Deployment Cost | Deployment Size | | | | | -| 163214 | 843 | | | | | -| Function Name | min | avg | median | max | # calls | -| enable | 1721 | 1721 | 1721 | 1721 | 3 | -| sudoSetCaller | 22559 | 22559 | 22559 | 22559 | 1 | -| validCaller | 748 | 748 | 748 | 748 | 2 | - - -| src/validator/ECDSAValidator.sol:ECDSAValidator contract | | | | | | -|----------------------------------------------------------|-----------------|-------|--------|-------|---------| -| Deployment Cost | Deployment Size | | | | | -| 252700 | 1290 | | | | | -| Function Name | min | avg | median | max | # calls | -| enable | 24426 | 24426 | 24426 | 24426 | 8 | -| validCaller | 723 | 1389 | 723 | 2723 | 3 | -| validateSignature | 9858 | 9858 | 9858 | 9858 | 1 | -| validateUserOp | 6391 | 6391 | 6391 | 6391 | 4 | - - - -Ran 1 test suites: 8 tests passed, 0 failed, 0 skipped (8 total tests) diff --git a/hardhat.config.ts b/hardhat.config.ts index 5e4a964e..2be8cf10 100644 --- a/hardhat.config.ts +++ b/hardhat.config.ts @@ -1,91 +1,28 @@ -import * as dotenv from 'dotenv' -import { HardhatUserConfig } from "hardhat/config"; +import "@nomicfoundation/hardhat-toolbox"; import "@nomicfoundation/hardhat-foundry"; -import "@nomiclabs/hardhat-ethers"; -import "hardhat-deploy"; -import '@typechain/hardhat' -import "./tasks/test_userOp" -dotenv.config() - - -function getAccounts(): string[] | { mnemonic: string } { - const accs = [] - if (process.env.DEPLOYER_PRIVATE_KEY !== undefined) { - accs.push(process.env.DEPLOYER_PRIVATE_KEY) - } - if (process.env.PAYMASTER_OWNER_PRIVATE_KEY !== undefined) { - accs.push(process.env.PAYMASTER_OWNER_PRIVATE_KEY) - } - return accs -} - +import { HardhatUserConfig } from "hardhat/config"; +import "hardhat-spdx-license-identifier"; +import "hardhat-contract-sizer"; const config: HardhatUserConfig = { solidity: { - version: "0.8.18", + version: "0.8.25", settings: { + viaIR: true, optimizer: { enabled: true, - runs: 1000000 - }, - metadata: { - bytecodeHash: "none" + runs: 1000, }, - viaIR: true - } - }, - networks: { - mumbai: { - url: `https://polygon-mumbai.infura.io/v3/${process.env.INFURA_ID}`, - accounts: getAccounts(), - }, - polygon: { - url: `https://polygon-mainnet.infura.io/v3/${process.env.INFURA_ID}`, - accounts: getAccounts(), - }, - goerli: { - url: `https://goerli.infura.io/v3/${process.env.INFURA_ID}`, - accounts: getAccounts(), - }, - ethereum: { - url: `https://mainnet.infura.io/v3/${process.env.INFURA_ID}`, - accounts: getAccounts(), - }, - avalanche: { - url: `https://avalanche-mainnet.infura.io/v3/${process.env.INFURA_ID}`, - accounts: getAccounts(), - }, - fuji: { - url: `https://avalanche-fuji.infura.io/v3/${process.env.INFURA_ID}`, - accounts: getAccounts(), - }, - arbitrum: { - url: `https://arbitrum-mainnet.infura.io/v3/${process.env.INFURA_ID}`, - accounts: getAccounts(), - }, - arbitrumGoerli: { - url: `https://arbitrum-goerli.infura.io/v3/${process.env.INFURA_ID}`, - accounts: getAccounts(), - }, - optimism: { - url: `https://optimism-mainnet.infura.io/v3/${process.env.INFURA_ID}`, - accounts: getAccounts(), - }, - optimismGoerli: { - url: `https://optimism-goerli.infura.io/v3/${process.env.INFURA_ID}`, - accounts: getAccounts(), - }, - bscTestnet: { - url: `https://sly-indulgent-paper.bsc-testnet.discover.quiknode.pro/ab7e00c229f5967334160958e40fd6a4d893fb93`, - accounts: getAccounts(), - }, - bsc: { - url: `https://wandering-quaint-reel.bsc.quiknode.pro/508c3d245c14adb8689ed4073d29aa5795dfa24e`, - accounts: getAccounts(), - }, - baseGoerli: { - url: `https://icy-long-mountain.base-goerli.quiknode.pro/5b80d93e97cc9412a63c10a30841869abbef9596`, - accounts: getAccounts(), }, + }, + spdxLicenseIdentifier: { + overwrite: false, + runOnCompile: true + }, + contractSizer: { + alphaSort: true, + disambiguatePaths: false, + runOnCompile: true, + strict: true, } }; diff --git a/lib/ExcessivelySafeCall b/lib/ExcessivelySafeCall new file mode 160000 index 00000000..81cd99ce --- /dev/null +++ b/lib/ExcessivelySafeCall @@ -0,0 +1 @@ +Subproject commit 81cd99ce3e69117d665d7601c330ea03b97acce0 diff --git a/lib/I4337 b/lib/I4337 deleted file mode 160000 index dc64859d..00000000 --- a/lib/I4337 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit dc64859d34249e5d26abf7e9c0bc090c720f1914 diff --git a/lib/solady b/lib/solady index a6a95729..9deb9ed3 160000 --- a/lib/solady +++ b/lib/solady @@ -1 +1 @@ -Subproject commit a6a95729f947bb2a24e05e862ba9522c10453a70 +Subproject commit 9deb9ed36a27261a8745db5b7cd7f4cdc3b1cd4e diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index dc25237e..00000000 --- a/package-lock.json +++ /dev/null @@ -1,15093 +0,0 @@ -{ - "name": "@zerodevapp/contracts", - "version": "4.0.0-beta.8", - "lockfileVersion": 2, - "requires": true, - "packages": { - "": { - "name": "@zerodevapp/contracts", - "version": "4.0.0-beta.8", - "dependencies": { - "@account-abstraction/contracts": "^0.6.0", - "dotenv": "^16.0.3" - }, - "devDependencies": { - "@nomicfoundation/hardhat-foundry": "^1.0.0", - "@nomiclabs/hardhat-ethers": "^2.2.3", - "@typechain/ethers-v5": "^10.2.0", - "@typechain/hardhat": "^6.1.5", - "@types/chai": "^4.3.4", - "@types/mocha": "^10.0.1", - "@types/node": "^18.15.11", - "chai": "^4.3.7", - "ethereum-waffle": "^4.0.10", - "hardhat": "^2.13.0", - "hardhat-deploy": "^0.11.26", - "keccak256": "^1.0.6", - "merkletreejs": "^0.3.9", - "ts-node": "^10.9.1", - "typechain": "^8.1.1" - } - }, - "node_modules/@account-abstraction/contracts": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@account-abstraction/contracts/-/contracts-0.6.0.tgz", - "integrity": "sha512-8ooRJuR7XzohMDM4MV34I12Ci2bmxfE9+cixakRL7lA4BAwJKQ3ahvd8FbJa9kiwkUPCUNtj+/zxDQWYYalLMQ==" - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@ensdomains/ens": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", - "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==", - "deprecated": "Please use @ensdomains/ens-contracts", - "dev": true, - "peer": true, - "dependencies": { - "bluebird": "^3.5.2", - "eth-ens-namehash": "^2.0.8", - "solc": "^0.4.20", - "testrpc": "0.0.1", - "web3-utils": "^1.0.0-beta.31" - } - }, - "node_modules/@ensdomains/ens/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", - "dev": true, - "peer": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/@ensdomains/ens/node_modules/get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true, - "peer": true - }, - "node_modules/@ensdomains/ens/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "peer": true, - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "peer": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@ensdomains/ens/node_modules/require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/@ensdomains/ens/node_modules/solc": { - "version": "0.4.26", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", - "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", - "dev": true, - "peer": true, - "dependencies": { - "fs-extra": "^0.30.0", - "memorystream": "^0.3.1", - "require-from-string": "^1.1.0", - "semver": "^5.3.0", - "yargs": "^4.7.1" - }, - "bin": { - "solcjs": "solcjs" - } - }, - "node_modules/@ensdomains/ens/node_modules/string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "peer": true, - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "peer": true, - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", - "dev": true, - "peer": true, - "dependencies": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/@ensdomains/ens/node_modules/y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true, - "peer": true - }, - "node_modules/@ensdomains/ens/node_modules/yargs": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "integrity": "sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==", - "dev": true, - "peer": true, - "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" - } - }, - "node_modules/@ensdomains/ens/node_modules/yargs-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", - "dev": true, - "peer": true, - "dependencies": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" - } - }, - "node_modules/@ensdomains/resolver": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", - "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==", - "deprecated": "Please use @ensdomains/ens-contracts", - "dev": true, - "peer": true - }, - "node_modules/@ethereum-waffle/chai": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-4.0.10.tgz", - "integrity": "sha512-X5RepE7Dn8KQLFO7HHAAe+KeGaX/by14hn90wePGBhzL54tq4Y8JscZFu+/LCwCl6TnkAAy5ebiMoqJ37sFtWw==", - "dev": true, - "dependencies": { - "@ethereum-waffle/provider": "4.0.5", - "debug": "^4.3.4", - "json-bigint": "^1.0.0" - }, - "engines": { - "node": ">=10.0" - }, - "peerDependencies": { - "ethers": "*" - } - }, - "node_modules/@ethereum-waffle/compiler": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-4.0.3.tgz", - "integrity": "sha512-5x5U52tSvEVJS6dpCeXXKvRKyf8GICDwiTwUvGD3/WD+DpvgvaoHOL82XqpTSUHgV3bBq6ma5/8gKUJUIAnJCw==", - "dev": true, - "dependencies": { - "@resolver-engine/imports": "^0.3.3", - "@resolver-engine/imports-fs": "^0.3.3", - "@typechain/ethers-v5": "^10.0.0", - "@types/mkdirp": "^0.5.2", - "@types/node-fetch": "^2.6.1", - "mkdirp": "^0.5.1", - "node-fetch": "^2.6.7" - }, - "engines": { - "node": ">=10.0" - }, - "peerDependencies": { - "ethers": "*", - "solc": "*", - "typechain": "^8.0.0" - } - }, - "node_modules/@ethereum-waffle/compiler/node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/@ethereum-waffle/ens": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-4.0.3.tgz", - "integrity": "sha512-PVLcdnTbaTfCrfSOrvtlA9Fih73EeDvFS28JQnT5M5P4JMplqmchhcZB1yg/fCtx4cvgHlZXa0+rOCAk2Jk0Jw==", - "dev": true, - "engines": { - "node": ">=10.0" - }, - "peerDependencies": { - "@ensdomains/ens": "^0.4.4", - "@ensdomains/resolver": "^0.2.4", - "ethers": "*" - } - }, - "node_modules/@ethereum-waffle/mock-contract": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-4.0.4.tgz", - "integrity": "sha512-LwEj5SIuEe9/gnrXgtqIkWbk2g15imM/qcJcxpLyAkOj981tQxXmtV4XmQMZsdedEsZ/D/rbUAOtZbgwqgUwQA==", - "dev": true, - "engines": { - "node": ">=10.0" - }, - "peerDependencies": { - "ethers": "*" - } - }, - "node_modules/@ethereum-waffle/provider": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-4.0.5.tgz", - "integrity": "sha512-40uzfyzcrPh+Gbdzv89JJTMBlZwzya1YLDyim8mVbEqYLP5VRYWoGp0JMyaizgV3hMoUFRqJKVmIUw4v7r3hYw==", - "dev": true, - "dependencies": { - "@ethereum-waffle/ens": "4.0.3", - "@ganache/ethereum-options": "0.1.4", - "debug": "^4.3.4", - "ganache": "7.4.3" - }, - "engines": { - "node": ">=10.0" - }, - "peerDependencies": { - "ethers": "*" - } - }, - "node_modules/@ethereumjs/block": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", - "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", - "dev": true, - "dependencies": { - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "ethereumjs-util": "^7.1.5", - "merkle-patricia-tree": "^4.2.4" - } - }, - "node_modules/@ethereumjs/block/node_modules/@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/block/node_modules/@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "dev": true, - "dependencies": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/block/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@ethereumjs/block/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethereumjs/blockchain": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", - "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", - "dev": true, - "dependencies": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/ethash": "^1.1.0", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "level-mem": "^5.0.1", - "lru-cache": "^5.1.1", - "semaphore-async-await": "^1.5.1" - } - }, - "node_modules/@ethereumjs/blockchain/node_modules/@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "node_modules/@ethereumjs/blockchain/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@ethereumjs/blockchain/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethereumjs/common": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.0.tgz", - "integrity": "sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA==", - "dev": true, - "dependencies": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.3" - } - }, - "node_modules/@ethereumjs/common/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@ethereumjs/common/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethereumjs/ethash": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", - "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", - "dev": true, - "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" - } - }, - "node_modules/@ethereumjs/ethash/node_modules/buffer-xor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", - "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.1" - } - }, - "node_modules/@ethereumjs/ethash/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@ethereumjs/ethash/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethereumjs/tx": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.4.0.tgz", - "integrity": "sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw==", - "dev": true, - "dependencies": { - "@ethereumjs/common": "^2.6.0", - "ethereumjs-util": "^7.1.3" - } - }, - "node_modules/@ethereumjs/tx/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@ethereumjs/tx/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethereumjs/vm": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.6.0.tgz", - "integrity": "sha512-J2m/OgjjiGdWF2P9bj/4LnZQ1zRoZhY8mRNVw/N3tXliGI8ai1sI1mlDPkLpeUUM4vq54gH6n0ZlSpz8U/qlYQ==", - "dev": true, - "dependencies": { - "@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.3", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "merkle-patricia-tree": "^4.2.2", - "rustbn.js": "~0.2.0" - } - }, - "node_modules/@ethereumjs/vm/node_modules/debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/@ethereumjs/vm/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@ethereumjs/vm/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ethereumjs/vm/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - }, - "node_modules/@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "node_modules/@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" - } - }, - "node_modules/@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "node_modules/@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "node_modules/@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "node_modules/@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "node_modules/@ethersproject/contracts": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", - "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0" - } - }, - "node_modules/@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "node_modules/@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "node_modules/@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ] - }, - "node_modules/@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "node_modules/@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" - } - }, - "node_modules/@ethersproject/providers/node_modules/ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "node_modules/@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" - } - }, - "node_modules/@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "node_modules/@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "node_modules/@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "node_modules/@ganache/ethereum-address": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/ethereum-address/-/ethereum-address-0.1.4.tgz", - "integrity": "sha512-sTkU0M9z2nZUzDeHRzzGlW724xhMLXo2LeX1hixbnjHWY1Zg1hkqORywVfl+g5uOO8ht8T0v+34IxNxAhmWlbw==", - "dev": true, - "dependencies": { - "@ganache/utils": "0.1.4" - } - }, - "node_modules/@ganache/ethereum-options": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/ethereum-options/-/ethereum-options-0.1.4.tgz", - "integrity": "sha512-i4l46taoK2yC41FPkcoDlEVoqHS52wcbHPqJtYETRWqpOaoj9hAg/EJIHLb1t6Nhva2CdTO84bG+qlzlTxjAHw==", - "dev": true, - "dependencies": { - "@ganache/ethereum-address": "0.1.4", - "@ganache/ethereum-utils": "0.1.4", - "@ganache/options": "0.1.4", - "@ganache/utils": "0.1.4", - "bip39": "3.0.4", - "seedrandom": "3.0.5" - } - }, - "node_modules/@ganache/ethereum-utils": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/ethereum-utils/-/ethereum-utils-0.1.4.tgz", - "integrity": "sha512-FKXF3zcdDrIoCqovJmHLKZLrJ43234Em2sde/3urUT/10gSgnwlpFmrv2LUMAmSbX3lgZhW/aSs8krGhDevDAg==", - "dev": true, - "dependencies": { - "@ethereumjs/common": "2.6.0", - "@ethereumjs/tx": "3.4.0", - "@ethereumjs/vm": "5.6.0", - "@ganache/ethereum-address": "0.1.4", - "@ganache/rlp": "0.1.4", - "@ganache/utils": "0.1.4", - "emittery": "0.10.0", - "ethereumjs-abi": "0.6.8", - "ethereumjs-util": "7.1.3" - } - }, - "node_modules/@ganache/ethereum-utils/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@ganache/ethereum-utils/node_modules/ethereumjs-util": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz", - "integrity": "sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@ganache/options": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/options/-/options-0.1.4.tgz", - "integrity": "sha512-zAe/craqNuPz512XQY33MOAG6Si1Xp0hCvfzkBfj2qkuPcbJCq6W/eQ5MB6SbXHrICsHrZOaelyqjuhSEmjXRw==", - "dev": true, - "dependencies": { - "@ganache/utils": "0.1.4", - "bip39": "3.0.4", - "seedrandom": "3.0.5" - } - }, - "node_modules/@ganache/rlp": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/rlp/-/rlp-0.1.4.tgz", - "integrity": "sha512-Do3D1H6JmhikB+6rHviGqkrNywou/liVeFiKIpOBLynIpvZhRCgn3SEDxyy/JovcaozTo/BynHumfs5R085MFQ==", - "dev": true, - "dependencies": { - "@ganache/utils": "0.1.4", - "rlp": "2.2.6" - } - }, - "node_modules/@ganache/rlp/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/@ganache/rlp/node_modules/rlp": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.6.tgz", - "integrity": "sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.1" - }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/@ganache/utils": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/utils/-/utils-0.1.4.tgz", - "integrity": "sha512-oatUueU3XuXbUbUlkyxeLLH3LzFZ4y5aSkNbx6tjSIhVTPeh+AuBKYt4eQ73FFcTB3nj/gZoslgAh5CN7O369w==", - "dev": true, - "dependencies": { - "emittery": "0.10.0", - "keccak": "3.0.1", - "seedrandom": "3.0.5" - }, - "optionalDependencies": { - "@trufflesuite/bigint-buffer": "1.1.9" - } - }, - "node_modules/@ganache/utils/node_modules/keccak": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz", - "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "dev": true, - "dependencies": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/@morgan-stanley/ts-mocking-bird": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@morgan-stanley/ts-mocking-bird/-/ts-mocking-bird-0.6.4.tgz", - "integrity": "sha512-57VJIflP8eR2xXa9cD1LUawh+Gh+BVQfVu0n6GALyg/AqV/Nz25kDRvws3i9kIe1PTrbsZZOYpsYp6bXPd6nVA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.16", - "uuid": "^7.0.3" - }, - "peerDependencies": { - "jasmine": "2.x || 3.x || 4.x", - "jest": "26.x || 27.x || 28.x", - "typescript": ">=4.2" - }, - "peerDependenciesMeta": { - "jasmine": { - "optional": true - }, - "jest": { - "optional": true - } - } - }, - "node_modules/@morgan-stanley/ts-mocking-bird/node_modules/uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@nomicfoundation/ethereumjs-block": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.2.2.tgz", - "integrity": "sha512-atjpt4gc6ZGZUPHBAQaUJsm1l/VCo7FmyQ780tMGO8QStjLdhz09dXynmhwVTy5YbRr0FOh/uX3QaEM0yIB2Zg==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-common": "3.1.2", - "@nomicfoundation/ethereumjs-rlp": "4.0.3", - "@nomicfoundation/ethereumjs-trie": "5.0.5", - "@nomicfoundation/ethereumjs-tx": "4.1.2", - "@nomicfoundation/ethereumjs-util": "8.0.6", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-block/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/ethereumjs-blockchain": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.2.2.tgz", - "integrity": "sha512-6AIB2MoTEPZJLl6IRKcbd8mUmaBAQ/NMe3O7OsAOIiDjMNPPH5KaUQiLfbVlegT4wKIg/GOsFH7XlH2KDVoJNg==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-block": "4.2.2", - "@nomicfoundation/ethereumjs-common": "3.1.2", - "@nomicfoundation/ethereumjs-ethash": "2.0.5", - "@nomicfoundation/ethereumjs-rlp": "4.0.3", - "@nomicfoundation/ethereumjs-trie": "5.0.5", - "@nomicfoundation/ethereumjs-util": "8.0.6", - "abstract-level": "^1.0.3", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "level": "^8.0.0", - "lru-cache": "^5.1.1", - "memory-level": "^1.0.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-blockchain/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/ethereumjs-common": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.1.2.tgz", - "integrity": "sha512-JAEBpIua62dyObHM9KI2b4wHZcRQYYge9gxiygTWa3lNCr2zo+K0TbypDpgiNij5MCGNWP1eboNfNfx1a3vkvA==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-util": "8.0.6", - "crc-32": "^1.2.0" - } - }, - "node_modules/@nomicfoundation/ethereumjs-ethash": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.5.tgz", - "integrity": "sha512-xlLdcICGgAYyYmnI3r1t0R5fKGBJNDQSOQxXNjVO99JmxJIdXR5MgPo5CSJO1RpyzKOgzi3uIFn8agv564dZEQ==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-block": "4.2.2", - "@nomicfoundation/ethereumjs-rlp": "4.0.3", - "@nomicfoundation/ethereumjs-util": "8.0.6", - "abstract-level": "^1.0.3", - "bigint-crypto-utils": "^3.0.23", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-ethash/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/ethereumjs-evm": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.3.2.tgz", - "integrity": "sha512-I00d4MwXuobyoqdPe/12dxUQxTYzX8OckSaWsMcWAfQhgVDvBx6ffPyP/w1aL0NW7MjyerySPcSVfDJAMHjilw==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-common": "3.1.2", - "@nomicfoundation/ethereumjs-util": "8.0.6", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "mcl-wasm": "^0.7.1", - "rustbn.js": "~0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-evm/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/ethereumjs-rlp": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.3.tgz", - "integrity": "sha512-DZMzB/lqPK78T6MluyXqtlRmOMcsZbTTbbEyAjo0ncaff2mqu/k8a79PBcyvpgAhWD/R59Fjq/x3ro5Lof0AtA==", - "dev": true, - "bin": { - "rlp": "bin/rlp" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-statemanager": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.5.tgz", - "integrity": "sha512-CAhzpzTR5toh/qOJIZUUOnWekUXuRqkkzaGAQrVcF457VhtCmr+ddZjjK50KNZ524c1XP8cISguEVNqJ6ij1sA==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-common": "3.1.2", - "@nomicfoundation/ethereumjs-rlp": "4.0.3", - "@nomicfoundation/ethereumjs-trie": "5.0.5", - "@nomicfoundation/ethereumjs-util": "8.0.6", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1" - } - }, - "node_modules/@nomicfoundation/ethereumjs-statemanager/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/ethereumjs-trie": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.5.tgz", - "integrity": "sha512-+8sNZrXkzvA1NH5F4kz5RSYl1I6iaRz7mAZRsyxOm0IVY4UaP43Ofvfp/TwOalFunurQrYB5pRO40+8FBcxFMA==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "4.0.3", - "@nomicfoundation/ethereumjs-util": "8.0.6", - "ethereum-cryptography": "0.1.3", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-trie/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/ethereumjs-tx": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.1.2.tgz", - "integrity": "sha512-emJBJZpmTdUa09cqxQqHaysbBI9Od353ZazeH7WgPb35miMgNY6mb7/3vBA98N5lUW/rgkiItjX0KZfIzihSoQ==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-common": "3.1.2", - "@nomicfoundation/ethereumjs-rlp": "4.0.3", - "@nomicfoundation/ethereumjs-util": "8.0.6", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-tx/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/ethereumjs-util": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.6.tgz", - "integrity": "sha512-jOQfF44laa7xRfbfLXojdlcpkvxeHrE2Xu7tSeITsWFgoII163MzjOwFEzSNozHYieFysyoEMhCdP+NY5ikstw==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-rlp": "4.0.3", - "ethereum-cryptography": "0.1.3" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-util/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/ethereumjs-vm": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.4.2.tgz", - "integrity": "sha512-PRTyxZMP6kx+OdAzBhuH1LD2Yw+hrSpaytftvaK//thDy2OI07S0nrTdbrdk7b8ZVPAc9H9oTwFBl3/wJ3w15g==", - "dev": true, - "dependencies": { - "@nomicfoundation/ethereumjs-block": "4.2.2", - "@nomicfoundation/ethereumjs-blockchain": "6.2.2", - "@nomicfoundation/ethereumjs-common": "3.1.2", - "@nomicfoundation/ethereumjs-evm": "1.3.2", - "@nomicfoundation/ethereumjs-rlp": "4.0.3", - "@nomicfoundation/ethereumjs-statemanager": "1.0.5", - "@nomicfoundation/ethereumjs-trie": "5.0.5", - "@nomicfoundation/ethereumjs-tx": "4.1.2", - "@nomicfoundation/ethereumjs-util": "8.0.6", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "rustbn.js": "~0.2.0" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@nomicfoundation/ethereumjs-vm/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/@nomicfoundation/hardhat-foundry": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-foundry/-/hardhat-foundry-1.0.0.tgz", - "integrity": "sha512-/2cmtIZPnsQj/SRIu9idbBan5j19RD35MECAGmZCcuXX4AO6Wn0nOnpUwpcvGomKW403h4+rXh8AHMWC4Vvw0Q==", - "dev": true, - "dependencies": { - "chalk": "^2.4.2" - }, - "peerDependencies": { - "hardhat": "^2.12.6" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz", - "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==", - "dev": true, - "engines": { - "node": ">= 12" - }, - "optionalDependencies": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1", - "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz", - "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz", - "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-freebsd-x64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz", - "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz", - "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz", - "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz", - "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz", - "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz", - "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz", - "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz", - "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10" - } - }, - "node_modules/@nomiclabs/hardhat-ethers": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz", - "integrity": "sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==", - "dev": true, - "peerDependencies": { - "ethers": "^5.0.0", - "hardhat": "^2.0.0" - } - }, - "node_modules/@resolver-engine/core": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.3.3.tgz", - "integrity": "sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ==", - "dev": true, - "dependencies": { - "debug": "^3.1.0", - "is-url": "^1.2.4", - "request": "^2.85.0" - } - }, - "node_modules/@resolver-engine/core/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@resolver-engine/fs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.3.3.tgz", - "integrity": "sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ==", - "dev": true, - "dependencies": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0" - } - }, - "node_modules/@resolver-engine/fs/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@resolver-engine/imports": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.3.3.tgz", - "integrity": "sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q==", - "dev": true, - "dependencies": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0", - "hosted-git-info": "^2.6.0", - "path-browserify": "^1.0.0", - "url": "^0.11.0" - } - }, - "node_modules/@resolver-engine/imports-fs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz", - "integrity": "sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA==", - "dev": true, - "dependencies": { - "@resolver-engine/fs": "^0.3.3", - "@resolver-engine/imports": "^0.3.3", - "debug": "^3.1.0" - } - }, - "node_modules/@resolver-engine/imports-fs/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@resolver-engine/imports/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ] - }, - "node_modules/@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" - } - }, - "node_modules/@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, - "dependencies": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, - "dependencies": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, - "dependencies": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "dependencies": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/@trufflesuite/bigint-buffer": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.9.tgz", - "integrity": "sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "dependencies": { - "node-gyp-build": "4.3.0" - }, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@trufflesuite/bigint-buffer/node_modules/node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "dev": true, - "optional": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "node_modules/@typechain/ethers-v5": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.0.tgz", - "integrity": "sha512-ikaq0N/w9fABM+G01OFmU3U3dNnyRwEahkdvi9mqy1a3XwKiPZaF/lu54OcNaEWnpvEYyhhS0N7buCtLQqC92w==", - "dev": true, - "dependencies": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.0.0", - "@ethersproject/bytes": "^5.0.0", - "@ethersproject/providers": "^5.0.0", - "ethers": "^5.1.3", - "typechain": "^8.1.1", - "typescript": ">=4.3.0" - } - }, - "node_modules/@typechain/hardhat": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.5.tgz", - "integrity": "sha512-lg7LW4qDZpxFMknp3Xool61Fg6Lays8F8TXdFGBG+MxyYcYU5795P1U2XdStuzGq9S2Dzdgh+1jGww9wvZ6r4Q==", - "dev": true, - "dependencies": { - "fs-extra": "^9.1.0" - }, - "peerDependencies": { - "@ethersproject/abi": "^5.4.7", - "@ethersproject/providers": "^5.4.7", - "@typechain/ethers-v5": "^10.2.0", - "ethers": "^5.4.7", - "hardhat": "^2.9.9", - "typechain": "^8.1.1" - } - }, - "node_modules/@typechain/hardhat/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typechain/hardhat/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@typechain/hardhat/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/@types/abstract-leveldown": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.1.tgz", - "integrity": "sha512-YK8irIC+eMrrmtGx0H4ISn9GgzLd9dojZWJaMbjp1YHLl2VqqNFBNrL5Q3KjGf4VE3sf/4hmq6EhQZ7kZp1NoQ==", - "dev": true - }, - "node_modules/@types/async-eventemitter": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz", - "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==", - "dev": true - }, - "node_modules/@types/bn.js": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", - "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", - "dev": true - }, - "node_modules/@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", - "dev": true - }, - "node_modules/@types/levelup": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", - "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", - "dev": true, - "dependencies": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" - } - }, - "node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true - }, - "node_modules/@types/mkdirp": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", - "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mocha": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", - "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", - "dev": true - }, - "node_modules/@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", - "dev": true - }, - "node_modules/@types/node-fetch": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.3.tgz", - "integrity": "sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==", - "dev": true, - "dependencies": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "node_modules/@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", - "dev": true - }, - "node_modules/@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "node_modules/@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, - "node_modules/abstract-level": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", - "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", - "dev": true, - "dependencies": { - "buffer": "^6.0.3", - "catering": "^2.1.0", - "is-buffer": "^2.0.5", - "level-supports": "^4.0.0", - "level-transcoder": "^1.0.1", - "module-error": "^1.0.1", - "queue-microtask": "^1.2.3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/abstract-leveldown/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/abstract-leveldown/node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true, - "engines": { - "node": ">=0.3.0" - } - }, - "node_modules/aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "dev": true - }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "node_modules/argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "node_modules/array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "dependencies": { - "lodash": "^4.17.14" - } - }, - "node_modules/async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "dependencies": { - "async": "^2.4.0" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "node_modules/at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true - }, - "node_modules/axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dev": true, - "dependencies": { - "follow-redirects": "^1.14.0" - } - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "dependencies": { - "tweetnacl": "^0.14.3" - } - }, - "node_modules/bcrypt-pbkdf/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true - }, - "node_modules/bigint-crypto-utils": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.8.tgz", - "integrity": "sha512-+VMV9Laq8pXLBKKKK49nOoq9bfR3j7NNQAtbA617a4nw9bVLo8rsqkKMBgM2AJWlNX9fEIyYaYX+d0laqYV4tw==", - "dev": true, - "dependencies": { - "bigint-mod-arith": "^3.1.0" - }, - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/bigint-mod-arith": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz", - "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==", - "dev": true, - "engines": { - "node": ">=10.4.0" - } - }, - "node_modules/bignumber.js": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", - "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/bip39": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz", - "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==", - "dev": true, - "dependencies": { - "@types/node": "11.11.6", - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1" - } - }, - "node_modules/bip39/node_modules/@types/node": { - "version": "11.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", - "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==", - "dev": true - }, - "node_modules/blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true - }, - "node_modules/bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true, - "peer": true - }, - "node_modules/bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "node_modules/browser-level": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", - "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", - "dev": true, - "dependencies": { - "abstract-level": "^1.0.2", - "catering": "^2.1.1", - "module-error": "^1.0.2", - "run-parallel-limit": "^1.1.0" - } - }, - "node_modules/browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "node_modules/browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "dependencies": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dev": true, - "dependencies": { - "base-x": "^3.0.2" - } - }, - "node_modules/bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dev": true, - "dependencies": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "node_modules/buffer-reverse": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", - "integrity": "sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==", - "dev": true - }, - "node_modules/buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "node_modules/busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "dependencies": { - "streamsearch": "^1.1.0" - }, - "engines": { - "node": ">=10.16.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "node_modules/catering": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", - "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", - "dev": true, - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "node_modules/cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "node_modules/classic-level": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz", - "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "abstract-level": "^1.0.2", - "catering": "^2.1.0", - "module-error": "^1.0.1", - "napi-macros": "~2.0.0", - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "node_modules/code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "node_modules/command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "dev": true, - "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "dev": true, - "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/core-js-pure": { - "version": "3.29.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.29.1.tgz", - "integrity": "sha512-4En6zYVi0i0XlXHVz/bi6l1XDjCqkKRq765NXuX+SnaIatlE96Odt5lMLjdxUiNI1v9OXI5DSLWYPlmTfkTktg==", - "dev": true, - "hasInstallScript": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/core-js" - } - }, - "node_modules/core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "node_modules/crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true, - "bin": { - "crc32": "bin/crc32.njs" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "node_modules/create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "dependencies": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "node_modules/crypto-js": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", - "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==", - "dev": true - }, - "node_modules/dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "dev": true, - "dependencies": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deferred-leveldown/node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deferred-leveldown/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/deferred-leveldown/node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", - "engines": { - "node": ">=12" - } - }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/encode-utf8": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", - "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", - "dev": true - }, - "node_modules/encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "dev": true, - "dependencies": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "dependencies": { - "ansi-colors": "^4.1.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "dependencies": { - "prr": "~1.0.1" - }, - "bin": { - "errno": "cli.js" - } - }, - "node_modules/error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "peer": true, - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", - "dev": true, - "peer": true, - "dependencies": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - } - }, - "node_modules/eth-ens-namehash/node_modules/js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true, - "peer": true - }, - "node_modules/ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "dev": true, - "dependencies": { - "js-sha3": "^0.8.0" - } - }, - "node_modules/ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", - "dev": true, - "dependencies": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" - } - }, - "node_modules/ethereum-waffle": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-4.0.10.tgz", - "integrity": "sha512-iw9z1otq7qNkGDNcMoeNeLIATF9yKl1M8AIeu42ElfNBplq0e+5PeasQmm8ybY/elkZ1XyRO0JBQxQdVRb8bqQ==", - "dev": true, - "dependencies": { - "@ethereum-waffle/chai": "4.0.10", - "@ethereum-waffle/compiler": "4.0.3", - "@ethereum-waffle/mock-contract": "4.0.4", - "@ethereum-waffle/provider": "4.0.5", - "solc": "0.8.15", - "typechain": "^8.0.0" - }, - "bin": { - "waffle": "bin/waffle" - }, - "engines": { - "node": ">=10.0" - }, - "peerDependencies": { - "ethers": "*" - } - }, - "node_modules/ethereum-waffle/node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/ethereum-waffle/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/ethereum-waffle/node_modules/solc": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.15.tgz", - "integrity": "sha512-Riv0GNHNk/SddN/JyEuFKwbcWcEeho15iyupTSHw5Np6WuXA5D8kEHbyzDHi6sqmvLzu2l+8b1YmL8Ytple+8w==", - "dev": true, - "dependencies": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solc.js" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "dev": true, - "dependencies": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - } - }, - "node_modules/ethereumjs-abi/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "dependencies": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - } - }, - "node_modules/ethereumjs-util/node_modules/@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/ethereumjs-util/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/ethereumjs-util/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://gitcoin.co/grants/13/ethersjs-complete-simple-and-tiny-2" - }, - { - "type": "individual", - "url": "https://www.buymeacoffee.com/ricmoo" - } - ], - "dependencies": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "node_modules/ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "dev": true, - "dependencies": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/ethjs-unit/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true - }, - "node_modules/ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, - "dependencies": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "dependencies": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "node_modules/extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "node_modules/extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true, - "engines": [ - "node >=0.6.0" - ] - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "dependencies": { - "array-back": "^3.0.1" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "dependencies": { - "locate-path": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true, - "bin": { - "flat": "cli.js" - } - }, - "node_modules/fmix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", - "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", - "dev": true, - "dependencies": { - "imul": "^1.0.0" - } - }, - "node_modules/follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true - }, - "node_modules/fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "node_modules/ganache": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.4.3.tgz", - "integrity": "sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA==", - "bundleDependencies": [ - "@trufflesuite/bigint-buffer", - "emittery", - "keccak", - "leveldown", - "secp256k1", - "@types/bn.js", - "@types/lru-cache", - "@types/seedrandom" - ], - "dev": true, - "hasShrinkwrap": true, - "dependencies": { - "@trufflesuite/bigint-buffer": "1.1.10", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "5.1.1", - "@types/seedrandom": "3.0.1", - "emittery": "0.10.0", - "keccak": "3.0.2", - "leveldown": "6.1.0", - "secp256k1": "4.0.3" - }, - "bin": { - "ganache": "dist/node/cli.js", - "ganache-cli": "dist/node/cli.js" - }, - "optionalDependencies": { - "bufferutil": "4.0.5", - "utf-8-validate": "5.0.7" - } - }, - "node_modules/ganache/node_modules/@trufflesuite/bigint-buffer": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz", - "integrity": "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==", - "dev": true, - "hasInstallScript": true, - "inBundle": true, - "license": "Apache-2.0", - "dependencies": { - "node-gyp-build": "4.4.0" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/ganache/node_modules/@trufflesuite/bigint-buffer/node_modules/node-gyp-build": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/ganache/node_modules/@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/ganache/node_modules/@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/@types/node": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", - "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/@types/seedrandom": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz", - "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/ganache/node_modules/bufferutil": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", - "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", - "dev": true, - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - } - }, - "node_modules/ganache/node_modules/catering": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.0.tgz", - "integrity": "sha512-M5imwzQn6y+ODBfgi+cfgZv2hIUI6oYU/0f35Mdb1ujGeqeoI5tOnl9Q13DTH7LW+7er+NYq8stNOKZD/Z3U/A==", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "queue-tick": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/ganache/node_modules/elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/ganache/node_modules/elliptic/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/ganache/node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/ganache/node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/ganache/node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "BSD-3-Clause" - }, - "node_modules/ganache/node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/ganache/node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/ganache/node_modules/keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "dev": true, - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ganache/node_modules/leveldown": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz", - "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==", - "dev": true, - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "abstract-leveldown": "^7.2.0", - "napi-macros": "~2.0.0", - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/ganache/node_modules/leveldown/node_modules/abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "buffer": "^6.0.3", - "catering": "^2.0.0", - "is-buffer": "^2.0.5", - "level-concat-iterator": "^3.0.0", - "level-supports": "^2.0.1", - "queue-microtask": "^1.2.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/leveldown/node_modules/level-concat-iterator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", - "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "catering": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/leveldown/node_modules/level-supports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", - "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/ganache/node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true, - "inBundle": true, - "license": "ISC" - }, - "node_modules/ganache/node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "dev": true, - "inBundle": true, - "license": "MIT", - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/ganache/node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/queue-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.0.tgz", - "integrity": "sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ==", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/ganache/node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/ganache/node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "dev": true, - "hasInstallScript": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/ganache/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/ganache/node_modules/utf-8-validate": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", - "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", - "dev": true, - "optional": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - } - }, - "node_modules/ganache/node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true, - "inBundle": true, - "license": "MIT" - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0" - } - }, - "node_modules/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", - "dev": true, - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/hardhat": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.13.0.tgz", - "integrity": "sha512-ZlzBOLML1QGlm6JWyVAG8lVTEAoOaVm1in/RU2zoGAnYEoD1Rp4T+ZMvrLNhHaaeS9hfjJ1gJUBfiDr4cx+htQ==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-evm": "^1.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@nomicfoundation/ethereumjs-vm": "^6.0.0", - "@nomicfoundation/solidity-analyzer": "^0.1.0", - "@sentry/node": "^5.18.1", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", - "ethereumjs-abi": "^0.6.8", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "7.2.0", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "keccak": "^3.0.2", - "lodash": "^4.17.11", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.0", - "qs": "^6.7.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "solc": "0.7.3", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "tsort": "0.0.1", - "undici": "^5.14.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - }, - "bin": { - "hardhat": "internal/cli/bootstrap.js" - }, - "engines": { - "node": ">=14.0.0" - }, - "peerDependencies": { - "ts-node": "*", - "typescript": "*" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/hardhat-deploy": { - "version": "0.11.26", - "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.26.tgz", - "integrity": "sha512-GvnkD8v6q0coCQbwZNeUcO3ab1zz36FKsqzNdm6EcnVoAfXVkFpdA0pgJ7/Rk3+Lv5709xOtbneFOyoukUOhWQ==", - "dev": true, - "dependencies": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "@ethersproject/solidity": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wallet": "^5.7.0", - "@types/qs": "^6.9.7", - "axios": "^0.21.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.2", - "debug": "^4.3.2", - "enquirer": "^2.3.6", - "ethers": "^5.5.3", - "form-data": "^4.0.0", - "fs-extra": "^10.0.0", - "match-all": "^1.2.6", - "murmur-128": "^0.2.1", - "qs": "^6.9.4", - "zksync-web3": "^0.14.3" - } - }, - "node_modules/hardhat-deploy/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/hardhat-deploy/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/hardhat-deploy/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/hardhat-deploy/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/hardhat-deploy/node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/hardhat-deploy/node_modules/fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/hardhat-deploy/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/hardhat-deploy/node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "dependencies": { - "universalify": "^2.0.0" - }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/hardhat-deploy/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/hardhat-deploy/node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true, - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "node_modules/he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true, - "bin": { - "he": "bin/he" - } - }, - "node_modules/hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "dependencies": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "node_modules/hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - }, - "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "dev": true, - "peer": true, - "dependencies": { - "punycode": "2.1.0" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true - }, - "node_modules/immutable": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", - "dev": true - }, - "node_modules/imul": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", - "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, - "dependencies": { - "fp-ts": "^1.0.0" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "peer": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "engines": { - "node": ">=4" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", - "dev": true, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true - }, - "node_modules/is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true, - "peer": true - }, - "node_modules/isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "node_modules/js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "node_modules/json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dev": true, - "dependencies": { - "bignumber.js": "^9.0.0" - } - }, - "node_modules/json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/keccak": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz", - "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/keccak256": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/keccak256/-/keccak256-1.0.6.tgz", - "integrity": "sha512-8GLiM01PkdJVGUhR1e6M/AvWnSqYS0HaERI+K/QtStGDGlSTx2B1zTqZk4Zlqu5TxHJNTxWAdP9Y+WI50OApUw==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.0", - "buffer": "^6.0.3", - "keccak": "^3.0.2" - } - }, - "node_modules/klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.9" - } - }, - "node_modules/lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", - "dev": true, - "peer": true, - "dependencies": { - "invert-kv": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/level": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", - "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", - "dev": true, - "dependencies": { - "browser-level": "^1.0.1", - "classic-level": "^1.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/level" - } - }, - "node_modules/level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dev": true, - "dependencies": { - "buffer": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-codec/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dev": true, - "dependencies": { - "errno": "~0.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dev": true, - "dependencies": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-mem": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", - "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", - "dev": true, - "dependencies": { - "level-packager": "^5.0.3", - "memdown": "^5.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "dev": true, - "dependencies": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/level-supports": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", - "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/level-transcoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", - "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", - "dev": true, - "dependencies": { - "buffer": "^6.0.3", - "module-error": "^1.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "dev": true, - "dependencies": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/levelup/node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "peer": true, - "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" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "node_modules/lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", - "dev": true, - "peer": true - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/log-symbols/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", - "dev": true, - "dependencies": { - "get-func-name": "^2.0.0" - } - }, - "node_modules/lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "dev": true - }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "node_modules/match-all": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", - "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==", - "dev": true - }, - "node_modules/mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", - "dev": true, - "engines": { - "node": ">=8.9.0" - } - }, - "node_modules/md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "node_modules/memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "dev": true, - "dependencies": { - "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.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/memdown/node_modules/abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "dependencies": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/memdown/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/memdown/node_modules/immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", - "dev": true - }, - "node_modules/memdown/node_modules/level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "dependencies": { - "xtend": "^4.0.2" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/memory-level": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", - "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", - "dev": true, - "dependencies": { - "abstract-level": "^1.0.0", - "functional-red-black-tree": "^1.0.1", - "module-error": "^1.0.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", - "dev": true, - "dependencies": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" - } - }, - "node_modules/merkle-patricia-tree/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/merkle-patricia-tree/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/merkletreejs": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.3.9.tgz", - "integrity": "sha512-NjlATjJr4NEn9s8v/VEHhgwRWaE1eA/Une07d9SEqKzULJi1Wsh0Y3svwJdP2bYLMmgSBHzOrNydMWM1NN9VeQ==", - "dev": true, - "dependencies": { - "bignumber.js": "^9.0.1", - "buffer-reverse": "^1.0.1", - "crypto-js": "^3.1.9-1", - "treeify": "^1.1.0", - "web3-utils": "^1.3.4" - }, - "engines": { - "node": ">= 7.6.0" - } - }, - "node_modules/miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "dependencies": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "bin": { - "miller-rabin": "bin/miller-rabin" - } - }, - "node_modules/miller-rabin/node_modules/bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "node_modules/minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true, - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, - "dependencies": { - "obliterator": "^2.0.0" - } - }, - "node_modules/mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", - "dev": true, - "dependencies": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "engines": { - "node": ">= 14.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/mochajs" - } - }, - "node_modules/mocha/node_modules/ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/mocha/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/mocha/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mocha/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "node_modules/mocha/node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/mocha/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/module-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", - "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/murmur-128": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz", - "integrity": "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==", - "dev": true, - "dependencies": { - "encode-utf8": "^1.0.2", - "fmix": "^0.1.0", - "imul": "^1.0.0" - } - }, - "node_modules/nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "dev": true - }, - "node_modules/node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true - }, - "node_modules/node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dev": true, - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true, - "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" - } - }, - "node_modules/normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "peer": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/normalize-package-data/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "peer": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "dev": true, - "dependencies": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/number-to-bn/node_modules/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true - }, - "node_modules/oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", - "dev": true, - "peer": true, - "dependencies": { - "lcid": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "dependencies": { - "p-try": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "dependencies": { - "p-limit": "^1.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "peer": true, - "dependencies": { - "error-ex": "^1.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "node_modules/path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "peer": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true, - "engines": { - "node": "*" - } - }, - "node_modules/pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "dependencies": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "peer": true, - "dependencies": { - "pinkie": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", - "dev": true, - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "node_modules/psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "node_modules/punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", - "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", - "dev": true, - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", - "dev": true, - "engines": { - "node": ">=0.4.x" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.1.0" - } - }, - "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, - "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, - "peer": true, - "dependencies": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "peer": true, - "dependencies": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "peer": true, - "dependencies": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/read-pkg-up/node_modules/path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "peer": true, - "dependencies": { - "pinkie-promise": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", - "dev": true, - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 0.12" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/request/node_modules/uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", - "dev": true, - "bin": { - "uuid": "bin/uuid" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true, - "peer": true - }, - "node_modules/resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "dependencies": { - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "dependencies": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "node_modules/rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.0" - }, - "bin": { - "rlp": "bin/rlp" - } - }, - "node_modules/run-parallel-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", - "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", - "dev": true - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "node_modules/scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "dev": true - }, - "node_modules/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", - "dev": true - }, - "node_modules/semaphore-async-await": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", - "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", - "dev": true, - "engines": { - "node": ">=4.1" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "dependencies": { - "randombytes": "^2.1.0" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true, - "peer": true - }, - "node_modules/setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "node_modules/sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "dependencies": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - }, - "bin": { - "sha.js": "bin.js" - } - }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "dev": true, - "dependencies": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "bin": { - "solcjs": "solcjs" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/solc/node_modules/fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "node_modules/solc/node_modules/jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/solc/node_modules/semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "peer": true, - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true, - "peer": true - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "peer": true, - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true, - "peer": true - }, - "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sshpk/node_modules/tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - }, - "node_modules/stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, - "dependencies": { - "type-fest": "^0.7.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/stacktrace-parser/node_modules/type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "dev": true - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "peer": true, - "dependencies": { - "is-utf8": "^0.2.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "dev": true, - "dependencies": { - "is-hex-prefixed": "1.0.0" - }, - "engines": { - "node": ">=6.5.0", - "npm": ">=3" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/testrpc": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", - "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", - "deprecated": "testrpc has been renamed to ganache-cli, please use this package from now on.", - "dev": true, - "peer": true - }, - "node_modules/tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/tough-cookie/node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "node_modules/treeify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", - "dev": true, - "engines": { - "node": ">=0.6" - } - }, - "node_modules/ts-command-line-args": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.4.2.tgz", - "integrity": "sha512-mJLQQBOdyD4XI/ZWQY44PIdYde47JhV2xl380O7twPkTQ+Y5vFDHsk8LOeXKuz7dVY5aDCfAzRarNfSqtKOkQQ==", - "dev": true, - "dependencies": { - "@morgan-stanley/ts-mocking-bird": "^0.6.2", - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - }, - "bin": { - "write-markdown": "dist/write-markdown.js" - } - }, - "node_modules/ts-command-line-args/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ts-command-line-args/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/ts-command-line-args/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/ts-command-line-args/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/ts-command-line-args/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-command-line-args/node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "dev": true, - "peerDependencies": { - "typescript": ">=3.7.0" - } - }, - "node_modules/ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - }, - "node_modules/tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typechain": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.1.1.tgz", - "integrity": "sha512-uF/sUvnXTOVF2FHKhQYnxHk4su4JjZR8vr4mA2mBaRwHTbwh0jIlqARz9XJr1tA0l7afJGvEa1dTSi4zt039LQ==", - "dev": true, - "dependencies": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "bin": { - "typechain": "dist/cli/cli.js" - }, - "peerDependencies": { - "typescript": ">=4.3.0" - } - }, - "node_modules/typechain/node_modules/glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typescript": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", - "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", - "dev": true, - "peer": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=12.20" - } - }, - "node_modules/typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/undici": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.21.0.tgz", - "integrity": "sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==", - "dev": true, - "dependencies": { - "busboy": "^1.6.0" - }, - "engines": { - "node": ">=12.18" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, - "dependencies": { - "punycode": "1.3.2", - "querystring": "0.2.0" - } - }, - "node_modules/url/node_modules/punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - }, - "node_modules/utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", - "dev": true - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "peer": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/web3-utils": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.9.0.tgz", - "integrity": "sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ==", - "dev": true, - "dependencies": { - "bn.js": "^5.2.1", - "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", - "utf8": "3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/web3-utils/node_modules/ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "dependencies": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "node_modules/web3-utils/node_modules/ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "dependencies": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "node_modules/which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", - "dev": true, - "peer": true - }, - "node_modules/window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", - "dev": true, - "peer": true, - "bin": { - "window-size": "cli.js" - }, - "engines": { - "node": ">= 0.10.0" - } - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/wrap-ansi/node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "node_modules/ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "engines": { - "node": ">=8.3.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true, - "engines": { - "node": ">=0.4" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "dependencies": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/zksync-web3": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.3.tgz", - "integrity": "sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ==", - "dev": true, - "peerDependencies": { - "ethers": "^5.7.0" - } - } - }, - "dependencies": { - "@account-abstraction/contracts": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/@account-abstraction/contracts/-/contracts-0.6.0.tgz", - "integrity": "sha512-8ooRJuR7XzohMDM4MV34I12Ci2bmxfE9+cixakRL7lA4BAwJKQ3ahvd8FbJa9kiwkUPCUNtj+/zxDQWYYalLMQ==" - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@ensdomains/ens": { - "version": "0.4.5", - "resolved": "https://registry.npmjs.org/@ensdomains/ens/-/ens-0.4.5.tgz", - "integrity": "sha512-JSvpj1iNMFjK6K+uVl4unqMoa9rf5jopb8cya5UGBWz23Nw8hSNT7efgUx4BTlAPAgpNlEioUfeTyQ6J9ZvTVw==", - "dev": true, - "peer": true, - "requires": { - "bluebird": "^3.5.2", - "eth-ens-namehash": "^2.0.8", - "solc": "^0.4.20", - "testrpc": "0.0.1", - "web3-utils": "^1.0.0-beta.31" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", - "dev": true, - "peer": true - }, - "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha512-4nhGqUkc4BqbBBB4Q6zLuD7lzzrHYrjKGeYaEji/3tFR5VdJu9v+LilhGIVe8wxEJPPOeWo7eg8dwY13TZ1BNg==", - "dev": true, - "peer": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha512-0yayqDxWQbqk3ojkYqUKqaAQ6AfNKeKWRNA8kR0WXzAsdHpP4BIaOmMAG87JGuO6qcobyW4GjxHd9PmhEd+T9w==", - "dev": true, - "peer": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wrap-ansi": "^2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "peer": true - }, - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true, - "peer": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", - "dev": true, - "peer": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha512-H7AkJWMobeskkttHyhTVtS0fxpFLjxhbfMa6Bk3wimP7sdPRGL3EyCg3sAQenFfAe+xQ+oAc85Nmtvq0ROM83Q==", - "dev": true, - "peer": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "peer": true - }, - "solc": { - "version": "0.4.26", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.4.26.tgz", - "integrity": "sha512-o+c6FpkiHd+HPjmjEVpQgH7fqZ14tJpXhho+/bQXlXbliLIS/xjXb42Vxh+qQY1WCSTMQ0+a5vR9vi0MfhU6mA==", - "dev": true, - "peer": true, - "requires": { - "fs-extra": "^0.30.0", - "memorystream": "^0.3.1", - "require-from-string": "^1.1.0", - "semver": "^5.3.0", - "yargs": "^4.7.1" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", - "dev": true, - "peer": true, - "requires": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "dev": true, - "peer": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "wrap-ansi": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", - "integrity": "sha512-vAaEaDM946gbNpH5pLVNR+vX2ht6n0Bt3GXwVB1AuAqZosOvHNF3P7wDnh8KLkSqgUh0uh77le7Owgoz+Z9XBw==", - "dev": true, - "peer": true, - "requires": { - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1" - } - }, - "y18n": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", - "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", - "dev": true, - "peer": true - }, - "yargs": { - "version": "4.8.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-4.8.1.tgz", - "integrity": "sha512-LqodLrnIDM3IFT+Hf/5sxBnEGECrfdC1uIbgZeJmESCSo4HoCAaKEus8MylXHAkdacGc0ye+Qa+dpkuom8uVYA==", - "dev": true, - "peer": true, - "requires": { - "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-parser": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-2.4.1.tgz", - "integrity": "sha512-9pIKIJhnI5tonzG6OnCFlz/yln8xHYcGl+pn3xR0Vzff0vzN1PbNRaelgfgRUwZ3s4i3jvxT9WhmUGL4whnasA==", - "dev": true, - "peer": true, - "requires": { - "camelcase": "^3.0.0", - "lodash.assign": "^4.0.6" - } - } - } - }, - "@ensdomains/resolver": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/@ensdomains/resolver/-/resolver-0.2.4.tgz", - "integrity": "sha512-bvaTH34PMCbv6anRa9I/0zjLJgY4EuznbEMgbV77JBCQ9KNC46rzi0avuxpOfu+xDjPEtSFGqVEOr5GlUSGudA==", - "dev": true, - "peer": true - }, - "@ethereum-waffle/chai": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/chai/-/chai-4.0.10.tgz", - "integrity": "sha512-X5RepE7Dn8KQLFO7HHAAe+KeGaX/by14hn90wePGBhzL54tq4Y8JscZFu+/LCwCl6TnkAAy5ebiMoqJ37sFtWw==", - "dev": true, - "requires": { - "@ethereum-waffle/provider": "4.0.5", - "debug": "^4.3.4", - "json-bigint": "^1.0.0" - } - }, - "@ethereum-waffle/compiler": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/compiler/-/compiler-4.0.3.tgz", - "integrity": "sha512-5x5U52tSvEVJS6dpCeXXKvRKyf8GICDwiTwUvGD3/WD+DpvgvaoHOL82XqpTSUHgV3bBq6ma5/8gKUJUIAnJCw==", - "dev": true, - "requires": { - "@resolver-engine/imports": "^0.3.3", - "@resolver-engine/imports-fs": "^0.3.3", - "@typechain/ethers-v5": "^10.0.0", - "@types/mkdirp": "^0.5.2", - "@types/node-fetch": "^2.6.1", - "mkdirp": "^0.5.1", - "node-fetch": "^2.6.7" - }, - "dependencies": { - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "requires": { - "minimist": "^1.2.6" - } - } - } - }, - "@ethereum-waffle/ens": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/ens/-/ens-4.0.3.tgz", - "integrity": "sha512-PVLcdnTbaTfCrfSOrvtlA9Fih73EeDvFS28JQnT5M5P4JMplqmchhcZB1yg/fCtx4cvgHlZXa0+rOCAk2Jk0Jw==", - "dev": true, - "requires": {} - }, - "@ethereum-waffle/mock-contract": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/mock-contract/-/mock-contract-4.0.4.tgz", - "integrity": "sha512-LwEj5SIuEe9/gnrXgtqIkWbk2g15imM/qcJcxpLyAkOj981tQxXmtV4XmQMZsdedEsZ/D/rbUAOtZbgwqgUwQA==", - "dev": true, - "requires": {} - }, - "@ethereum-waffle/provider": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/@ethereum-waffle/provider/-/provider-4.0.5.tgz", - "integrity": "sha512-40uzfyzcrPh+Gbdzv89JJTMBlZwzya1YLDyim8mVbEqYLP5VRYWoGp0JMyaizgV3hMoUFRqJKVmIUw4v7r3hYw==", - "dev": true, - "requires": { - "@ethereum-waffle/ens": "4.0.3", - "@ganache/ethereum-options": "0.1.4", - "debug": "^4.3.4", - "ganache": "7.4.3" - } - }, - "@ethereumjs/block": { - "version": "3.6.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/block/-/block-3.6.3.tgz", - "integrity": "sha512-CegDeryc2DVKnDkg5COQrE0bJfw/p0v3GBk2W5/Dj5dOVfEmb50Ux0GLnSPypooLnfqjwFaorGuT9FokWB3GRg==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.5", - "@ethereumjs/tx": "^3.5.2", - "ethereumjs-util": "^7.1.5", - "merkle-patricia-tree": "^4.2.4" - }, - "dependencies": { - "@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "@ethereumjs/tx": { - "version": "3.5.2", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.5.2.tgz", - "integrity": "sha512-gQDNJWKrSDGu2w7w0PzVXVBNMzb7wwdDOmOqczmhNjqFxFuIbhVJDwiGEnxFNC2/b8ifcZzY7MLcluizohRzNw==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.4", - "ethereumjs-util": "^7.1.5" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethereumjs/blockchain": { - "version": "5.5.3", - "resolved": "https://registry.npmjs.org/@ethereumjs/blockchain/-/blockchain-5.5.3.tgz", - "integrity": "sha512-bi0wuNJ1gw4ByNCV56H0Z4Q7D+SxUbwyG12Wxzbvqc89PXLRNR20LBcSUZRKpN0+YCPo6m0XZL/JLio3B52LTw==", - "dev": true, - "requires": { - "@ethereumjs/block": "^3.6.2", - "@ethereumjs/common": "^2.6.4", - "@ethereumjs/ethash": "^1.1.0", - "debug": "^4.3.3", - "ethereumjs-util": "^7.1.5", - "level-mem": "^5.0.1", - "lru-cache": "^5.1.1", - "semaphore-async-await": "^1.5.1" - }, - "dependencies": { - "@ethereumjs/common": { - "version": "2.6.5", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.5.tgz", - "integrity": "sha512-lRyVQOeCDaIVtgfbowla32pzeDv2Obr8oR8Put5RdUBNRGr1VGPGQNGP6elWIpgK3YdpzqTOh4GyUGOureVeeA==", - "dev": true, - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.5" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethereumjs/common": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/common/-/common-2.6.0.tgz", - "integrity": "sha512-Cq2qS0FTu6O2VU1sgg+WyU9Ps0M6j/BEMHN+hRaECXCV/r0aI78u4N6p52QW/BDVhwWZpCdrvG8X7NJdzlpNUA==", - "dev": true, - "requires": { - "crc-32": "^1.2.0", - "ethereumjs-util": "^7.1.3" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethereumjs/ethash": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/ethash/-/ethash-1.1.0.tgz", - "integrity": "sha512-/U7UOKW6BzpA+Vt+kISAoeDie1vAvY4Zy2KF5JJb+So7+1yKmJeJEHOGSnQIj330e9Zyl3L5Nae6VZyh2TJnAA==", - "dev": true, - "requires": { - "@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" - }, - "dependencies": { - "buffer-xor": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-2.0.2.tgz", - "integrity": "sha512-eHslX0bin3GB+Lx2p7lEYRShRewuNZL3fUl4qlVJGGiwoPGftmt8JQgk2Y9Ji5/01TnVDo33E5b5O3vUB1HdqQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.1" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethereumjs/tx": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/tx/-/tx-3.4.0.tgz", - "integrity": "sha512-WWUwg1PdjHKZZxPPo274ZuPsJCWV3SqATrEKQP1n2DrVYVP1aZIYpo/mFaA0BDoE0tIQmBeimRCEA0Lgil+yYw==", - "dev": true, - "requires": { - "@ethereumjs/common": "^2.6.0", - "ethereumjs-util": "^7.1.3" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ethereumjs/vm": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethereumjs/vm/-/vm-5.6.0.tgz", - "integrity": "sha512-J2m/OgjjiGdWF2P9bj/4LnZQ1zRoZhY8mRNVw/N3tXliGI8ai1sI1mlDPkLpeUUM4vq54gH6n0ZlSpz8U/qlYQ==", - "dev": true, - "requires": { - "@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.3", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "merkle-patricia-tree": "^4.2.2", - "rustbn.js": "~0.2.0" - }, - "dependencies": { - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", - "dev": true - } - } - }, - "@ethersproject/abi": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz", - "integrity": "sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ethersproject/abstract-provider": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz", - "integrity": "sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0" - } - }, - "@ethersproject/abstract-signer": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz", - "integrity": "sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "@ethersproject/address": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz", - "integrity": "sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/rlp": "^5.7.0" - } - }, - "@ethersproject/base64": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz", - "integrity": "sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0" - } - }, - "@ethersproject/basex": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz", - "integrity": "sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0" - } - }, - "@ethersproject/bignumber": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz", - "integrity": "sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "bn.js": "^5.2.1" - } - }, - "@ethersproject/bytes": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz", - "integrity": "sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/constants": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz", - "integrity": "sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.7.0" - } - }, - "@ethersproject/contracts": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz", - "integrity": "sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==", - "dev": true, - "requires": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/transactions": "^5.7.0" - } - }, - "@ethersproject/hash": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz", - "integrity": "sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ethersproject/hdnode": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz", - "integrity": "sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "@ethersproject/json-wallets": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz", - "integrity": "sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==", - "dev": true, - "requires": { - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/pbkdf2": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "aes-js": "3.0.0", - "scrypt-js": "3.0.1" - } - }, - "@ethersproject/keccak256": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz", - "integrity": "sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "js-sha3": "0.8.0" - } - }, - "@ethersproject/logger": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz", - "integrity": "sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==", - "dev": true - }, - "@ethersproject/networks": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz", - "integrity": "sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/pbkdf2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz", - "integrity": "sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/sha2": "^5.7.0" - } - }, - "@ethersproject/properties": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz", - "integrity": "sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==", - "dev": true, - "requires": { - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/providers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz", - "integrity": "sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/base64": "^5.7.0", - "@ethersproject/basex": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/networks": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/web": "^5.7.0", - "bech32": "1.1.4", - "ws": "7.4.6" - }, - "dependencies": { - "ws": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", - "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", - "dev": true, - "requires": {} - } - } - }, - "@ethersproject/random": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz", - "integrity": "sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/rlp": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz", - "integrity": "sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/sha2": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz", - "integrity": "sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "hash.js": "1.1.7" - } - }, - "@ethersproject/signing-key": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz", - "integrity": "sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "bn.js": "^5.2.1", - "elliptic": "6.5.4", - "hash.js": "1.1.7" - } - }, - "@ethersproject/solidity": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz", - "integrity": "sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/sha2": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ethersproject/strings": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz", - "integrity": "sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/transactions": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz", - "integrity": "sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==", - "dev": true, - "requires": { - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/rlp": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0" - } - }, - "@ethersproject/units": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz", - "integrity": "sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==", - "dev": true, - "requires": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/logger": "^5.7.0" - } - }, - "@ethersproject/wallet": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz", - "integrity": "sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==", - "dev": true, - "requires": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/hdnode": "^5.7.0", - "@ethersproject/json-wallets": "^5.7.0", - "@ethersproject/keccak256": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wordlists": "^5.7.0" - } - }, - "@ethersproject/web": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz", - "integrity": "sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==", - "dev": true, - "requires": { - "@ethersproject/base64": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ethersproject/wordlists": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz", - "integrity": "sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==", - "dev": true, - "requires": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/hash": "^5.7.0", - "@ethersproject/logger": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/strings": "^5.7.0" - } - }, - "@ganache/ethereum-address": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/ethereum-address/-/ethereum-address-0.1.4.tgz", - "integrity": "sha512-sTkU0M9z2nZUzDeHRzzGlW724xhMLXo2LeX1hixbnjHWY1Zg1hkqORywVfl+g5uOO8ht8T0v+34IxNxAhmWlbw==", - "dev": true, - "requires": { - "@ganache/utils": "0.1.4" - } - }, - "@ganache/ethereum-options": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/ethereum-options/-/ethereum-options-0.1.4.tgz", - "integrity": "sha512-i4l46taoK2yC41FPkcoDlEVoqHS52wcbHPqJtYETRWqpOaoj9hAg/EJIHLb1t6Nhva2CdTO84bG+qlzlTxjAHw==", - "dev": true, - "requires": { - "@ganache/ethereum-address": "0.1.4", - "@ganache/ethereum-utils": "0.1.4", - "@ganache/options": "0.1.4", - "@ganache/utils": "0.1.4", - "bip39": "3.0.4", - "seedrandom": "3.0.5" - } - }, - "@ganache/ethereum-utils": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/ethereum-utils/-/ethereum-utils-0.1.4.tgz", - "integrity": "sha512-FKXF3zcdDrIoCqovJmHLKZLrJ43234Em2sde/3urUT/10gSgnwlpFmrv2LUMAmSbX3lgZhW/aSs8krGhDevDAg==", - "dev": true, - "requires": { - "@ethereumjs/common": "2.6.0", - "@ethereumjs/tx": "3.4.0", - "@ethereumjs/vm": "5.6.0", - "@ganache/ethereum-address": "0.1.4", - "@ganache/rlp": "0.1.4", - "@ganache/utils": "0.1.4", - "emittery": "0.10.0", - "ethereumjs-abi": "0.6.8", - "ethereumjs-util": "7.1.3" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.3", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.3.tgz", - "integrity": "sha512-y+82tEbyASO0K0X1/SRhbJJoAlfcvq8JbrG4a5cjrOks7HS/36efU/0j2flxCPOUM++HFahk33kr/ZxyC4vNuw==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "@ganache/options": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/options/-/options-0.1.4.tgz", - "integrity": "sha512-zAe/craqNuPz512XQY33MOAG6Si1Xp0hCvfzkBfj2qkuPcbJCq6W/eQ5MB6SbXHrICsHrZOaelyqjuhSEmjXRw==", - "dev": true, - "requires": { - "@ganache/utils": "0.1.4", - "bip39": "3.0.4", - "seedrandom": "3.0.5" - } - }, - "@ganache/rlp": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/rlp/-/rlp-0.1.4.tgz", - "integrity": "sha512-Do3D1H6JmhikB+6rHviGqkrNywou/liVeFiKIpOBLynIpvZhRCgn3SEDxyy/JovcaozTo/BynHumfs5R085MFQ==", - "dev": true, - "requires": { - "@ganache/utils": "0.1.4", - "rlp": "2.2.6" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "rlp": { - "version": "2.2.6", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.6.tgz", - "integrity": "sha512-HAfAmL6SDYNWPUOJNrM500x4Thn4PZsEy5pijPh40U9WfNk0z15hUYzO9xVIMAdIHdFtD8CBDHd75Td1g36Mjg==", - "dev": true, - "requires": { - "bn.js": "^4.11.1" - } - } - } - }, - "@ganache/utils": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/@ganache/utils/-/utils-0.1.4.tgz", - "integrity": "sha512-oatUueU3XuXbUbUlkyxeLLH3LzFZ4y5aSkNbx6tjSIhVTPeh+AuBKYt4eQ73FFcTB3nj/gZoslgAh5CN7O369w==", - "dev": true, - "requires": { - "@trufflesuite/bigint-buffer": "1.1.9", - "emittery": "0.10.0", - "keccak": "3.0.1", - "seedrandom": "3.0.5" - }, - "dependencies": { - "keccak": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz", - "integrity": "sha512-epq90L9jlFWCW7+pQa6JOnKn2Xgl2mtI664seYR6MHskvI9agt7AnDqmAlp9TqU4/caMYbA08Hi5DMZAl5zdkA==", - "dev": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - } - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true - }, - "@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "@metamask/eth-sig-util": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz", - "integrity": "sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ==", - "dev": true, - "requires": { - "ethereumjs-abi": "^0.6.8", - "ethereumjs-util": "^6.2.1", - "ethjs-util": "^0.1.6", - "tweetnacl": "^1.0.3", - "tweetnacl-util": "^0.15.1" - } - }, - "@morgan-stanley/ts-mocking-bird": { - "version": "0.6.4", - "resolved": "https://registry.npmjs.org/@morgan-stanley/ts-mocking-bird/-/ts-mocking-bird-0.6.4.tgz", - "integrity": "sha512-57VJIflP8eR2xXa9cD1LUawh+Gh+BVQfVu0n6GALyg/AqV/Nz25kDRvws3i9kIe1PTrbsZZOYpsYp6bXPd6nVA==", - "dev": true, - "requires": { - "lodash": "^4.17.16", - "uuid": "^7.0.3" - }, - "dependencies": { - "uuid": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-7.0.3.tgz", - "integrity": "sha512-DPSke0pXhTZgoF/d+WSt2QaKMCFSfx7QegxEWT+JOuHF5aWrKEn0G+ztjuJg/gG8/ItK+rbPCD/yNv8yyih6Cg==", - "dev": true - } - } - }, - "@noble/hashes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz", - "integrity": "sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ==", - "dev": true - }, - "@noble/secp256k1": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz", - "integrity": "sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw==", - "dev": true - }, - "@nomicfoundation/ethereumjs-block": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-block/-/ethereumjs-block-4.2.2.tgz", - "integrity": "sha512-atjpt4gc6ZGZUPHBAQaUJsm1l/VCo7FmyQ780tMGO8QStjLdhz09dXynmhwVTy5YbRr0FOh/uX3QaEM0yIB2Zg==", - "dev": true, - "requires": { - "@nomicfoundation/ethereumjs-common": "3.1.2", - "@nomicfoundation/ethereumjs-rlp": "4.0.3", - "@nomicfoundation/ethereumjs-trie": "5.0.5", - "@nomicfoundation/ethereumjs-tx": "4.1.2", - "@nomicfoundation/ethereumjs-util": "8.0.6", - "ethereum-cryptography": "0.1.3" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/ethereumjs-blockchain": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-blockchain/-/ethereumjs-blockchain-6.2.2.tgz", - "integrity": "sha512-6AIB2MoTEPZJLl6IRKcbd8mUmaBAQ/NMe3O7OsAOIiDjMNPPH5KaUQiLfbVlegT4wKIg/GOsFH7XlH2KDVoJNg==", - "dev": true, - "requires": { - "@nomicfoundation/ethereumjs-block": "4.2.2", - "@nomicfoundation/ethereumjs-common": "3.1.2", - "@nomicfoundation/ethereumjs-ethash": "2.0.5", - "@nomicfoundation/ethereumjs-rlp": "4.0.3", - "@nomicfoundation/ethereumjs-trie": "5.0.5", - "@nomicfoundation/ethereumjs-util": "8.0.6", - "abstract-level": "^1.0.3", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "level": "^8.0.0", - "lru-cache": "^5.1.1", - "memory-level": "^1.0.0" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/ethereumjs-common": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-3.1.2.tgz", - "integrity": "sha512-JAEBpIua62dyObHM9KI2b4wHZcRQYYge9gxiygTWa3lNCr2zo+K0TbypDpgiNij5MCGNWP1eboNfNfx1a3vkvA==", - "dev": true, - "requires": { - "@nomicfoundation/ethereumjs-util": "8.0.6", - "crc-32": "^1.2.0" - } - }, - "@nomicfoundation/ethereumjs-ethash": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-ethash/-/ethereumjs-ethash-2.0.5.tgz", - "integrity": "sha512-xlLdcICGgAYyYmnI3r1t0R5fKGBJNDQSOQxXNjVO99JmxJIdXR5MgPo5CSJO1RpyzKOgzi3uIFn8agv564dZEQ==", - "dev": true, - "requires": { - "@nomicfoundation/ethereumjs-block": "4.2.2", - "@nomicfoundation/ethereumjs-rlp": "4.0.3", - "@nomicfoundation/ethereumjs-util": "8.0.6", - "abstract-level": "^1.0.3", - "bigint-crypto-utils": "^3.0.23", - "ethereum-cryptography": "0.1.3" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/ethereumjs-evm": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-evm/-/ethereumjs-evm-1.3.2.tgz", - "integrity": "sha512-I00d4MwXuobyoqdPe/12dxUQxTYzX8OckSaWsMcWAfQhgVDvBx6ffPyP/w1aL0NW7MjyerySPcSVfDJAMHjilw==", - "dev": true, - "requires": { - "@nomicfoundation/ethereumjs-common": "3.1.2", - "@nomicfoundation/ethereumjs-util": "8.0.6", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "mcl-wasm": "^0.7.1", - "rustbn.js": "~0.2.0" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/ethereumjs-rlp": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-4.0.3.tgz", - "integrity": "sha512-DZMzB/lqPK78T6MluyXqtlRmOMcsZbTTbbEyAjo0ncaff2mqu/k8a79PBcyvpgAhWD/R59Fjq/x3ro5Lof0AtA==", - "dev": true - }, - "@nomicfoundation/ethereumjs-statemanager": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-statemanager/-/ethereumjs-statemanager-1.0.5.tgz", - "integrity": "sha512-CAhzpzTR5toh/qOJIZUUOnWekUXuRqkkzaGAQrVcF457VhtCmr+ddZjjK50KNZ524c1XP8cISguEVNqJ6ij1sA==", - "dev": true, - "requires": { - "@nomicfoundation/ethereumjs-common": "3.1.2", - "@nomicfoundation/ethereumjs-rlp": "4.0.3", - "@nomicfoundation/ethereumjs-trie": "5.0.5", - "@nomicfoundation/ethereumjs-util": "8.0.6", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/ethereumjs-trie": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-trie/-/ethereumjs-trie-5.0.5.tgz", - "integrity": "sha512-+8sNZrXkzvA1NH5F4kz5RSYl1I6iaRz7mAZRsyxOm0IVY4UaP43Ofvfp/TwOalFunurQrYB5pRO40+8FBcxFMA==", - "dev": true, - "requires": { - "@nomicfoundation/ethereumjs-rlp": "4.0.3", - "@nomicfoundation/ethereumjs-util": "8.0.6", - "ethereum-cryptography": "0.1.3", - "readable-stream": "^3.6.0" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/ethereumjs-tx": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-4.1.2.tgz", - "integrity": "sha512-emJBJZpmTdUa09cqxQqHaysbBI9Od353ZazeH7WgPb35miMgNY6mb7/3vBA98N5lUW/rgkiItjX0KZfIzihSoQ==", - "dev": true, - "requires": { - "@nomicfoundation/ethereumjs-common": "3.1.2", - "@nomicfoundation/ethereumjs-rlp": "4.0.3", - "@nomicfoundation/ethereumjs-util": "8.0.6", - "ethereum-cryptography": "0.1.3" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/ethereumjs-util": { - "version": "8.0.6", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-8.0.6.tgz", - "integrity": "sha512-jOQfF44laa7xRfbfLXojdlcpkvxeHrE2Xu7tSeITsWFgoII163MzjOwFEzSNozHYieFysyoEMhCdP+NY5ikstw==", - "dev": true, - "requires": { - "@nomicfoundation/ethereumjs-rlp": "4.0.3", - "ethereum-cryptography": "0.1.3" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/ethereumjs-vm": { - "version": "6.4.2", - "resolved": "https://registry.npmjs.org/@nomicfoundation/ethereumjs-vm/-/ethereumjs-vm-6.4.2.tgz", - "integrity": "sha512-PRTyxZMP6kx+OdAzBhuH1LD2Yw+hrSpaytftvaK//thDy2OI07S0nrTdbrdk7b8ZVPAc9H9oTwFBl3/wJ3w15g==", - "dev": true, - "requires": { - "@nomicfoundation/ethereumjs-block": "4.2.2", - "@nomicfoundation/ethereumjs-blockchain": "6.2.2", - "@nomicfoundation/ethereumjs-common": "3.1.2", - "@nomicfoundation/ethereumjs-evm": "1.3.2", - "@nomicfoundation/ethereumjs-rlp": "4.0.3", - "@nomicfoundation/ethereumjs-statemanager": "1.0.5", - "@nomicfoundation/ethereumjs-trie": "5.0.5", - "@nomicfoundation/ethereumjs-tx": "4.1.2", - "@nomicfoundation/ethereumjs-util": "8.0.6", - "@types/async-eventemitter": "^0.2.1", - "async-eventemitter": "^0.2.4", - "debug": "^4.3.3", - "ethereum-cryptography": "0.1.3", - "functional-red-black-tree": "^1.0.1", - "mcl-wasm": "^0.7.1", - "rustbn.js": "~0.2.0" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "@nomicfoundation/hardhat-foundry": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@nomicfoundation/hardhat-foundry/-/hardhat-foundry-1.0.0.tgz", - "integrity": "sha512-/2cmtIZPnsQj/SRIu9idbBan5j19RD35MECAGmZCcuXX4AO6Wn0nOnpUwpcvGomKW403h4+rXh8AHMWC4Vvw0Q==", - "dev": true, - "requires": { - "chalk": "^2.4.2" - } - }, - "@nomicfoundation/solidity-analyzer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz", - "integrity": "sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg==", - "dev": true, - "requires": { - "@nomicfoundation/solidity-analyzer-darwin-arm64": "0.1.1", - "@nomicfoundation/solidity-analyzer-darwin-x64": "0.1.1", - "@nomicfoundation/solidity-analyzer-freebsd-x64": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": "0.1.1", - "@nomicfoundation/solidity-analyzer-linux-x64-musl": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": "0.1.1", - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": "0.1.1" - } - }, - "@nomicfoundation/solidity-analyzer-darwin-arm64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz", - "integrity": "sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w==", - "dev": true, - "optional": true - }, - "@nomicfoundation/solidity-analyzer-darwin-x64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz", - "integrity": "sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA==", - "dev": true, - "optional": true - }, - "@nomicfoundation/solidity-analyzer-freebsd-x64": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz", - "integrity": "sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA==", - "dev": true, - "optional": true - }, - "@nomicfoundation/solidity-analyzer-linux-arm64-gnu": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz", - "integrity": "sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg==", - "dev": true, - "optional": true - }, - "@nomicfoundation/solidity-analyzer-linux-arm64-musl": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz", - "integrity": "sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w==", - "dev": true, - "optional": true - }, - "@nomicfoundation/solidity-analyzer-linux-x64-gnu": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz", - "integrity": "sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA==", - "dev": true, - "optional": true - }, - "@nomicfoundation/solidity-analyzer-linux-x64-musl": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz", - "integrity": "sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w==", - "dev": true, - "optional": true - }, - "@nomicfoundation/solidity-analyzer-win32-arm64-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz", - "integrity": "sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg==", - "dev": true, - "optional": true - }, - "@nomicfoundation/solidity-analyzer-win32-ia32-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz", - "integrity": "sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ==", - "dev": true, - "optional": true - }, - "@nomicfoundation/solidity-analyzer-win32-x64-msvc": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz", - "integrity": "sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw==", - "dev": true, - "optional": true - }, - "@nomiclabs/hardhat-ethers": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz", - "integrity": "sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg==", - "dev": true, - "requires": {} - }, - "@resolver-engine/core": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/core/-/core-0.3.3.tgz", - "integrity": "sha512-eB8nEbKDJJBi5p5SrvrvILn4a0h42bKtbCTri3ZxCGt6UvoQyp7HnGOfki944bUjBSHKK3RvgfViHn+kqdXtnQ==", - "dev": true, - "requires": { - "debug": "^3.1.0", - "is-url": "^1.2.4", - "request": "^2.85.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@resolver-engine/fs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/fs/-/fs-0.3.3.tgz", - "integrity": "sha512-wQ9RhPUcny02Wm0IuJwYMyAG8fXVeKdmhm8xizNByD4ryZlx6PP6kRen+t/haF43cMfmaV7T3Cx6ChOdHEhFUQ==", - "dev": true, - "requires": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@resolver-engine/imports": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports/-/imports-0.3.3.tgz", - "integrity": "sha512-anHpS4wN4sRMwsAbMXhMfOD/y4a4Oo0Cw/5+rue7hSwGWsDOQaAU1ClK1OxjUC35/peazxEl8JaSRRS+Xb8t3Q==", - "dev": true, - "requires": { - "@resolver-engine/core": "^0.3.3", - "debug": "^3.1.0", - "hosted-git-info": "^2.6.0", - "path-browserify": "^1.0.0", - "url": "^0.11.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@resolver-engine/imports-fs": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@resolver-engine/imports-fs/-/imports-fs-0.3.3.tgz", - "integrity": "sha512-7Pjg/ZAZtxpeyCFlZR5zqYkz+Wdo84ugB5LApwriT8XFeQoLwGUj4tZFFvvCuxaNCcqZzCYbonJgmGObYBzyCA==", - "dev": true, - "requires": { - "@resolver-engine/fs": "^0.3.3", - "@resolver-engine/imports": "^0.3.3", - "debug": "^3.1.0" - }, - "dependencies": { - "debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - } - } - }, - "@scure/base": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", - "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", - "dev": true - }, - "@scure/bip32": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz", - "integrity": "sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw==", - "dev": true, - "requires": { - "@noble/hashes": "~1.2.0", - "@noble/secp256k1": "~1.7.0", - "@scure/base": "~1.1.0" - } - }, - "@scure/bip39": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz", - "integrity": "sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg==", - "dev": true, - "requires": { - "@noble/hashes": "~1.2.0", - "@scure/base": "~1.1.0" - } - }, - "@sentry/core": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-5.30.0.tgz", - "integrity": "sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/hub": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/hub/-/hub-5.30.0.tgz", - "integrity": "sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ==", - "dev": true, - "requires": { - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/minimal": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/minimal/-/minimal-5.30.0.tgz", - "integrity": "sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/node": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-5.30.0.tgz", - "integrity": "sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg==", - "dev": true, - "requires": { - "@sentry/core": "5.30.0", - "@sentry/hub": "5.30.0", - "@sentry/tracing": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "cookie": "^0.4.1", - "https-proxy-agent": "^5.0.0", - "lru_map": "^0.3.3", - "tslib": "^1.9.3" - } - }, - "@sentry/tracing": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/tracing/-/tracing-5.30.0.tgz", - "integrity": "sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw==", - "dev": true, - "requires": { - "@sentry/hub": "5.30.0", - "@sentry/minimal": "5.30.0", - "@sentry/types": "5.30.0", - "@sentry/utils": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@sentry/types": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/types/-/types-5.30.0.tgz", - "integrity": "sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw==", - "dev": true - }, - "@sentry/utils": { - "version": "5.30.0", - "resolved": "https://registry.npmjs.org/@sentry/utils/-/utils-5.30.0.tgz", - "integrity": "sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww==", - "dev": true, - "requires": { - "@sentry/types": "5.30.0", - "tslib": "^1.9.3" - } - }, - "@trufflesuite/bigint-buffer": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.9.tgz", - "integrity": "sha512-bdM5cEGCOhDSwminryHJbRmXc1x7dPKg6Pqns3qyTwFlxsqUgxE29lsERS3PlIW1HTjoIGMUqsk1zQQwST1Yxw==", - "dev": true, - "optional": true, - "requires": { - "node-gyp-build": "4.3.0" - }, - "dependencies": { - "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "dev": true, - "optional": true - } - } - }, - "@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true - }, - "@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true - }, - "@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true - }, - "@tsconfig/node16": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", - "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true - }, - "@typechain/ethers-v5": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/@typechain/ethers-v5/-/ethers-v5-10.2.0.tgz", - "integrity": "sha512-ikaq0N/w9fABM+G01OFmU3U3dNnyRwEahkdvi9mqy1a3XwKiPZaF/lu54OcNaEWnpvEYyhhS0N7buCtLQqC92w==", - "dev": true, - "requires": { - "lodash": "^4.17.15", - "ts-essentials": "^7.0.1" - } - }, - "@typechain/hardhat": { - "version": "6.1.5", - "resolved": "https://registry.npmjs.org/@typechain/hardhat/-/hardhat-6.1.5.tgz", - "integrity": "sha512-lg7LW4qDZpxFMknp3Xool61Fg6Lays8F8TXdFGBG+MxyYcYU5795P1U2XdStuzGq9S2Dzdgh+1jGww9wvZ6r4Q==", - "dev": true, - "requires": { - "fs-extra": "^9.1.0" - }, - "dependencies": { - "fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", - "dev": true, - "requires": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "@types/abstract-leveldown": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/@types/abstract-leveldown/-/abstract-leveldown-7.2.1.tgz", - "integrity": "sha512-YK8irIC+eMrrmtGx0H4ISn9GgzLd9dojZWJaMbjp1YHLl2VqqNFBNrL5Q3KjGf4VE3sf/4hmq6EhQZ7kZp1NoQ==", - "dev": true - }, - "@types/async-eventemitter": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@types/async-eventemitter/-/async-eventemitter-0.2.1.tgz", - "integrity": "sha512-M2P4Ng26QbAeITiH7w1d7OxtldgfAe0wobpyJzVK/XOb0cUGKU2R4pfAhqcJBXAe2ife5ZOhSv4wk7p+ffURtg==", - "dev": true - }, - "@types/bn.js": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", - "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/chai": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.4.tgz", - "integrity": "sha512-KnRanxnpfpjUTqTCXslZSEdLfXExwgNxYPdiO2WGUj8+HDjFi8R3k5RVKPeSCzLjCcshCAtVO2QBbVuAV4kTnw==", - "dev": true - }, - "@types/level-errors": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/level-errors/-/level-errors-3.0.0.tgz", - "integrity": "sha512-/lMtoq/Cf/2DVOm6zE6ORyOM+3ZVm/BvzEZVxUhf6bgh8ZHglXlBqxbxSlJeVp8FCbD3IVvk/VbsaNmDjrQvqQ==", - "dev": true - }, - "@types/levelup": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@types/levelup/-/levelup-4.3.3.tgz", - "integrity": "sha512-K+OTIjJcZHVlZQN1HmU64VtrC0jC3dXWQozuEIR9zVvltIk90zaGPM2AgT+fIkChpzHhFE3YnvFLCbLtzAmexA==", - "dev": true, - "requires": { - "@types/abstract-leveldown": "*", - "@types/level-errors": "*", - "@types/node": "*" - } - }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "dev": true - }, - "@types/mkdirp": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.5.2.tgz", - "integrity": "sha512-U5icWpv7YnZYGsN4/cmh3WD2onMY0aJIiTE6+51TwJCttdHvtCYmkBNOobHlXwrJRL0nkH9jH4kD+1FAdMN4Tg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/mocha": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", - "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", - "dev": true - }, - "@types/node": { - "version": "18.15.11", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.11.tgz", - "integrity": "sha512-E5Kwq2n4SbMzQOn6wnmBjuK9ouqlURrcZDVfbo9ftDDTFt3nk7ZKK4GMOzoYgnpQJKcxwQw+lGaBvvlMo0qN/Q==", - "dev": true - }, - "@types/node-fetch": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.3.tgz", - "integrity": "sha512-ETTL1mOEdq/sxUtgtOhKjyB2Irra4cjxksvcMUR5Zr4n+PxVhsCD9WS46oPbHL3et9Zde7CNRr+WUNlcHvsX+w==", - "dev": true, - "requires": { - "@types/node": "*", - "form-data": "^3.0.0" - } - }, - "@types/pbkdf2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.0.tgz", - "integrity": "sha512-Cf63Rv7jCQ0LaL8tNXmEyqTHuIJxRdlS5vMh1mj5voN4+QFhVZnlZruezqpWYDiJ8UTzhP0VmeLXCmBk66YrMQ==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/prettier": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", - "integrity": "sha512-KufADq8uQqo1pYKVIYzfKbJfBAc0sOeXqGbFaSpv8MRmC/zXgowNZmFcbngndGk922QDmOASEXUZCaY48gs4cg==", - "dev": true - }, - "@types/qs": { - "version": "6.9.7", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", - "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", - "dev": true - }, - "@types/secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-Da66lEIFeIz9ltsdMZcpQvmrmmoqrfju8pm1BH8WbYjZSwUgCwXLb9C+9XYogwBITnbsSaMdVPb2ekf7TV+03w==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", - "dev": true, - "requires": { - "event-target-shim": "^5.0.0" - } - }, - "abstract-level": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/abstract-level/-/abstract-level-1.0.3.tgz", - "integrity": "sha512-t6jv+xHy+VYwc4xqZMn2Pa9DjcdzvzZmQGRjTFc8spIbRGHgBrEKbPq+rYXc7CCo0lxgYvSgKVg9qZAhpVQSjA==", - "dev": true, - "requires": { - "buffer": "^6.0.3", - "catering": "^2.1.0", - "is-buffer": "^2.0.5", - "level-supports": "^4.0.0", - "level-transcoder": "^1.0.1", - "module-error": "^1.0.1", - "queue-microtask": "^1.2.3" - } - }, - "abstract-leveldown": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.3.0.tgz", - "integrity": "sha512-TU5nlYgta8YrBMNpc9FwQzRbiXsj49gsALsXadbGHt9CROPzX5fB0rWDR5mtdpOOKa5XqRFpbj1QroPAoPzVjQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "requires": { - "xtend": "^4.0.2" - } - } - } - }, - "acorn": { - "version": "8.8.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", - "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true - }, - "acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true - }, - "adm-zip": { - "version": "0.4.16", - "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", - "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", - "dev": true - }, - "aes-js": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz", - "integrity": "sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==", - "dev": true - }, - "agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "dev": true, - "requires": { - "debug": "4" - } - }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, - "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, - "requires": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" - } - }, - "ansi-colors": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", - "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", - "dev": true - }, - "ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, - "requires": { - "type-fest": "^0.21.3" - } - }, - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } - }, - "arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true - }, - "argparse": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true - }, - "array-back": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", - "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", - "dev": true - }, - "asn1": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", - "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", - "dev": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", - "dev": true - }, - "assertion-error": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", - "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", - "dev": true - }, - "async": { - "version": "2.6.4", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", - "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "async-eventemitter": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/async-eventemitter/-/async-eventemitter-0.2.4.tgz", - "integrity": "sha512-pd20BwL7Yt1zwDFy+8MX8F1+WCT8aQeKj0kQnTrH9WaeRETlRamVhD0JtRPmrV4GfOJ2F9CvdQkZeZhnh2TuHw==", - "dev": true, - "requires": { - "async": "^2.4.0" - } - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true - }, - "at-least-node": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", - "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", - "dev": true - }, - "aws4": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.12.0.tgz", - "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==", - "dev": true - }, - "axios": { - "version": "0.21.4", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", - "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", - "dev": true, - "requires": { - "follow-redirects": "^1.14.0" - } - }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "base-x": { - "version": "3.0.9", - "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", - "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", - "dev": true, - "requires": { - "tweetnacl": "^0.14.3" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - } - } - }, - "bech32": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", - "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==", - "dev": true - }, - "bigint-crypto-utils": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/bigint-crypto-utils/-/bigint-crypto-utils-3.1.8.tgz", - "integrity": "sha512-+VMV9Laq8pXLBKKKK49nOoq9bfR3j7NNQAtbA617a4nw9bVLo8rsqkKMBgM2AJWlNX9fEIyYaYX+d0laqYV4tw==", - "dev": true, - "requires": { - "bigint-mod-arith": "^3.1.0" - } - }, - "bigint-mod-arith": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bigint-mod-arith/-/bigint-mod-arith-3.1.2.tgz", - "integrity": "sha512-nx8J8bBeiRR+NlsROFH9jHswW5HO8mgfOSqW0AmjicMMvaONDa8AO+5ViKDUUNytBPWiwfvZP4/Bj4Y3lUfvgQ==", - "dev": true - }, - "bignumber.js": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", - "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bip39": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.0.4.tgz", - "integrity": "sha512-YZKQlb752TrUWqHWj7XAwCSjYEgGAk+/Aas3V7NyjQeZYsztO8JnQUaCWhcnL4T+jL8nvB8typ2jRPzTlgugNw==", - "dev": true, - "requires": { - "@types/node": "11.11.6", - "create-hash": "^1.1.0", - "pbkdf2": "^3.0.9", - "randombytes": "^2.0.1" - }, - "dependencies": { - "@types/node": { - "version": "11.11.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-11.11.6.tgz", - "integrity": "sha512-Exw4yUWMBXM3X+8oqzJNRqZSwUAaS4+7NdvHqQuFi/d+synz++xmX3QIf+BFqneW8N31R8Ky+sikfZUXq07ggQ==", - "dev": true - } - } - }, - "blakejs": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", - "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", - "dev": true - }, - "bluebird": { - "version": "3.7.2", - "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", - "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true, - "peer": true - }, - "bn.js": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", - "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" - } - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", - "dev": true - }, - "browser-level": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/browser-level/-/browser-level-1.0.1.tgz", - "integrity": "sha512-XECYKJ+Dbzw0lbydyQuJzwNXtOpbMSq737qxJN11sIRTErOMShvDpbzTlgju7orJKvx4epULolZAuJGLzCmWRQ==", - "dev": true, - "requires": { - "abstract-level": "^1.0.2", - "catering": "^2.1.1", - "module-error": "^1.0.2", - "run-parallel-limit": "^1.1.0" - } - }, - "browser-stdout": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz", - "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==", - "dev": true - }, - "browserify-aes": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", - "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", - "dev": true, - "requires": { - "buffer-xor": "^1.0.3", - "cipher-base": "^1.0.0", - "create-hash": "^1.1.0", - "evp_bytestokey": "^1.0.3", - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "bs58": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", - "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", - "dev": true, - "requires": { - "base-x": "^3.0.2" - } - }, - "bs58check": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", - "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", - "dev": true, - "requires": { - "bs58": "^4.0.0", - "create-hash": "^1.1.0", - "safe-buffer": "^5.1.2" - } - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "buffer-from": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true - }, - "buffer-reverse": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/buffer-reverse/-/buffer-reverse-1.0.1.tgz", - "integrity": "sha512-M87YIUBsZ6N924W57vDwT/aOu8hw7ZgdByz6ijksLjmHJELBASmYTTlNHRgjE+pTsT9oJXGaDSgqqwfdHotDUg==", - "dev": true - }, - "buffer-xor": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", - "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", - "dev": true - }, - "busboy": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", - "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", - "dev": true, - "requires": { - "streamsearch": "^1.1.0" - } - }, - "bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", - "dev": true - }, - "call-bind": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", - "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "get-intrinsic": "^1.0.2" - } - }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", - "dev": true - }, - "catering": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.1.tgz", - "integrity": "sha512-K7Qy8O9p76sL3/3m7/zLKbRkyOlSZAgzEaLhyj2mXS8PsCud2Eo4hAb8aLtZqHh0QGqLcb9dlJSu6lHRVENm1w==", - "dev": true - }, - "chai": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", - "integrity": "sha512-HLnAzZ2iupm25PlN0xFreAlBA5zaBSv3og0DdeGA4Ar6h6rJ3A0rolRUKJhSF2V10GZKDgWF/VmAEsNWjCRB+A==", - "dev": true, - "requires": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", - "pathval": "^1.1.1", - "type-detect": "^4.0.5" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", - "dev": true - }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "ci-info": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", - "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", - "dev": true - }, - "cipher-base": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", - "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "classic-level": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/classic-level/-/classic-level-1.2.0.tgz", - "integrity": "sha512-qw5B31ANxSluWz9xBzklRWTUAJ1SXIdaVKTVS7HcTGKOAmExx65Wo5BUICW+YGORe2FOUaDghoI9ZDxj82QcFg==", - "dev": true, - "requires": { - "abstract-level": "^1.0.2", - "catering": "^2.1.0", - "module-error": "^1.0.1", - "napi-macros": "~2.0.0", - "node-gyp-build": "^4.3.0" - } - }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, - "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" - } - }, - "code-point-at": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", - "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", - "dev": true, - "peer": true - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "command-exists": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", - "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", - "dev": true - }, - "command-line-args": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.2.1.tgz", - "integrity": "sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg==", - "dev": true, - "requires": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" - } - }, - "command-line-usage": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.3.tgz", - "integrity": "sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw==", - "dev": true, - "requires": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" - }, - "dependencies": { - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "commander": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/commander/-/commander-3.0.2.tgz", - "integrity": "sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true - }, - "cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", - "dev": true - }, - "core-js-pure": { - "version": "3.29.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.29.1.tgz", - "integrity": "sha512-4En6zYVi0i0XlXHVz/bi6l1XDjCqkKRq765NXuX+SnaIatlE96Odt5lMLjdxUiNI1v9OXI5DSLWYPlmTfkTktg==", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true - }, - "crc-32": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", - "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", - "dev": true - }, - "create-hash": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", - "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.1", - "inherits": "^2.0.1", - "md5.js": "^1.3.4", - "ripemd160": "^2.0.1", - "sha.js": "^2.4.0" - } - }, - "create-hmac": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", - "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", - "dev": true, - "requires": { - "cipher-base": "^1.0.3", - "create-hash": "^1.1.0", - "inherits": "^2.0.1", - "ripemd160": "^2.0.0", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true - }, - "crypto-js": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-3.3.0.tgz", - "integrity": "sha512-DIT51nX0dCfKltpRiXV+/TVZq+Qq2NgF4644+K7Ttnla7zEzqc+kjJyiB96BHNyUTBxyjzRcZYpUdZa+QAqi6Q==", - "dev": true - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "requires": { - "ms": "2.1.2" - } - }, - "decamelize": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz", - "integrity": "sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==", - "dev": true - }, - "deep-eql": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", - "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", - "dev": true, - "requires": { - "type-detect": "^4.0.0" - } - }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true - }, - "deferred-leveldown": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/deferred-leveldown/-/deferred-leveldown-5.3.0.tgz", - "integrity": "sha512-a59VOT+oDy7vtAbLRCZwWgxu2BaCfd5Hk7wxJd48ei7I+nsg8Orlb9CLG0PMZienk9BSUKgeAqkO2+Lw+1+Ukw==", - "dev": true, - "requires": { - "abstract-leveldown": "~6.2.1", - "inherits": "^2.0.3" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "requires": { - "xtend": "^4.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", - "dev": true - }, - "depd": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", - "dev": true - }, - "diff": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/diff/-/diff-5.0.0.tgz", - "integrity": "sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==", - "dev": true - }, - "dotenv": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", - "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", - "dev": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "dev": true - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "encode-utf8": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/encode-utf8/-/encode-utf8-1.0.3.tgz", - "integrity": "sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw==", - "dev": true - }, - "encoding-down": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/encoding-down/-/encoding-down-6.3.0.tgz", - "integrity": "sha512-QKrV0iKR6MZVJV08QY0wp1e7vF6QbhnbQhb07bwpEyuz4uZiZgPlEGdkCROuFkUwdxlFaiPIhjyarH1ee/3vhw==", - "dev": true, - "requires": { - "abstract-leveldown": "^6.2.1", - "inherits": "^2.0.3", - "level-codec": "^9.0.0", - "level-errors": "^2.0.0" - } - }, - "enquirer": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", - "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", - "dev": true, - "requires": { - "ansi-colors": "^4.1.1" - } - }, - "env-paths": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", - "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", - "dev": true - }, - "errno": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", - "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", - "dev": true, - "requires": { - "prr": "~1.0.1" - } - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "peer": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "eth-ens-namehash": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/eth-ens-namehash/-/eth-ens-namehash-2.0.8.tgz", - "integrity": "sha512-VWEI1+KJfz4Km//dadyvBBoBeSQ0MHTXPvr8UIXiLW6IanxvAV+DmlZAijZwAyggqGUfwQBeHf7tc9wzc1piSw==", - "dev": true, - "peer": true, - "requires": { - "idna-uts46-hx": "^2.3.1", - "js-sha3": "^0.5.7" - }, - "dependencies": { - "js-sha3": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.5.7.tgz", - "integrity": "sha512-GII20kjaPX0zJ8wzkTbNDYMY7msuZcTWk8S5UOh6806Jq/wz1J8/bnr8uGU0DAUmYDjj2Mr4X1cW8v/GLYnR+g==", - "dev": true, - "peer": true - } - } - }, - "ethereum-bloom-filters": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/ethereum-bloom-filters/-/ethereum-bloom-filters-1.0.10.tgz", - "integrity": "sha512-rxJ5OFN3RwjQxDcFP2Z5+Q9ho4eIdEmSc2ht0fCu8Se9nbXjZ7/031uXoUYJ87KHCOdVeiUuwSnoS7hmYAGVHA==", - "dev": true, - "requires": { - "js-sha3": "^0.8.0" - } - }, - "ethereum-cryptography": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz", - "integrity": "sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw==", - "dev": true, - "requires": { - "@noble/hashes": "1.2.0", - "@noble/secp256k1": "1.7.1", - "@scure/bip32": "1.1.5", - "@scure/bip39": "1.1.1" - } - }, - "ethereum-waffle": { - "version": "4.0.10", - "resolved": "https://registry.npmjs.org/ethereum-waffle/-/ethereum-waffle-4.0.10.tgz", - "integrity": "sha512-iw9z1otq7qNkGDNcMoeNeLIATF9yKl1M8AIeu42ElfNBplq0e+5PeasQmm8ybY/elkZ1XyRO0JBQxQdVRb8bqQ==", - "dev": true, - "requires": { - "@ethereum-waffle/chai": "4.0.10", - "@ethereum-waffle/compiler": "4.0.3", - "@ethereum-waffle/mock-contract": "4.0.4", - "@ethereum-waffle/provider": "4.0.5", - "solc": "0.8.15", - "typechain": "^8.0.0" - }, - "dependencies": { - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - }, - "solc": { - "version": "0.8.15", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.8.15.tgz", - "integrity": "sha512-Riv0GNHNk/SddN/JyEuFKwbcWcEeho15iyupTSHw5Np6WuXA5D8kEHbyzDHi6sqmvLzu2l+8b1YmL8Ytple+8w==", - "dev": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "^8.1.0", - "follow-redirects": "^1.12.1", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "semver": "^5.5.0", - "tmp": "0.0.33" - } - } - } - }, - "ethereumjs-abi": { - "version": "0.6.8", - "resolved": "https://registry.npmjs.org/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz", - "integrity": "sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA==", - "dev": true, - "requires": { - "bn.js": "^4.11.8", - "ethereumjs-util": "^6.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "ethereumjs-util": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", - "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", - "dev": true, - "requires": { - "@types/bn.js": "^4.11.3", - "bn.js": "^4.11.0", - "create-hash": "^1.1.2", - "elliptic": "^6.5.2", - "ethereum-cryptography": "^0.1.3", - "ethjs-util": "0.1.6", - "rlp": "^2.2.3" - }, - "dependencies": { - "@types/bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - }, - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - } - } - }, - "ethers": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz", - "integrity": "sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==", - "dev": true, - "requires": { - "@ethersproject/abi": "5.7.0", - "@ethersproject/abstract-provider": "5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "5.7.0", - "@ethersproject/base64": "5.7.0", - "@ethersproject/basex": "5.7.0", - "@ethersproject/bignumber": "5.7.0", - "@ethersproject/bytes": "5.7.0", - "@ethersproject/constants": "5.7.0", - "@ethersproject/contracts": "5.7.0", - "@ethersproject/hash": "5.7.0", - "@ethersproject/hdnode": "5.7.0", - "@ethersproject/json-wallets": "5.7.0", - "@ethersproject/keccak256": "5.7.0", - "@ethersproject/logger": "5.7.0", - "@ethersproject/networks": "5.7.1", - "@ethersproject/pbkdf2": "5.7.0", - "@ethersproject/properties": "5.7.0", - "@ethersproject/providers": "5.7.2", - "@ethersproject/random": "5.7.0", - "@ethersproject/rlp": "5.7.0", - "@ethersproject/sha2": "5.7.0", - "@ethersproject/signing-key": "5.7.0", - "@ethersproject/solidity": "5.7.0", - "@ethersproject/strings": "5.7.0", - "@ethersproject/transactions": "5.7.0", - "@ethersproject/units": "5.7.0", - "@ethersproject/wallet": "5.7.0", - "@ethersproject/web": "5.7.1", - "@ethersproject/wordlists": "5.7.0" - } - }, - "ethjs-unit": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-unit/-/ethjs-unit-0.1.6.tgz", - "integrity": "sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw==", - "dev": true, - "requires": { - "bn.js": "4.11.6", - "number-to-bn": "1.7.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true - } - } - }, - "ethjs-util": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", - "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0", - "strip-hex-prefix": "1.0.0" - } - }, - "event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "dev": true - }, - "evp_bytestokey": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", - "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", - "dev": true, - "requires": { - "md5.js": "^1.3.4", - "safe-buffer": "^5.1.1" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", - "dev": true - }, - "fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true - }, - "fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true - }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { - "to-regex-range": "^5.0.1" - } - }, - "find-replace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", - "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", - "dev": true, - "requires": { - "array-back": "^3.0.1" - } - }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "flat": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", - "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", - "dev": true - }, - "fmix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/fmix/-/fmix-0.1.0.tgz", - "integrity": "sha512-Y6hyofImk9JdzU8k5INtTXX1cu8LDlePWDFU5sftm9H+zKCr5SGrVjdhkvsim646cw5zD0nADj8oHyXMZmCZ9w==", - "dev": true, - "requires": { - "imul": "^1.0.0" - } - }, - "follow-redirects": { - "version": "1.15.2", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", - "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", - "dev": true - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", - "dev": true - }, - "form-data": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", - "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fp-ts": { - "version": "1.19.3", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-1.19.3.tgz", - "integrity": "sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg==", - "dev": true - }, - "fs-extra": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", - "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - } - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "optional": true - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true - }, - "ganache": { - "version": "7.4.3", - "resolved": "https://registry.npmjs.org/ganache/-/ganache-7.4.3.tgz", - "integrity": "sha512-RpEDUiCkqbouyE7+NMXG26ynZ+7sGiODU84Kz+FVoXUnQ4qQM4M8wif3Y4qUCt+D/eM1RVeGq0my62FPD6Y1KA==", - "dev": true, - "requires": { - "@trufflesuite/bigint-buffer": "1.1.10", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "5.1.1", - "@types/seedrandom": "3.0.1", - "bufferutil": "4.0.5", - "emittery": "0.10.0", - "keccak": "3.0.2", - "leveldown": "6.1.0", - "secp256k1": "4.0.3", - "utf-8-validate": "5.0.7" - }, - "dependencies": { - "@trufflesuite/bigint-buffer": { - "version": "1.1.10", - "resolved": "https://registry.npmjs.org/@trufflesuite/bigint-buffer/-/bigint-buffer-1.1.10.tgz", - "integrity": "sha512-pYIQC5EcMmID74t26GCC67946mgTJFiLXOT/BYozgrd4UEY2JHEGLhWi9cMiQCt5BSqFEvKkCHNnoj82SRjiEw==", - "bundled": true, - "dev": true, - "requires": { - "node-gyp-build": "4.4.0" - }, - "dependencies": { - "node-gyp-build": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", - "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", - "bundled": true, - "dev": true - } - } - }, - "@types/bn.js": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.0.tgz", - "integrity": "sha512-QSSVYj7pYFN49kW77o2s9xTCwZ8F2xLbjLLSEVh8D2F4JUhZtPAGOFLTD+ffqksBx/u4cE/KImFjyhqCjn/LIA==", - "bundled": true, - "dev": true, - "requires": { - "@types/node": "*" - } - }, - "@types/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@types/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw==", - "bundled": true, - "dev": true - }, - "@types/node": { - "version": "17.0.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.0.tgz", - "integrity": "sha512-eMhwJXc931Ihh4tkU+Y7GiLzT/y/DBNpNtr4yU9O2w3SYBsr9NaOPhQlLKRmoWtI54uNwuo0IOUFQjVOTZYRvw==", - "bundled": true, - "dev": true - }, - "@types/seedrandom": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-3.0.1.tgz", - "integrity": "sha512-giB9gzDeiCeloIXDgzFBCgjj1k4WxcDrZtGl6h1IqmUPlxF+Nx8Ve+96QCyDZ/HseB/uvDsKbpib9hU5cU53pw==", - "bundled": true, - "dev": true - }, - "base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "bundled": true, - "dev": true - }, - "brorand": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", - "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", - "bundled": true, - "dev": true - }, - "buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "bundled": true, - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "bufferutil": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/bufferutil/-/bufferutil-4.0.5.tgz", - "integrity": "sha512-HTm14iMQKK2FjFLRTM5lAVcyaUzOnqbPtesFIvREgXpJHdQm8bWS+GkQgIkfaBYRHuCnea7w8UVNfwiAQhlr9A==", - "dev": true, - "optional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "catering": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/catering/-/catering-2.1.0.tgz", - "integrity": "sha512-M5imwzQn6y+ODBfgi+cfgZv2hIUI6oYU/0f35Mdb1ujGeqeoI5tOnl9Q13DTH7LW+7er+NYq8stNOKZD/Z3U/A==", - "bundled": true, - "dev": true, - "requires": { - "queue-tick": "^1.0.0" - } - }, - "elliptic": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", - "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", - "bundled": true, - "dev": true, - "requires": { - "bn.js": "^4.11.9", - "brorand": "^1.1.0", - "hash.js": "^1.0.0", - "hmac-drbg": "^1.0.1", - "inherits": "^2.0.4", - "minimalistic-assert": "^1.0.1", - "minimalistic-crypto-utils": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "bundled": true, - "dev": true - } - } - }, - "emittery": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.0.tgz", - "integrity": "sha512-AGvFfs+d0JKCJQ4o01ASQLGPmSCxgfU9RFXvzPvZdjKK8oscynksuJhWrSTSw7j7Ep/sZct5b5ZhYCi8S/t0HQ==", - "bundled": true, - "dev": true - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", - "bundled": true, - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "bundled": true, - "dev": true - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "bundled": true, - "dev": true - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "bundled": true, - "dev": true - }, - "keccak": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", - "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", - "bundled": true, - "dev": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "leveldown": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/leveldown/-/leveldown-6.1.0.tgz", - "integrity": "sha512-8C7oJDT44JXxh04aSSsfcMI8YiaGRhOFI9/pMEL7nWJLVsWajDPTRxsSHTM2WcTVY5nXM+SuRHzPPi0GbnDX+w==", - "bundled": true, - "dev": true, - "requires": { - "abstract-leveldown": "^7.2.0", - "napi-macros": "~2.0.0", - "node-gyp-build": "^4.3.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-7.2.0.tgz", - "integrity": "sha512-DnhQwcFEaYsvYDnACLZhMmCWd3rkOeEvglpa4q5i/5Jlm3UIsWaxVzuXvDLFCSCWRO3yy2/+V/G7FusFgejnfQ==", - "bundled": true, - "dev": true, - "requires": { - "buffer": "^6.0.3", - "catering": "^2.0.0", - "is-buffer": "^2.0.5", - "level-concat-iterator": "^3.0.0", - "level-supports": "^2.0.1", - "queue-microtask": "^1.2.3" - } - }, - "level-concat-iterator": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-3.1.0.tgz", - "integrity": "sha512-BWRCMHBxbIqPxJ8vHOvKUsaO0v1sLYZtjN3K2iZJsRBYtp+ONsY6Jfi6hy9K3+zolgQRryhIn2NRZjZnWJ9NmQ==", - "bundled": true, - "dev": true, - "requires": { - "catering": "^2.1.0" - } - }, - "level-supports": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-2.1.0.tgz", - "integrity": "sha512-E486g1NCjW5cF78KGPrMDRBYzPuueMZ6VBXHT6gC7A8UYWGiM14fGgp+s/L1oFfDWSPV/+SFkYCmZ0SiESkRKA==", - "bundled": true, - "dev": true - } - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "bundled": true, - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", - "bundled": true, - "dev": true - }, - "napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "bundled": true, - "dev": true - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "bundled": true, - "dev": true - }, - "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", - "bundled": true, - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "bundled": true, - "dev": true - }, - "queue-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.0.tgz", - "integrity": "sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ==", - "bundled": true, - "dev": true - }, - "readable-stream": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", - "bundled": true, - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "bundled": true, - "dev": true - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "bundled": true, - "dev": true, - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "utf-8-validate": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.7.tgz", - "integrity": "sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==", - "dev": true, - "optional": true, - "requires": { - "node-gyp-build": "^4.3.0" - } - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "bundled": true, - "dev": true - } - } - }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "get-func-name": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz", - "integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==", - "dev": true - }, - "get-intrinsic": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", - "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", - "dev": true, - "requires": { - "function-bind": "^1.1.1", - "has": "^1.0.3", - "has-symbols": "^1.0.3" - } - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" - } - }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", - "dev": true - }, - "har-validator": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", - "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "dev": true, - "requires": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - } - }, - "hardhat": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/hardhat/-/hardhat-2.13.0.tgz", - "integrity": "sha512-ZlzBOLML1QGlm6JWyVAG8lVTEAoOaVm1in/RU2zoGAnYEoD1Rp4T+ZMvrLNhHaaeS9hfjJ1gJUBfiDr4cx+htQ==", - "dev": true, - "requires": { - "@ethersproject/abi": "^5.1.2", - "@metamask/eth-sig-util": "^4.0.0", - "@nomicfoundation/ethereumjs-block": "^4.0.0", - "@nomicfoundation/ethereumjs-blockchain": "^6.0.0", - "@nomicfoundation/ethereumjs-common": "^3.0.0", - "@nomicfoundation/ethereumjs-evm": "^1.0.0", - "@nomicfoundation/ethereumjs-rlp": "^4.0.0", - "@nomicfoundation/ethereumjs-statemanager": "^1.0.0", - "@nomicfoundation/ethereumjs-trie": "^5.0.0", - "@nomicfoundation/ethereumjs-tx": "^4.0.0", - "@nomicfoundation/ethereumjs-util": "^8.0.0", - "@nomicfoundation/ethereumjs-vm": "^6.0.0", - "@nomicfoundation/solidity-analyzer": "^0.1.0", - "@sentry/node": "^5.18.1", - "@types/bn.js": "^5.1.0", - "@types/lru-cache": "^5.1.0", - "abort-controller": "^3.0.0", - "adm-zip": "^0.4.16", - "aggregate-error": "^3.0.0", - "ansi-escapes": "^4.3.0", - "chalk": "^2.4.2", - "chokidar": "^3.4.0", - "ci-info": "^2.0.0", - "debug": "^4.1.1", - "enquirer": "^2.3.0", - "env-paths": "^2.2.0", - "ethereum-cryptography": "^1.0.3", - "ethereumjs-abi": "^0.6.8", - "find-up": "^2.1.0", - "fp-ts": "1.19.3", - "fs-extra": "^7.0.1", - "glob": "7.2.0", - "immutable": "^4.0.0-rc.12", - "io-ts": "1.10.4", - "keccak": "^3.0.2", - "lodash": "^4.17.11", - "mnemonist": "^0.38.0", - "mocha": "^10.0.0", - "p-map": "^4.0.0", - "qs": "^6.7.0", - "raw-body": "^2.4.1", - "resolve": "1.17.0", - "semver": "^6.3.0", - "solc": "0.7.3", - "source-map-support": "^0.5.13", - "stacktrace-parser": "^0.1.10", - "tsort": "0.0.1", - "undici": "^5.14.0", - "uuid": "^8.3.2", - "ws": "^7.4.6" - } - }, - "hardhat-deploy": { - "version": "0.11.26", - "resolved": "https://registry.npmjs.org/hardhat-deploy/-/hardhat-deploy-0.11.26.tgz", - "integrity": "sha512-GvnkD8v6q0coCQbwZNeUcO3ab1zz36FKsqzNdm6EcnVoAfXVkFpdA0pgJ7/Rk3+Lv5709xOtbneFOyoukUOhWQ==", - "dev": true, - "requires": { - "@ethersproject/abi": "^5.7.0", - "@ethersproject/abstract-signer": "^5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "@ethersproject/solidity": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wallet": "^5.7.0", - "@types/qs": "^6.9.7", - "axios": "^0.21.1", - "chalk": "^4.1.2", - "chokidar": "^3.5.2", - "debug": "^4.3.2", - "enquirer": "^2.3.6", - "ethers": "^5.5.3", - "form-data": "^4.0.0", - "fs-extra": "^10.0.0", - "match-all": "^1.2.6", - "murmur-128": "^0.2.1", - "qs": "^6.9.4", - "zksync-web3": "^0.14.3" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "fs-extra": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6", - "universalify": "^2.0.0" - } - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - }, - "universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", - "dev": true - } - } - }, - "has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "requires": { - "function-bind": "^1.1.1" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", - "dev": true - }, - "hash-base": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", - "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.6.0", - "safe-buffer": "^5.2.0" - } - }, - "hash.js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", - "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "minimalistic-assert": "^1.0.1" - } - }, - "he": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", - "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", - "dev": true - }, - "hmac-drbg": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", - "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", - "dev": true, - "requires": { - "hash.js": "^1.0.3", - "minimalistic-assert": "^1.0.0", - "minimalistic-crypto-utils": "^1.0.1" - } - }, - "hosted-git-info": { - "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true - }, - "http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", - "dev": true, - "requires": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "dev": true, - "requires": { - "agent-base": "6", - "debug": "4" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "idna-uts46-hx": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz", - "integrity": "sha512-PWoF9Keq6laYdIRwwCdhTPl60xRqAloYNMQLiyUnG42VjT53oW07BXIRM+NK7eQjzXjAk2gUvX9caRxlnF9TAA==", - "dev": true, - "peer": true, - "requires": { - "punycode": "2.1.0" - } - }, - "ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "immediate": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz", - "integrity": "sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q==", - "dev": true - }, - "immutable": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", - "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", - "dev": true - }, - "imul": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/imul/-/imul-1.0.1.tgz", - "integrity": "sha512-WFAgfwPLAjU66EKt6vRdTlKj4nAgIDQzh29JonLa4Bqtl6D8JrIMvWjCnx7xEjVNmP3U0fM5o8ZObk7d0f62bA==", - "dev": true - }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha512-xgs2NH9AE66ucSq4cNG1nhSFghr5l6tdL15Pk+jl46bmmBapgoaY/AacXyaDznAqmGL99TiLSQgO/XazFSKYeQ==", - "dev": true, - "peer": true - }, - "io-ts": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/io-ts/-/io-ts-1.10.4.tgz", - "integrity": "sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g==", - "dev": true, - "requires": { - "fp-ts": "^1.0.0" - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true, - "peer": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } - }, - "is-buffer": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", - "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { - "is-extglob": "^2.1.1" - } - }, - "is-hex-prefixed": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", - "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", - "dev": true - }, - "is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true - }, - "is-plain-obj": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", - "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", - "dev": true - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true - }, - "is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true - }, - "is-url": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", - "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", - "dev": true - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", - "dev": true, - "peer": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", - "dev": true - }, - "js-sha3": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz", - "integrity": "sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==", - "dev": true - }, - "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, - "requires": { - "argparse": "^2.0.1" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", - "dev": true - }, - "json-bigint": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/json-bigint/-/json-bigint-1.0.0.tgz", - "integrity": "sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==", - "dev": true, - "requires": { - "bignumber.js": "^9.0.0" - } - }, - "json-schema": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", - "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", - "dev": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true - }, - "jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "jsprim": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", - "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - } - }, - "keccak": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.3.tgz", - "integrity": "sha512-JZrLIAJWuZxKbCilMpNz5Vj7Vtb4scDG3dMXLOsbzBmQGyjwE61BbW7bJkfKKCShXiQZt3T6sBgALRtmd+nZaQ==", - "dev": true, - "requires": { - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0", - "readable-stream": "^3.6.0" - } - }, - "keccak256": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/keccak256/-/keccak256-1.0.6.tgz", - "integrity": "sha512-8GLiM01PkdJVGUhR1e6M/AvWnSqYS0HaERI+K/QtStGDGlSTx2B1zTqZk4Zlqu5TxHJNTxWAdP9Y+WI50OApUw==", - "dev": true, - "requires": { - "bn.js": "^5.2.0", - "buffer": "^6.0.3", - "keccak": "^3.0.2" - } - }, - "klaw": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", - "integrity": "sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.9" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha512-YiGkH6EnGrDGqLMITnGjXtGmNtjoXw9SVUzcaos8RBi7Ps0VBylkq+vOcY9QE5poLasPCR849ucFUkl0UzUyOw==", - "dev": true, - "peer": true, - "requires": { - "invert-kv": "^1.0.0" - } - }, - "level": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/level/-/level-8.0.0.tgz", - "integrity": "sha512-ypf0jjAk2BWI33yzEaaotpq7fkOPALKAgDBxggO6Q9HGX2MRXn0wbP1Jn/tJv1gtL867+YOjOB49WaUF3UoJNQ==", - "dev": true, - "requires": { - "browser-level": "^1.0.1", - "classic-level": "^1.2.0" - } - }, - "level-codec": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/level-codec/-/level-codec-9.0.2.tgz", - "integrity": "sha512-UyIwNb1lJBChJnGfjmO0OR+ezh2iVu1Kas3nvBS/BzGnx79dv6g7unpKIDNPMhfdTEGoc7mC8uAu51XEtX+FHQ==", - "dev": true, - "requires": { - "buffer": "^5.6.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - } - } - }, - "level-concat-iterator": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-concat-iterator/-/level-concat-iterator-2.0.1.tgz", - "integrity": "sha512-OTKKOqeav2QWcERMJR7IS9CUo1sHnke2C0gkSmcR7QuEtFNLLzHQAvnMw8ykvEcv0Qtkg0p7FOwP1v9e5Smdcw==", - "dev": true - }, - "level-errors": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/level-errors/-/level-errors-2.0.1.tgz", - "integrity": "sha512-UVprBJXite4gPS+3VznfgDSU8PTRuVX0NXwoWW50KLxd2yw4Y1t2JUR5In1itQnudZqRMT9DlAM3Q//9NCjCFw==", - "dev": true, - "requires": { - "errno": "~0.1.1" - } - }, - "level-iterator-stream": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/level-iterator-stream/-/level-iterator-stream-4.0.2.tgz", - "integrity": "sha512-ZSthfEqzGSOMWoUGhTXdX9jv26d32XJuHz/5YnuHZzH6wldfWMOVwI9TBtKcya4BKTyTt3XVA0A3cF3q5CY30Q==", - "dev": true, - "requires": { - "inherits": "^2.0.4", - "readable-stream": "^3.4.0", - "xtend": "^4.0.2" - } - }, - "level-mem": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/level-mem/-/level-mem-5.0.1.tgz", - "integrity": "sha512-qd+qUJHXsGSFoHTziptAKXoLX87QjR7v2KMbqncDXPxQuCdsQlzmyX+gwrEHhlzn08vkf8TyipYyMmiC6Gobzg==", - "dev": true, - "requires": { - "level-packager": "^5.0.3", - "memdown": "^5.0.0" - } - }, - "level-packager": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/level-packager/-/level-packager-5.1.1.tgz", - "integrity": "sha512-HMwMaQPlTC1IlcwT3+swhqf/NUO+ZhXVz6TY1zZIIZlIR0YSn8GtAAWmIvKjNY16ZkEg/JcpAuQskxsXqC0yOQ==", - "dev": true, - "requires": { - "encoding-down": "^6.3.0", - "levelup": "^4.3.2" - } - }, - "level-supports": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-4.0.1.tgz", - "integrity": "sha512-PbXpve8rKeNcZ9C1mUicC9auIYFyGpkV9/i6g76tLgANwWhtG2v7I4xNBUlkn3lE2/dZF3Pi0ygYGtLc4RXXdA==", - "dev": true - }, - "level-transcoder": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-transcoder/-/level-transcoder-1.0.1.tgz", - "integrity": "sha512-t7bFwFtsQeD8cl8NIoQ2iwxA0CL/9IFw7/9gAjOonH0PWTTiRfY7Hq+Ejbsxh86tXobDQ6IOiddjNYIfOBs06w==", - "dev": true, - "requires": { - "buffer": "^6.0.3", - "module-error": "^1.0.1" - } - }, - "level-ws": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/level-ws/-/level-ws-2.0.0.tgz", - "integrity": "sha512-1iv7VXx0G9ec1isqQZ7y5LmoZo/ewAsyDHNA8EFDW5hqH2Kqovm33nSFkSdnLLAK+I5FlT+lo5Cw9itGe+CpQA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "readable-stream": "^3.1.0", - "xtend": "^4.0.1" - } - }, - "levelup": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/levelup/-/levelup-4.4.0.tgz", - "integrity": "sha512-94++VFO3qN95cM/d6eBXvd894oJE0w3cInq9USsyQzzoJxmiYzPAocNcuGCPGGjoXqDVJcr3C1jzt1TSjyaiLQ==", - "dev": true, - "requires": { - "deferred-leveldown": "~5.3.0", - "level-errors": "~2.0.0", - "level-iterator-stream": "~4.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - }, - "dependencies": { - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "requires": { - "xtend": "^4.0.2" - } - } - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, - "lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true - }, - "lodash.assign": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", - "integrity": "sha512-hFuH8TY+Yji7Eja3mGiuAxBqLagejScbG8GbG0j6o9vzn0YL14My+ktnqtZgFTosKymC9/44wP6s7xyuLfnClw==", - "dev": true, - "peer": true - }, - "lodash.camelcase": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", - "dev": true - }, - "log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "requires": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", - "dev": true, - "requires": { - "get-func-name": "^2.0.0" - } - }, - "lru_map": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.3.3.tgz", - "integrity": "sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ==", - "dev": true - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "ltgt": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ltgt/-/ltgt-2.2.1.tgz", - "integrity": "sha512-AI2r85+4MquTw9ZYqabu4nMwy9Oftlfa/e/52t9IjtfG+mGBbTNdAoZ3RQKLHR6r0wQnwZnPIEh/Ya6XTWAKNA==", - "dev": true - }, - "make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true - }, - "match-all": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/match-all/-/match-all-1.2.6.tgz", - "integrity": "sha512-0EESkXiTkWzrQQntBu2uzKvLu6vVkUGz40nGPbSZuegcfE5UuSzNjLaIu76zJWuaT/2I3Z/8M06OlUOZLGwLlQ==", - "dev": true - }, - "mcl-wasm": { - "version": "0.7.9", - "resolved": "https://registry.npmjs.org/mcl-wasm/-/mcl-wasm-0.7.9.tgz", - "integrity": "sha512-iJIUcQWA88IJB/5L15GnJVnSQJmf/YaxxV6zRavv83HILHaJQb6y0iFyDMdDO0gN8X37tdxmAOrH/P8B6RB8sQ==", - "dev": true - }, - "md5.js": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", - "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1", - "safe-buffer": "^5.1.2" - } - }, - "memdown": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/memdown/-/memdown-5.1.0.tgz", - "integrity": "sha512-B3J+UizMRAlEArDjWHTMmadet+UKwHd3UjMgGBkZcKAxAYVPS9o0Yeiha4qvz7iGiL2Sb3igUft6p7nbFWctpw==", - "dev": true, - "requires": { - "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.2.0" - }, - "dependencies": { - "abstract-leveldown": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.2.3.tgz", - "integrity": "sha512-BsLm5vFMRUrrLeCcRc+G0t2qOaTzpoJQLOubq2XM72eNpjF5UdU5o/5NvlNhx95XHcAvcl8OMXr4mlg/fRgUXQ==", - "dev": true, - "requires": { - "buffer": "^5.5.0", - "immediate": "^3.2.3", - "level-concat-iterator": "~2.0.0", - "level-supports": "~1.0.0", - "xtend": "~4.0.0" - } - }, - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "immediate": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz", - "integrity": "sha512-RrGCXRm/fRVqMIhqXrGEX9rRADavPiDFSoMb/k64i9XMk8uH4r/Omi5Ctierj6XzNecwDbO4WuFbDD1zmpl3Tg==", - "dev": true - }, - "level-supports": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/level-supports/-/level-supports-1.0.1.tgz", - "integrity": "sha512-rXM7GYnW8gsl1vedTJIbzOrRv85c/2uCMpiiCzO2fndd06U/kUXEEU9evYn4zFggBOg36IsBW8LzqIpETwwQzg==", - "dev": true, - "requires": { - "xtend": "^4.0.2" - } - } - } - }, - "memory-level": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/memory-level/-/memory-level-1.0.0.tgz", - "integrity": "sha512-UXzwewuWeHBz5krr7EvehKcmLFNoXxGcvuYhC41tRnkrTbJohtS7kVn9akmgirtRygg+f7Yjsfi8Uu5SGSQ4Og==", - "dev": true, - "requires": { - "abstract-level": "^1.0.0", - "functional-red-black-tree": "^1.0.1", - "module-error": "^1.0.1" - } - }, - "memorystream": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", - "integrity": "sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==", - "dev": true - }, - "merkle-patricia-tree": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/merkle-patricia-tree/-/merkle-patricia-tree-4.2.4.tgz", - "integrity": "sha512-eHbf/BG6eGNsqqfbLED9rIqbsF4+sykEaBn6OLNs71tjclbMcMOk1tEPmJKcNcNCLkvbpY/lwyOlizWsqPNo8w==", - "dev": true, - "requires": { - "@types/levelup": "^4.3.0", - "ethereumjs-util": "^7.1.4", - "level-mem": "^5.0.1", - "level-ws": "^2.0.0", - "readable-stream": "^3.6.0", - "semaphore-async-await": "^1.5.1" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "merkletreejs": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/merkletreejs/-/merkletreejs-0.3.9.tgz", - "integrity": "sha512-NjlATjJr4NEn9s8v/VEHhgwRWaE1eA/Une07d9SEqKzULJi1Wsh0Y3svwJdP2bYLMmgSBHzOrNydMWM1NN9VeQ==", - "dev": true, - "requires": { - "bignumber.js": "^9.0.1", - "buffer-reverse": "^1.0.1", - "crypto-js": "^3.1.9-1", - "treeify": "^1.1.0", - "web3-utils": "^1.3.4" - } - }, - "miller-rabin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", - "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", - "dev": true, - "requires": { - "bn.js": "^4.0.0", - "brorand": "^1.0.1" - }, - "dependencies": { - "bn.js": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", - "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", - "dev": true - } - } - }, - "mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "dev": true - }, - "mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dev": true, - "requires": { - "mime-db": "1.52.0" - } - }, - "minimalistic-assert": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", - "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", - "dev": true - }, - "minimalistic-crypto-utils": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", - "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", - "dev": true - }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true - }, - "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", - "dev": true - }, - "mnemonist": { - "version": "0.38.5", - "resolved": "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.5.tgz", - "integrity": "sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg==", - "dev": true, - "requires": { - "obliterator": "^2.0.0" - } - }, - "mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.2.0.tgz", - "integrity": "sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==", - "dev": true, - "requires": { - "ansi-colors": "4.1.1", - "browser-stdout": "1.3.1", - "chokidar": "3.5.3", - "debug": "4.3.4", - "diff": "5.0.0", - "escape-string-regexp": "4.0.0", - "find-up": "5.0.0", - "glob": "7.2.0", - "he": "1.2.0", - "js-yaml": "4.1.0", - "log-symbols": "4.1.0", - "minimatch": "5.0.1", - "ms": "2.1.3", - "nanoid": "3.3.3", - "serialize-javascript": "6.0.0", - "strip-json-comments": "3.1.1", - "supports-color": "8.1.1", - "workerpool": "6.2.1", - "yargs": "16.2.0", - "yargs-parser": "20.2.4", - "yargs-unparser": "2.0.0" - }, - "dependencies": { - "ansi-colors": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", - "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", - "dev": true - }, - "brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0" - } - }, - "escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true - }, - "find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", - "dev": true, - "requires": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - } - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", - "dev": true, - "requires": { - "p-locate": "^5.0.0" - } - }, - "minimatch": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", - "dev": true, - "requires": { - "brace-expansion": "^2.0.1" - } - }, - "ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "dev": true - }, - "p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "requires": { - "yocto-queue": "^0.1.0" - } - }, - "p-locate": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", - "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", - "dev": true, - "requires": { - "p-limit": "^3.0.2" - } - }, - "path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", - "dev": true - }, - "supports-color": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "module-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/module-error/-/module-error-1.0.2.tgz", - "integrity": "sha512-0yuvsqSCv8LbaOKhnsQ/T5JhyFlCYLPXK3U2sgV10zoKQwzs/MyfuQUOZQ1V/6OCOJsK/TRgNVrPuPDqtdMFtA==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "murmur-128": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/murmur-128/-/murmur-128-0.2.1.tgz", - "integrity": "sha512-WseEgiRkI6aMFBbj8Cg9yBj/y+OdipwVC7zUo3W2W1JAJITwouUOtpqsmGSg67EQmwwSyod7hsVsWY5LsrfQVg==", - "dev": true, - "requires": { - "encode-utf8": "^1.0.2", - "fmix": "^0.1.0", - "imul": "^1.0.0" - } - }, - "nanoid": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", - "dev": true - }, - "napi-macros": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/napi-macros/-/napi-macros-2.0.0.tgz", - "integrity": "sha512-A0xLykHtARfueITVDernsAWdtIMbOJgKgcluwENp3AlsKN/PloyO10HtmoqnFAQAcxPkgZN7wdfPfEd0zNGxbg==", - "dev": true - }, - "node-addon-api": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", - "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", - "dev": true - }, - "node-fetch": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.9.tgz", - "integrity": "sha512-DJm/CJkZkRjKKj4Zi4BsKVZh3ValV5IR5s7LVZnW+6YMh0W1BfNA8XSs6DLMGYlId5F3KnA70uu2qepcR08Qqg==", - "dev": true, - "requires": { - "whatwg-url": "^5.0.0" - } - }, - "node-gyp-build": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", - "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", - "dev": true - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "peer": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - }, - "dependencies": { - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true, - "peer": true - } - } - }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", - "dev": true, - "peer": true - }, - "number-to-bn": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/number-to-bn/-/number-to-bn-1.7.0.tgz", - "integrity": "sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig==", - "dev": true, - "requires": { - "bn.js": "4.11.6", - "strip-hex-prefix": "1.0.0" - }, - "dependencies": { - "bn.js": { - "version": "4.11.6", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.6.tgz", - "integrity": "sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA==", - "dev": true - } - } - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true - }, - "object-inspect": { - "version": "1.12.3", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", - "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", - "dev": true - }, - "obliterator": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.4.tgz", - "integrity": "sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ==", - "dev": true - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha512-PRT7ZORmwu2MEFt4/fv3Q+mEfN4zetKxufQrkShY2oGvUms9r8otu5HfdyIFHkYXjO7laNsoVGmM2MANfuTA8g==", - "dev": true, - "peer": true, - "requires": { - "lcid": "^1.0.0" - } - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", - "dev": true, - "peer": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==", - "dev": true - }, - "path-exists": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", - "dev": true - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true - }, - "path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", - "dev": true, - "peer": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "pathval": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", - "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", - "dev": true - }, - "pbkdf2": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", - "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", - "dev": true, - "requires": { - "create-hash": "^1.1.2", - "create-hmac": "^1.1.4", - "ripemd160": "^2.0.1", - "safe-buffer": "^5.0.1", - "sha.js": "^2.4.8" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", - "dev": true, - "peer": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", - "dev": true, - "peer": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", - "dev": true, - "peer": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "prettier": { - "version": "2.8.7", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", - "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", - "dev": true - }, - "prr": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", - "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", - "dev": true - }, - "psl": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", - "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", - "dev": true - }, - "punycode": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.0.tgz", - "integrity": "sha512-Yxz2kRwT90aPiWEMHVYnEf4+rhwF1tBmmZ4KepCP+Wkium9JxtWnUm1nqGwpiAHr/tnTSeHqr3wb++jgSkXjhA==", - "dev": true - }, - "qs": { - "version": "6.11.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.1.tgz", - "integrity": "sha512-0wsrzgTz/kAVIeuxSjnpGC56rzYtr6JT/2BwEvMaPhFIoYa1aGO8LbzuU1R0uUYQkLpWBTOj0l/CLAJB64J6nQ==", - "dev": true, - "requires": { - "side-channel": "^1.0.4" - } - }, - "querystring": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", - "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", - "dev": true - }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "randombytes": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", - "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", - "dev": true, - "requires": { - "safe-buffer": "^5.1.0" - } - }, - "raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", - "dev": true, - "requires": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" - } - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", - "dev": true, - "peer": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", - "dev": true, - "peer": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - }, - "dependencies": { - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", - "dev": true, - "peer": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", - "dev": true, - "peer": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - } - } - }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" - } - }, - "reduce-flatten": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", - "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", - "dev": true - }, - "request": { - "version": "2.88.2", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", - "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "dev": true, - "requires": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "dependencies": { - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "qs": { - "version": "6.5.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", - "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", - "dev": true - }, - "uuid": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", - "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "dev": true - } - } - }, - "require-directory": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true - }, - "require-from-string": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", - "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", - "dev": true - }, - "require-main-filename": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", - "integrity": "sha512-IqSUtOVP4ksd1C/ej5zeEh/BIP2ajqpn8c5x+q99gvcIG/Qf0cud5raVnE/Dwd0ua9TXYDoDc0RE5hBSdz22Ug==", - "dev": true, - "peer": true - }, - "resolve": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", - "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } - }, - "ripemd160": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", - "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", - "dev": true, - "requires": { - "hash-base": "^3.0.0", - "inherits": "^2.0.1" - } - }, - "rlp": { - "version": "2.2.7", - "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", - "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", - "dev": true, - "requires": { - "bn.js": "^5.2.0" - } - }, - "run-parallel-limit": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/run-parallel-limit/-/run-parallel-limit-1.1.0.tgz", - "integrity": "sha512-jJA7irRNM91jaKc3Hcl1npHsFLOXOoTkPCUL1JEa1R82O2miplXXRaGdjW/KM/98YQWDhJLiSs793CnXfblJUw==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" - } - }, - "rustbn.js": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/rustbn.js/-/rustbn.js-0.2.0.tgz", - "integrity": "sha512-4VlvkRUuCJvr2J6Y0ImW7NvTCriMi7ErOAqWk1y69vAdoNIzCF3yPmgeNzx+RQTLEDFq5sHfscn1MwHxP9hNfA==", - "dev": true - }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "scrypt-js": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", - "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", - "dev": true - }, - "secp256k1": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", - "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", - "dev": true, - "requires": { - "elliptic": "^6.5.4", - "node-addon-api": "^2.0.0", - "node-gyp-build": "^4.2.0" - } - }, - "seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", - "dev": true - }, - "semaphore-async-await": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/semaphore-async-await/-/semaphore-async-await-1.5.1.tgz", - "integrity": "sha512-b/ptP11hETwYWpeilHXXQiV5UJNJl7ZWWooKRE5eBIYWoom6dZ0SluCIdCtKycsMtZgKWE01/qAw6jblw1YVhg==", - "dev": true - }, - "semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true - }, - "serialize-javascript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", - "integrity": "sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==", - "dev": true, - "requires": { - "randombytes": "^2.1.0" - } - }, - "set-blocking": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", - "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", - "dev": true, - "peer": true - }, - "setimmediate": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", - "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", - "dev": true - }, - "setprototypeof": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", - "dev": true - }, - "sha.js": { - "version": "2.4.11", - "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", - "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", - "dev": true, - "requires": { - "inherits": "^2.0.1", - "safe-buffer": "^5.0.1" - } - }, - "side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "requires": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - } - }, - "solc": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/solc/-/solc-0.7.3.tgz", - "integrity": "sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA==", - "dev": true, - "requires": { - "command-exists": "^1.2.8", - "commander": "3.0.2", - "follow-redirects": "^1.12.1", - "fs-extra": "^0.30.0", - "js-sha3": "0.8.0", - "memorystream": "^0.3.1", - "require-from-string": "^2.0.0", - "semver": "^5.5.0", - "tmp": "0.0.33" - }, - "dependencies": { - "fs-extra": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", - "integrity": "sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "jsonfile": "^2.1.0", - "klaw": "^1.0.0", - "path-is-absolute": "^1.0.0", - "rimraf": "^2.2.8" - } - }, - "jsonfile": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", - "integrity": "sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw==", - "dev": true, - "requires": { - "graceful-fs": "^4.1.6" - } - }, - "semver": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", - "dev": true - } - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - }, - "source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", - "dev": true, - "requires": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - } - }, - "spdx-correct": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", - "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", - "dev": true, - "peer": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true, - "peer": true - }, - "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", - "dev": true, - "peer": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.13", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", - "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", - "dev": true, - "peer": true - }, - "sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", - "dev": true, - "requires": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "dependencies": { - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", - "dev": true - } - } - }, - "stacktrace-parser": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz", - "integrity": "sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg==", - "dev": true, - "requires": { - "type-fest": "^0.7.1" - }, - "dependencies": { - "type-fest": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", - "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", - "dev": true - } - } - }, - "statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", - "dev": true - }, - "streamsearch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", - "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", - "dev": true - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } - }, - "string-format": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/string-format/-/string-format-2.0.0.tgz", - "integrity": "sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", - "dev": true, - "peer": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-hex-prefix": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", - "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", - "dev": true, - "requires": { - "is-hex-prefixed": "1.0.0" - } - }, - "strip-json-comments": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "table-layout": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", - "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", - "dev": true, - "requires": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" - }, - "dependencies": { - "array-back": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", - "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", - "dev": true - }, - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "testrpc": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/testrpc/-/testrpc-0.0.1.tgz", - "integrity": "sha512-afH1hO+SQ/VPlmaLUFj2636QMeDvPCeQMc/9RBMW0IfjNe9gFD9Ra3ShqYkB7py0do1ZcCna/9acHyzTJ+GcNA==", - "dev": true, - "peer": true - }, - "tmp": { - "version": "0.0.33", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", - "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, - "requires": { - "os-tmpdir": "~1.0.2" - } - }, - "to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { - "is-number": "^7.0.0" - } - }, - "toidentifier": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", - "dev": true - }, - "tough-cookie": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", - "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", - "dev": true, - "requires": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, - "dependencies": { - "punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", - "dev": true - } - } - }, - "tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true - }, - "treeify": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", - "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", - "dev": true - }, - "ts-command-line-args": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/ts-command-line-args/-/ts-command-line-args-2.4.2.tgz", - "integrity": "sha512-mJLQQBOdyD4XI/ZWQY44PIdYde47JhV2xl380O7twPkTQ+Y5vFDHsk8LOeXKuz7dVY5aDCfAzRarNfSqtKOkQQ==", - "dev": true, - "requires": { - "@morgan-stanley/ts-mocking-bird": "^0.6.2", - "chalk": "^4.1.0", - "command-line-args": "^5.1.1", - "command-line-usage": "^6.1.0", - "string-format": "^2.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, - "requires": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, - "supports-color": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, - "requires": { - "has-flag": "^4.0.0" - } - } - } - }, - "ts-essentials": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/ts-essentials/-/ts-essentials-7.0.3.tgz", - "integrity": "sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==", - "dev": true, - "requires": {} - }, - "ts-node": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", - "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, - "requires": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "dependencies": { - "diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true - } - } - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsort": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/tsort/-/tsort-0.0.1.tgz", - "integrity": "sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw==", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", - "dev": true - }, - "tweetnacl-util": { - "version": "0.15.1", - "resolved": "https://registry.npmjs.org/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz", - "integrity": "sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==", - "dev": true - }, - "type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", - "dev": true - }, - "type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true - }, - "typechain": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/typechain/-/typechain-8.1.1.tgz", - "integrity": "sha512-uF/sUvnXTOVF2FHKhQYnxHk4su4JjZR8vr4mA2mBaRwHTbwh0jIlqARz9XJr1tA0l7afJGvEa1dTSi4zt039LQ==", - "dev": true, - "requires": { - "@types/prettier": "^2.1.1", - "debug": "^4.3.1", - "fs-extra": "^7.0.0", - "glob": "7.1.7", - "js-sha3": "^0.8.0", - "lodash": "^4.17.15", - "mkdirp": "^1.0.4", - "prettier": "^2.3.1", - "ts-command-line-args": "^2.2.0", - "ts-essentials": "^7.0.1" - }, - "dependencies": { - "glob": { - "version": "7.1.7", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", - "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "typescript": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.2.tgz", - "integrity": "sha512-wVORMBGO/FAs/++blGNeAVdbNKtIh1rbBL2EyQ1+J9lClJ93KiiKe8PmFIVdXhHcyv44SL9oglmfeSsndo0jRw==", - "dev": true, - "peer": true - }, - "typical": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", - "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", - "dev": true - }, - "undici": { - "version": "5.21.0", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.21.0.tgz", - "integrity": "sha512-HOjK8l6a57b2ZGXOcUsI5NLfoTrfmbOl90ixJDl0AEFG4wgHNDQxtZy15/ZQp7HhjkpaGlp/eneMgtsu1dIlUA==", - "dev": true, - "requires": { - "busboy": "^1.6.0" - } - }, - "universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true - }, - "unpipe": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", - "dev": true - }, - "uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "url": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", - "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", - "dev": true, - "requires": { - "punycode": "1.3.2", - "querystring": "0.2.0" - }, - "dependencies": { - "punycode": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", - "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", - "dev": true - } - } - }, - "utf8": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/utf8/-/utf8-3.0.0.tgz", - "integrity": "sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true - }, - "v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "peer": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", - "dev": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "web3-utils": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-1.9.0.tgz", - "integrity": "sha512-p++69rCNNfu2jM9n5+VD/g26l+qkEOQ1m6cfRQCbH8ZRrtquTmrirJMgTmyOoax5a5XRYOuws14aypCOs51pdQ==", - "dev": true, - "requires": { - "bn.js": "^5.2.1", - "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", - "utf8": "3.0.0" - }, - "dependencies": { - "ethereum-cryptography": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", - "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", - "dev": true, - "requires": { - "@types/pbkdf2": "^3.0.0", - "@types/secp256k1": "^4.0.1", - "blakejs": "^1.1.0", - "browserify-aes": "^1.2.0", - "bs58check": "^2.1.2", - "create-hash": "^1.2.0", - "create-hmac": "^1.1.7", - "hash.js": "^1.1.7", - "keccak": "^3.0.0", - "pbkdf2": "^3.0.17", - "randombytes": "^2.1.0", - "safe-buffer": "^5.1.2", - "scrypt-js": "^3.0.0", - "secp256k1": "^4.0.1", - "setimmediate": "^1.0.5" - } - }, - "ethereumjs-util": { - "version": "7.1.5", - "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", - "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", - "dev": true, - "requires": { - "@types/bn.js": "^5.1.0", - "bn.js": "^5.1.2", - "create-hash": "^1.1.2", - "ethereum-cryptography": "^0.1.3", - "rlp": "^2.2.4" - } - } - } - }, - "webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true - }, - "whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "dev": true, - "requires": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha512-F6+WgncZi/mJDrammbTuHe1q0R5hOXv/mBaiNA2TCNT/LTHusX0V+CJnj9XT8ki5ln2UZyyddDgHfCzyrOH7MQ==", - "dev": true, - "peer": true - }, - "window-size": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/window-size/-/window-size-0.2.0.tgz", - "integrity": "sha512-UD7d8HFA2+PZsbKyaOCEy8gMh1oDtHgJh1LfgjQ4zVXmYjAT/kvz3PueITKuqDiIXQe7yzpPnxX3lNc+AhQMyw==", - "dev": true, - "peer": true - }, - "wordwrapjs": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", - "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", - "dev": true, - "requires": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" - }, - "dependencies": { - "typical": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", - "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", - "dev": true - } - } - }, - "workerpool": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true - }, - "wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "requires": { - "color-name": "~1.1.4" - } - }, - "color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - } - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, - "ws": { - "version": "7.5.9", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", - "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", - "dev": true, - "requires": {} - }, - "xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "dev": true - }, - "y18n": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true - }, - "yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - }, - "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", - "dev": true, - "requires": { - "cliui": "^7.0.2", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.0", - "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" - } - }, - "yargs-parser": { - "version": "20.2.4", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", - "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", - "dev": true - }, - "yargs-unparser": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-2.0.0.tgz", - "integrity": "sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==", - "dev": true, - "requires": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" - } - }, - "yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true - }, - "yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", - "dev": true - }, - "zksync-web3": { - "version": "0.14.3", - "resolved": "https://registry.npmjs.org/zksync-web3/-/zksync-web3-0.14.3.tgz", - "integrity": "sha512-hT72th4AnqyLW1d5Jlv8N2B/qhEnl2NePK2A3org7tAa24niem/UAaHMkEvmWI3SF9waYUPtqAtjpf+yvQ9zvQ==", - "dev": true, - "requires": {} - } - } -} diff --git a/package.json b/package.json index 9b046639..3ddadbe4 100644 --- a/package.json +++ b/package.json @@ -1,31 +1,32 @@ { - "name": "@zerodevapp/contracts", - "description": "ZeroDev Account Abstraction (EIP 4337) contracts", - "main": "./dist/index.js", - "version": "4.0.0-beta.10", + "license": "MIT", "scripts": { - "prepack": "./script/prepack-contracts-package.sh", - "postpack": "./script/postpack-contracts-package.sh" + "compile": "hardhat compile" }, "devDependencies": { - "@nomicfoundation/hardhat-foundry": "^1.0.0", - "@nomiclabs/hardhat-ethers": "^2.2.3", - "@typechain/ethers-v5": "^10.2.0", - "@typechain/hardhat": "^6.1.5", - "@types/chai": "^4.3.4", - "@types/mocha": "^10.0.1", - "@types/node": "^18.15.11", - "chai": "^4.3.7", - "ethereum-waffle": "^4.0.10", - "hardhat": "^2.13.0", - "hardhat-deploy": "^0.11.26", - "keccak256": "^1.0.6", - "merkletreejs": "^0.3.9", - "ts-node": "^10.9.1", - "typechain": "^8.1.1" - }, - "dependencies": { - "@account-abstraction/contracts": "^0.6.0", - "dotenv": "^16.0.3" + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-foundry": "^1.1.1", + "@nomicfoundation/hardhat-ignition": "^0.15.0", + "@nomicfoundation/hardhat-ignition-ethers": "^0.15.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-toolbox": "^5.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", + "@nomicfoundation/ignition-core": "^0.15.0", + "@typechain/ethers-v6": "^0.5.0", + "@typechain/hardhat": "^9.0.0", + "@types/chai": "4", + "@types/mocha": "^10.0.6", + "@types/node": "^20.12.5", + "chai": "4", + "ethers": "^6.4.0", + "hardhat": "^2.22.2", + "hardhat-contract-sizer": "^2.10.0", + "hardhat-gas-reporter": "^1.0.8", + "hardhat-spdx-license-identifier": "^2.2.0", + "solidity-coverage": "^0.8.1", + "ts-node": "^10.9.2", + "typechain": "^8.3.0", + "typescript": "^5.4.4" } } diff --git a/remappings.txt b/remappings.txt index 91f7eb8d..03e79deb 100644 --- a/remappings.txt +++ b/remappings.txt @@ -1,6 +1,3 @@ -ds-test/=lib/forge-std/lib/ds-test/src/ +ExcessivelySafeCall/=lib/ExcessivelySafeCall/src/ forge-std/=lib/forge-std/src/ solady/=lib/solady/src/ -I4337/=lib/I4337/src/ -FreshCryptoLib/=lib/FreshCryptoLib/solidity/src/ -p256-verifier/=lib/p256-verifier/src/ diff --git a/script/Deploy.s.sol b/script/Deploy.s.sol new file mode 100644 index 00000000..dacde9b9 --- /dev/null +++ b/script/Deploy.s.sol @@ -0,0 +1,65 @@ +pragma solidity ^0.8.0; + +import "forge-std/Script.sol"; +import "src/Kernel.sol"; +import "forge-std/console.sol"; + +import "src/factory/FactoryStaker.sol"; +import "src/factory/KernelFactory.sol"; + +bytes constant KERNEL_CODE = + hex"0000000000000000000000000000000000000000000000000000000000000000610140346200020957601f6200520c38819003918201601f191683019291906001600160401b038411838510176200020e5781602092849260409687528339810103126200020957516001600160a01b03811681036200020957306080524660a05260a08251620000708162000224565b60068152600a602082016512d95c9b995b60d21b815260208651620000958162000224565b838152019269302e332e302d6265746160b01b845251902091208160c0528060e0528451917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f835260208301528482015246606082015230608082015220916101009283526101209182528051602081019063deadbeef60e01b825260048152620001208162000224565b5190516001600160581b031991828216919060158110620001f3575b505090507f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f9060581c60018060a81b03198254161790555190614fcb928362000241843960805183614093015260a051836140b6015260c05183614128015260e0518361414e0152518261407201525181818161047a0152818161079e0152818161095401528181610cec01528181611053015281816111c2015281816112220152818161174a015281816118b901526121180152f35b8391925060150360031b1b16168038806200013c565b600080fd5b634e487b7160e01b600052604160045260246000fd5b604081019081106001600160401b038211176200020e5760405256fe6080604052600436101561001d575b366128595761001b612828565b005b60003560e01c8063112d3a7d146101bd57806312af322c146101b85780631626ba7e146101b357806319822f7c146101ae5780631f1b92e3146101a95780633659cfe6146101a457806357b3a5f41461019f5780636e6fa0c61461019a578063721e67f41461019557806384b0196e146101905780638dd7712f1461018b57806390ef8862146101865780639198bdf5146101815780639517e29f1461017c5780639cfd7cff14610177578063a65d69d414610172578063a71763a81461016d578063adb610a314610168578063b8afe17d14610163578063c3e589781461015e578063d03c791414610159578063d691c96414610154578063e6f3d50a1461014f578063e9ae5c531461014a578063f1f7f0f9146101455763f2dc691d0361000e576119ec565b6119b4565b611888565b6116cf565b6115c0565b61150f565b611433565b611351565b61131d565b6111f1565b6111ac565b61114e565b611022565b610f1b565b610dca565b610cb6565b610c14565b610b68565b610b0b565b610a5d565b610914565b61075c565b61043c565b6103dc565b610289565b610251565b6001600160a01b038116036101d357565b600080fd5b35906101e3826101c2565b565b9181601f840112156101d3578235916001600160401b0383116101d357602083818601950101116101d357565b60606003198201126101d3576004359160243561022e816101c2565b91604435906001600160401b0382116101d35761024d916004016101e5565b9091565b346101d357602061026d61026436610212565b92919091611bec565b6040519015158152f35b6001600160581b03198116036101d357565b346101d35760803660031901126101d3576004356102a681610277565b6024356102b2816101c2565b6001600160401b03906044358281116101d3576102d39036906004016101e5565b90926064359081116101d3576102ed9036906004016101e5565b9390926001600160581b031961032d81610326610319600080516020614fab8339815191525460581b90565b6001600160581b03191690565b1615611cb6565b8616156103ca576001600160f81b03198616600160f81b81141590816103bb575b506103a9578561036061001b976129b9565b61038161036b610eea565b60018152925b6001600160a01b03166020840152565b600080516020614fab833981519152805463ffffffff60a81b1916600160a81b179055612a14565b6040516361c4e91b60e11b8152600490fd5b600160f91b141590503861034e565b604051631a0a9b9f60e21b8152600490fd5b346101d35760403660031901126101d3576024356001600160401b0381116101d35761041a61041160209236906004016101e5565b90600435611dd1565b6040516001600160e01b03199091168152f35b90816101209103126101d35790565b60603660031901126101d357600480356001600160401b0381116101d357610467903690830161042d565b60243590604435906001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082163303610727578084926104b16020830135612d80565b6001600160f81b0319909116159590939091866106fd575b90846104d59392612f65565b956104e76104e284611b7a565b611efe565b94159485806106bb575b6106aa57602001516001600160a01b031691821690811561069957600192610526610545926000526000602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b036105f8578261059a575b5050610589576105739250805b610577575b506040519081529081906020820190565b0390f35b3490349034903490335af15038610562565b604051631a0a9b9f60e21b81528390fd5b6105f192506105ed916105cf6105c96105c36105b86105e695611bb3565b936060810190611f2a565b90611a1b565b90611b4e565b63ffffffff60e01b16600052602052604060002090565b5460ff1690565b1590565b3880610550565b82919291610666575b50610655576105c3816060610617930190611f2a565b638dd7712f60e01b916001600160e01b03199161063391611b4e565b16036106445761057392508061055d565b60405163dbbb044b60e01b81528390fd5b604051631a0a9b9f60e21b81528490fd5b61069391506105e661067a6105ed92611bb3565b6105cf6105c961068d6060880188611f2a565b90611a0a565b38610601565b604051631a0a9b9f60e21b81528990fd5b604051633ab3447f60e11b81528990fd5b50805163ffffffff1663ffffffff6106f56106ec600080516020614fab8339815191525463ffffffff9060c81c1690565b63ffffffff1690565b9116106104f1565b9350906104d59161071d600080516020614fab8339815191525460581b90565b94909192506104c9565b6040516348f5c3ed60e01b81528590fd5b6004359063ffffffff821682036101d357565b359063ffffffff821682036101d357565b60203660031901126101d357610770610738565b61079261078c600080516020614fab8339815191525460581b90565b60581c90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061090a575b156108ff5760405163ecd0596160e01b8152600480820152911690602081602481855afa908115610890576000916108d0575b50156108be5760405163d68f602560e01b8152916000838061082136343360048501611fed565b038183865af192831561089057600093610895575b506108409061310c565b803b156101d357604051635565eb9560e11b815291600091839182908490829061086d9060048301612029565b03925af180156108905761087d57005b8061088a61001b92610e44565b80610bc1565b611dc5565b6108409193506108b7903d806000833e6108af8183610ec9565b810190611f8f565b9290610836565b6040516348f5c3ed60e01b8152600490fd5b6108f2915060203d6020116108f8575b6108ea8183610ec9565b810190611f5c565b386107fa565b503d6108e0565b505061001b9061310c565b50303314156107c7565b60203660031901126101d35760043561092c816101c2565b61094861078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610a41575b15610a365760405163ecd0596160e01b8152600480820152911690602081602481855afa90811561089057600091610a17575b50156108be5760405163d68f602560e01b815291600083806109d736343360048501611fed565b038183865af1928315610890576000936109f6575b5061084090612054565b610840919350610a10903d806000833e6108af8183610ec9565b92906109ec565b610a30915060203d6020116108f8576108ea8183610ec9565b386109b0565b505061001b90612054565b503033141561097d565b6001600160e01b03198116036101d357565b346101d35760203660031901126101d357610573610a9f600435610a8081610a4b565b600060408051610a8f81610e5c565b8281528260208201520152611cf8565b60405190610aac82610e5c565b80546001600160a01b0390811680845260019092015480821660208086019182526001600160f81b031960589390931b831660409687019081528651958652915190931692840192909252905116918101919091529081906060820190565b346101d35760403660031901126101d357602060ff610b5c600435610b2f81610277565b610b4460243591610b3f83610a4b565b611bb3565b9063ffffffff60e01b16600052602052604060002090565b54166040519015158152f35b346101d35760203660031901126101d3576020610b9e600435610b8a816101c2565b6000604051610b9881610e77565b52612992565b60405190610bab82610e77565b546001600160a01b031690819052604051908152f35b60009103126101d357565b60005b838110610bdf5750506000910152565b8181015183820152602001610bcf565b90602091610c0881518092818552858086019101610bcc565b601f01601f1916010190565b346101d35760003660031901126101d357610c63610c306131ec565b90604051928392600f60f81b8452610c5560209360e0602087015260e0860190610bef565b908482036040860152610bef565b90466060840152306080840152600060a084015282820360c0840152602060605192838152019160809160005b828110610c9f57505050500390f35b835185528695509381019392810192600101610c90565b60403660031901126101d3576004356001600160401b0381116101d357610ce190369060040161042d565b6001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821633036108be576060906001610d3e610d316024356000526000602052604060002090565b546001600160a01b031690565b93841614159081610d9a575b610d65610d5e826060610d6c940190611f2a565b8091611a29565b9030613338565b92909115610d7d5761001b9361335f565b5091505015610d8857005b60405163f21e646b60e01b8152600490fd5b9150610d6c610d65610d5e610dc0610db8610d5e6060880188611f2a565b9034896132b6565b9492505050610d4a565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460c81c16604051908152f35b9181601f840112156101d3578235916001600160401b0383116101d3576020808501948460051b0101116101d357565b634e487b7160e01b600052604160045260246000fd5b6001600160401b038111610e5757604052565b610e2e565b606081019081106001600160401b03821117610e5757604052565b602081019081106001600160401b03821117610e5757604052565b604081019081106001600160401b03821117610e5757604052565b61012081019081106001600160401b03821117610e5757604052565b90601f801991011681019081106001600160401b03821117610e5757604052565b604051906101e382610e92565b604051906101e382610ead565b6001600160401b038111610e575760051b60200190565b60803660031901126101d3576001600160401b036004358181116101d357610f47903690600401610dfe565b906024358381116101d357366023820112156101d3578060040135610f6b81610f04565b91604091610f7c6040519485610ec9565b8084526020906024602086019160061b840101923684116101d357602401905b838210610fe45750505050506044358481116101d357610fc0903690600401610dfe565b916064359586116101d357610fdc61001b963690600401610dfe565b9590946120e9565b84823603126101d3578285918251610ffb81610e92565b6110048561074b565b815282850135611013816101c2565b83820152815201910190610f9c565b61102b36610212565b61104761078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611144575b156111385760405163ecd0596160e01b815260048082015291169290602081602481875afa90811561089057600091611119575b50156108be5760405163d68f602560e01b815293600085806110d736343360048501611fed565b038183885af1948515610890576000956110f8575b506108409394956122a5565b610840949550611112903d806000833e6108af8183610ec9565b94936110ec565b611132915060203d6020116108f8576108ea8183610ec9565b386110b0565b50509161001b936122a5565b503033141561107c565b346101d35760003660031901126101d35761057360405161116e81610e92565b601b81527f6b65726e656c2e616476616e6365642e76302e332e302d6265746100000000006020820152604051918291602083526020830190610bef565b346101d35760003660031901126101d3576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6111fa36610212565b61121661078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580611313575b156113075760405163ecd0596160e01b815260048082015291169290602081602481875afa908115610890576000916112e8575b50156108be5760405163d68f602560e01b815293600085806112a636343360048501611fed565b038183885af1948515610890576000956112c7575b50610840939495612584565b6108409495506112e1903d806000833e6108af8183610ec9565b94936112bb565b611301915060203d6020116108f8576108ea8183610ec9565b3861127f565b50509161001b93612584565b503033141561124b565b346101d35760003660031901126101d357602063ffffffff600080516020614fab8339815191525460a81c16604051908152f35b346101d35760203660031901126101d357604061138160043561137381610277565b61137b612720565b50611b7a565b602082519161138f83610e92565b5463ffffffff81169283815260018060a01b03928391019160201c168152835192835251166020820152f35b602080825282516001600160f01b03191681830152808301516001600160a01b03166040808401919091529092015160608083015280516080830181905260a090920192908101919060005b828110611415575050505090565b83516001600160501b03191685529381019392810192600101611407565b346101d3576020806003193601126101d35760043561145181610a4b565b611476604091606083805161146581610e5c565b600081526000878201520152611d30565b9080519161148383610e5c565b805460f081901b6001600160f01b031916845260101c6001600160a01b031684840152815160019182018054808352600091825286822083880197939490939092905b8282106114ed576105738888886114df818e0382610ec9565b8183015251918291826113bb565b845460501b6001600160501b03191689529788019793830193908301906114c6565b346101d35760203660031901126101d357602061026d600435612739565b9060406003198301126101d35760043591602435906001600160401b0382116101d35761024d916004016101e5565b6020808201906020835283518092526040830192602060408460051b8301019501936000915b8483106115925750505050505090565b90919293949584806115b0600193603f198682030187528a51610bef565b9801930193019194939290611582565b6115c93661152d565b916001600160a01b036115db33612992565b54169283156116bd57606090600185141593846116a6575b6115fd92936139ed565b91611611575b60405180610573848261155c565b60405161163381611625856020830161155c565b03601f198101835282610ec9565b833b156101d3576116839361166a6000809460405197889586948593635565eb9560e11b8552606060048601526064850190610bef565b6001602485015283810360031901604485015290610bef565b03925af1918215610890576105739215611603576116a090610e44565b38611603565b6115fd92506116b6363488613232565b92506115f3565b60405163710c949760e01b8152600490fd5b60603660031901126101d35760048035906116e982610277565b6001600160401b03916024358381116101d35761170990369084016101e5565b936044359081116101d35761172190369085016101e5565b9061173e61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061187e575b1561186e57169560405163ecd0596160e01b81526020818061179c8a8201906004602083019252565b03818b5afa9081156108905760009161184f575b501561183e5760405163d68f602560e01b815293600085806117d63634338d8501611fed565b0381838c5af19485156108905760009561181f575b506117f694956127fb565b823b156101d35761086d9260009283604051809681958294635565eb9560e11b84528301612029565b6117f69550611838903d806000833e6108af8183610ec9565b946117eb565b6040516348f5c3ed60e01b81528690fd5b611868915060203d6020116108f8576108ea8183610ec9565b386117b0565b50509261001b95929194506127fb565b5030331415611773565b6118913661152d565b6118ad61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f000000000000000000000000000000000000000000000000000000000000000083161415806119aa575b1561199e5760405163ecd0596160e01b815260048082015291169190602081602481865afa9081156108905760009161197f575b50156108be5760405163d68f602560e01b8152926000848061193d36343360048501611fed565b038183875af19384156108905760009461195e575b50610840929394612810565b610840939450611978903d806000833e6108af8183610ec9565b9392611952565b611998915060203d6020116108f8576108ea8183610ec9565b38611916565b50509061001b92612810565b50303314156118e2565b346101d35760003660031901126101d3576020600080516020614fab8339815191525460581b604051906001600160581b0319168152f35b346101d35760203660031901126101d357602061026d60043561281b565b906008116101d35760040190600490565b906004116101d35790600490565b90929192836004116101d35783116101d357600401916003190190565b906018116101d35760040190601490565b906014116101d35790601490565b906020116101d35790602090565b90929192836001116101d35783116101d357600101916000190190565b90929192836014116101d35783116101d357601401916013190190565b906016116101d35790601690565b906016116101d35760020190601490565b90929192836016116101d35783116101d357601601916015190190565b906002116101d35790600290565b906009116101d35760010190600890565b90929192836009116101d35783116101d357600901916008190190565b90602c116101d35760180190601490565b909392938483116101d35784116101d3578101920390565b6001600160e01b03199035818116939260048110611b6b57505050565b60040360031b82901b16169150565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f850602052604060002090565b6001600160581b0319166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f851602052604060002090565b90929060018103611c3b57506001600160a01b0392611c359250611c25915060581b600160581b600160f81b0316600160f81b17611b7a565b5460201c6001600160a01b031690565b16151590565b60028103611c6e57506001600160a01b0392611c359250611c629150610d31908416612992565b6001600160a01b031690565b600303611cae57611c8f611c8a6105c9600193611c9d95611a1b565b611cf8565b01546001600160a01b031690565b6001600160a01b0390811691161490565b505050600090565b15611cbd57565b60405162461bcd60e51b8152602060048201526013602482015272185b1c9958591e481a5b9a5d1a585b1a5e9959606a1b6044820152606490fd5b63ffffffff60e01b166000527f7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b602052604060002090565b63ffffffff60e01b166000527f7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f852602052604060002090565b908160209103126101d35751611d7d81610a4b565b90565b908060209392818452848401376000828201840152601f01601f1916010190565b611d7d949260609260018060a01b0316825260208201528160408201520191611d80565b6040513d6000823e3d90fd5b91611ddb91612c05565b91906001600160f81b031980831615611edd575b6001600160a01b039081611e08611c62611c2587611b7a565b16156103ca578316600160f81b03611e8d57906020939291611e2c611e4a96612d37565b604051637aa8f17760e11b8152968795869485933360048601611da1565b039260581c165afa90811561089057600091611e64575090565b611d7d915060203d602011611e86575b611e7e8183610ec9565b810190611d68565b503d611e74565b509060081b92600160f11b611ebb611eae611ea787611d30565b5460f01b90565b6001600160f01b03191690565b16611ecb57611d7d933390612c86565b604051635b71057960e01b8152600490fd5b9150611ef8600080516020614fab8339815191525460581b90565b91611def565b90604051611f0b81610e92565b915463ffffffff81168352602090811c6001600160a01b031690830152565b903590601e19813603018212156101d357018035906001600160401b0382116101d3576020019181360383136101d357565b908160209103126101d3575180151581036101d35790565b6001600160401b038111610e5757601f01601f191660200190565b6020818303126101d3578051906001600160401b0382116101d3570181601f820112156101d3578051611fc181611f74565b92611fcf6040519485610ec9565b818452602082840101116101d357611d7d9160208085019101610bcc565b916080939160018060a01b03168352602083015260606040830152806060830152806000848401376000828201840152601f01601f1916010190565b61203d602092606083526060830190610bef565b906001838201526040818303910152600081520190565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8190556001600160a01b03167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2565b906040516120b581610e5c565b82546001600160a01b039081168252600190930154928316602082015260589290921b6001600160f81b0319166040830152565b9592949193909461210c61078c600080516020614fab8339815191525460581b90565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580612259575b156122495760405163ecd0596160e01b8152600480820152911695906020816024818a5afa9081156108905760009161222a575b50156108be5760405163d68f602560e01b8152966000888061219c36343360048501611fed565b0381838b5af197881561089057600098612209575b506121bd969798613428565b803b156101d357604051635565eb9560e11b81529160009183918290849082906121ea9060048301612029565b03925af18015610890576121fc575b50565b8061088a6101e392610e44565b6121bd979850612223903d806000833e6108af8183610ec9565b97966121b1565b612243915060203d6020116108f8576108ea8183610ec9565b38612175565b505091939092946101e396613428565b5030331415612141565b916020611d7d938181520191611d80565b6bffffffffffffffffffffffff19903581811693926014811061229657505050565b60140360031b82901b16169150565b9290916001840361234b576101e3935061230e6122f7611c626122f16122eb6122e4600080516020614fab8339815191525463ffffffff9060a81c1690565b9686611a57565b90612274565b60601c90565b610371612302610eea565b63ffffffff9095168552565b603480820135820160148181013595918301948482013590940190810135939201919060581b600160581b600160f81b0316600160f81b17612a14565b919092600281146000146123ad57509161239e6101e393612383611c626122f16122eb60148801358801966034890135890198611a57565b928391601482013591603401906001600160a01b03166136af565b603460148301359201906135e2565b9091906003810361242d5750612428611c626124186101e3958461241360186122f197013582016122f160388401358401996123ec6105c98787611a1b565b9061240d611c626123fd8989611a46565b6018880135976038019691612274565b91613496565b611a46565b6018860135956038019491612274565b6135e2565b9091906004810361246e57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b600581036124ac57506001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b6006036124e8576001600160a01b031691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b604051631092ef5760e11b8152600490fd5b6040519061250782610e77565b60008252565b35906020811061251b575090565b6000199060200360031b1b1690565b91906040519061253982610e77565b819360008352116101d35760206000910152565b92919261255982611f74565b916125676040519384610ec9565b8294818452818301116101d3578281602093846000960137010152565b929190600184036125ae576121f9935060581b600160581b600160f81b0316600160f81b176138a1565b600284036125c9576121f993506001600160a01b0316613857565b909190600384036125f857506121f9925080806125ec6105c96125f29486611a1b565b93611a29565b916137fd565b91926004810361267e57506121f99261264b91612624600080516020614fab8339815191525460581b90565b612630611c2582611b7a565b6001600160a01b03868116911614612651575b50369161254d565b9061374e565b61265d61267891611b7a565b8054640100000000600160c01b031916640100000000179055565b38612643565b600581036127015750600080516020614fab8339815191525460581b5b6126ae6126a88386611a65565b9061250d565b906001600160f81b03198116600160f91b146126d6575b50506121f99261264b91369161254d565b60081b6001600160e01b031916146126ef5738806126c5565b6040516313002bdd60e31b8152600490fd5b6006036124e857600080516020614fab8339815191525460581b61269b565b6040519061272d82610e92565b60006020838281520152565b61274d818060081b918160301b9160501b90565b929091600160f81b916001600160f81b0319919082168381141590816127f1575b816127e6575b816127d7575b506127cd57169081141590816127c3575b506127bc576001600160e01b0319166127b6576001600160501b0319166127b157600190565b600090565b50600090565b5050600090565b905015153861278b565b5050505050600090565b607f60f91b141590503861277a565b838114159150612774565b801515915061276e565b9161280b916101e39594936138a1565b613b57565b906121f992916139ed565b600711156127b157600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b6128766128716000356001600160e01b031916611cf8565b6120a8565b80516001600160a01b03908116918260008161289e57604051631cd4b64760e21b8152600490fd5b5060016060940361297c575b5060408101516001600160f81b03199081168061293257505060208101516001936128fb939290916128e4906001600160a01b0316613bb4565b9290929586939586935b516001600160a01b031690565b94851603612920575b505050501560001461291857602081519101fd5b602081519101f35b6129299361335f565b38828282612904565b9192910361296a5760208201516001936128fb93909161295c906001600160a01b03163690613311565b9290929586939586936128ee565b604051632d6a6bb760e01b8152600490fd5b61298b91935036903490613232565b91386128aa565b6001600160a01b03166000908152600080516020614f8b8339815191526020526040902090565b60207f6789ec0c85d6458d897a36a70129b101f8b4d84c6e218046c3107373dbcbae8891600080516020614fab8339815191528160581c6001600160581b0360a81b825416179055604051906001600160581b0319168152a1565b9193909294612a2f612a2584611b7a565b5463ffffffff1690565b93600080516020614fab83398151915294612a52865463ffffffff9060a81c1690565b63ffffffff809281808416911614612bc7575b50506020820180516001600160a01b0397919291612a9291891615612bbe575b5460a81c63ffffffff1690565b81612aa46106ec865163ffffffff1690565b91161490811591612b94575b50612b82576128ee612aff92612ac587611b7a565b815181546020938401516001600160c01b031990911663ffffffff9290921691909117921b640100000000600160c01b0316919091179055565b91600185841603612b71575b5050506001600160f81b03198116600160f81b8103612b55575060581c1691823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b909350600160f91b141590506103a9576101e39160081b613cf3565b612b7a926135e2565b388080612b0b565b604051633ab3447f60e11b8152600490fd5b9050612ba2612a2587611b7a565b90612bb46106ec855163ffffffff1690565b9116101538612ab0565b60018452612a85565b600080516020614fab833981519152805463ffffffff60a81b19166001939093019190911660a81b63ffffffff60a81b169190911790553881612a65565b9182358060f81c80600014612c4b5780600114612c3e57600214612c2857600080fd5b6001600160d81b03191692600501916004190190565b5092601501916014190190565b5050600160009301916000190190565b9092608092611d7d9694835260018060a01b0316602083015260408201528160608201520191611d80565b909192612ca594612c9991858585613f53565b94929391969096614047565b509065ffffffffffff8091164210918215612d2b575b5050612d1857612cf9612ccf602096612d37565b60405163392dffaf60e01b8152978896879586959193916001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091611e64575090565b506001600160e01b031995945050505050565b16421190503880612cbb565b611d7d9060405160208101917f1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c838352604082015260408152612d7881610e5c565b519020614070565b90818060081b9160ff839260f01c16600214612d9857565b6001600160d81b031983169150565b9080601f830112156101d357816020611d7d9335910161254d565b9190610120838203126101d357612dd7610ef7565b92612de1816101d8565b8452602081013560208501526040810135916001600160401b03928381116101d35781612e0f918401612da7565b604086015260608201358381116101d35781612e2c918401612da7565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e08201358381116101d35781612e67918401612da7565b60e086015261010092838301359081116101d357612e859201612da7565b90830152565b908160209103126101d3575190565b80516001600160a01b03168252611d7d9190612f18612ee8612ed661012060208501516020870152604085015190806040880152860190610bef565b60608401518582036060870152610bef565b6080830151608085015260a083015160a085015260c083015160c085015260e083015184820360e0860152610bef565b916101008092015191818403910152610bef565b939291612f49906040928652606060208701526060860190612e9a565b930152565b929190612f49602091604086526040860190612e9a565b929092600092612f753682612dc2565b916101009182810191612f888383611f2a565b90949093600160f81b936001600160f81b031993841685146130d1575b505050871603613032575050604051639700320360e01b815293602092859283916000918391612fd89160048401612f4e565b039260581c6001600160a01b03165af190811561089057611d7d92600092613001575b5061456e565b61302491925060203d60201161302b575b61301c8183610ec9565b810190612e8b565b9038612ffb565b503d613012565b909460081b93909291600160f01b61304f611eae611ea788611d30565b166130bf57600061307061306a60209661309a99858a61436e565b9461456e565b604051630ccab7a160e01b8152979096889586948593926001600160e01b03191660048501612f2c565b03926001600160a01b03165af190811561089057611d7d92600092613001575061456e565b6040516314b9743f60e01b8152600490fd5b909195506130ed9398506130e6929450611f2a565b9088614184565b969192909361310085899599369161254d565b90860152388080612fa5565b600080516020614fab83398151915280549163ffffffff92600a848260a81c1601908482116131d65782851691851682116131c45760c81c84161015612b8257600080516020614fab833981519152805463ffffffff60c81b191660c89290921b63ffffffff60c81b1691909117905554818160c81c1691829160a81c16106131925750565b600080516020614fab833981519152805463ffffffff60a81b191660a89290921b63ffffffff60a81b16919091179055565b60405163e60fd64760e01b8152600490fd5b634e487b7160e01b600052601160045260246000fd5b6040516131f881610e92565b600681526512d95c9b995b60d21b60208201529060405161321881610e92565b600a815269302e332e302d6265746160b01b602082015290565b60405163d68f602560e01b815233600482015260248101929092526060604483015260648201839052600092839183918290849060849083908084838501378181018301849052601f01601f191681010301926001600160a01b03165af19182156108905780926132a257505090565b611d7d92503d8091833e6108af8183610ec9565b600092836132dd95936040519687958694859363d68f602560e01b85523360048601611da1565b03926001600160a01b03165af1908115610890576000916132fc575090565b611d7d91503d806000833e6108af8183610ec9565b60009060405192808385378338925af4913d82523d6000602084013e60203d830101604052565b60009192806040519485378338925af4913d82523d6000602084013e60203d830101604052565b919290916001600160a01b0316803b156101d3576133a2600080946133bb60405197889687958694635565eb9560e11b8652606060048701526064860190610bef565b9115156024850152838203600319016044850152610bef565b03925af18015610890576133cc5750565b6101e390610e44565b634e487b7160e01b600052603260045260246000fd5b8051156133f85760200190565b6133d5565b80518210156133f85760209160051b010190565b908210156133f85761024d9160051b810190611f2a565b96959192939694909460005b86811061344657505050505050509050565b806134878a60019360051b85013561345d81610277565b6134738461346b818c6133fd565b51938c613411565b9061347f868b8b613411565b949093612a14565b01613434565b90156133f85790565b6001600160a01b039391929190848316156135d9575b6134b590611cf8565b946134e16134d46134c6838561348d565b356001600160f81b03191690565b6001600160f81b03191690565b946001600160f81b0319808716806135ba575050908061350392861693611a73565b823b156101d35761352e92600092836040518096819582946306d61fe760e41b845260048401612263565b03925af19485156108905761356a61358a936001936101e3986135a7575b505b82546001600160a01b0319166001600160a01b03909116178255565b0180546001600160a01b0319166001600160a01b03909316929092178255565b805460ff60a01b191660589290921c60ff60a01b16919091179055565b8061088a6135b492610e44565b3861354c565b92509250509491940361296a57600161358a9161356a6101e39661354e565b600192506134ac565b6001600160a01b031691821580156136a5575b6136a05760405163d60b347f60e01b8152306004820152602081602481875afa90811561089057600091613681575b501561364c576001600160f81b0319806136416134c6848661348d565b161461364c57505050565b8061365692611a73565b823b156101d3576121ea92600092836040518096819582946306d61fe760e41b845260048401612263565b61369a915060203d6020116108f8576108ea8183610ec9565b38613624565b505050565b50600183146135f5565b919392916001600160a01b039081841615613734575b166000818152600080516020614f8b8339815191526020526040812080546001600160a01b0319166001600160a01b0390951694909417909355803b15613730576133bb9394836040518096819582946306d61fe760e41b8452602060048501526024840191611d80565b8280fd5b600193506136c5565b906020611d7d928181520190610bef565b60407f2b82f87bf66300af618a9621d3f221edfab735f5bacb4e004cce1b62375396c3919392935a8251956137ae876137a06020820193638a91b0e360e01b8552602060248401526044830190610bef565b03601f198101895288610ec9565b6000918291828587519a6137c18c610e77565b828c525193f1943d90816137f4575b6020818360009352013e81516001600160a01b0390911681528415156020820152a1565b600091506137d0565b61380d6138409194939294611cf8565b80546001600160a01b031981168255600190910180546001600160a01b0392831696919492169161264b9136919061254d565b5080546001600160a81b03191660ff60a01b179055565b6001600160a01b039081166000818152600080516020614f8b8339815191526020526040902080546001600160a01b0319811690915590911693926121f99261264b91369161254d565b909291926138d36138c1600080516020614fab8339815191525460581b90565b6001600160581b031980851691161490565b6126ef576138e3611c2583611b7a565b936139046138f084611b7a565b8054640100000000600160c01b0319169055565b6001600160f81b03198316600160f81b810361393d57506121f9929161392b91369161254d565b9060581c6001600160a01b031661374e565b600160f91b141590506103a9576101e39160081b614609565b60405161396281610e92565b600181528060005b6020808210156139855790606060209282850101520161396a565b50505090565b9061399582610f04565b6139a26040519182610ec9565b82815280926139b3601f1991610f04565b019060005b8281106139c457505050565b8060606020809385010152016139b8565b906040611d7d92600081528160208201520190610bef565b600881901b926001600160f81b031992600160f81b929091906060908516808601613a7f57505050613a26908035019060208201913590565b929093168015600014613a3e575050611d7d91614887565b03613a4c57611d7d916147ca565b60405162461bcd60e51b815260206004820152600b60248201526a155b9cdd5c1c1bdc9d195960aa1b6044820152606490fd5b95969591929180613b2257505090613a969161471e565b93909294613aa2613956565b971680613ac7575050613ab49361476f565b613abd836133eb565b526121f9826133eb565b03613a4c57613ad593614746565b613ade846133eb565b526101e3577fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb7613b1d613b10846133eb565b51604051918291826139d5565b0390a1565b909650919390925003613a4c57613b4d8280613b476122f16122eb613b539787611a57565b93611a90565b91613338565b5050565b6001600160a01b03169081158015613baa575b6136a05782156133f8576001600160f81b03198135811614613b8b57505050565b826001116101d3576121f99261264b913691600019019060010161254d565b5060018214613b6a565b600080604092835136810185523683823784516014810186523360601b90528260143601925af1918151913d83523d6000602085013e60203d8401019052565b8054906000906000815582613c0857505050565b6000526020600020918201915b828110613c2157505050565b818155600101613c15565b6001600160501b03199035818116939260168110613c4957505050565b60160360031b82901b16169150565b80548210156133f85760005260206000200190600090565b805468010000000000000000811015610e5757613c9291600182018155613c58565b819291549060031b9160501c821b9160018060b01b03901b1916179055565b9092809260209483528483013701016000815290565b6001600160f01b03199035818116939260028110613ce457505050565b60020360031b82901b16169150565b90803501906020808301923560fe81118015613f4b575b613f3957600180613d1a85611d30565b0154613f20575b60001982019260005b848110613e435750613e089594613e16949093613dec9350613de59250613d85613dd6613dbd611eae613db7613db187878e613dac8e613d7d611c626122f16122eb613d77898989613411565b90611abb565b9a8b91611d30565b805462010000600160b01b03191660109290921b62010000600160b01b0316919091179055565b613411565b90611ae9565b90613cc7565b613dc688611d30565b9060f01c61ffff19825416179055565b6001600160a01b031696613411565b8091611acc565b6040519586939092906001600160e01b03191660208501613cb1565b03601f198101845283610ec9565b803b156101d3576040516306d61fe760e41b81529160009183918290849082906121ea906004830161373d565b613e9a611c62611c626122f16122eb613d77868a8e613dac8f613e668e91611d30565b01613e94613e87613e81613e7b888888613411565b90611aad565b90613c2c565b6001600160501b03191690565b90613c70565b90613ea9613de582878b613411565b90613eca604091613e0883519485928d63ffffffff60e01b168a8501613cb1565b833b156101d3576000938492613ef492519586809481936306d61fe760e41b83526004830161373d565b03925af1918215610890578492613f0d575b5001613d2a565b8061088a613f1a92610e44565b38613f06565b613f346001613f2e86611d30565b01613bf4565b613d21565b60405163b62d956d60e01b8152600490fd5b508015613d0a565b8484613fd692613fc1979694989560405191613f6e83610ead565b613fd060009b8c92838652836020870152604086019d8e52606086019c8d918583528560808901528560a0890152606060c089015260e088019286845261010089019687529063ffffffff60e01b169052565b6001600160a01b039091169052565b52614920565b60ff80613fef613fe96134c6878661348d565b60f81c90565b16036140355761401e614009846140199561402e94611a73565b9490955163ffffffff60e01b1690565b611d30565b5460101c6001600160a01b031690565b9351929190565b60405163b32eeb6960e01b8152600490fd5b8065ffffffffffff91828160a01c16928315600114614068575b5060d01c92565b925038614061565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f0000000000000000000000000000000000000000000000000000000000000000461416156140fd575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f00000000000000000000000000000000000000000000000000000000000000006040820152466060820152306080820152206140de565b91929092614190612720565b9061419b9085611a57565b6141a491612274565b60601c60208201819052600080516020614fab8339815191525460a81c63ffffffff1680835260349560148082013582018089019791959294919360548601358601808b019490880135939092878c01358801808a013593908d0192918a0135918891908d8436906142159261254d565b80519060200120913661422990888861254d565b805190602001203661423c908b8d61254d565b8051602091820120604080517fb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c5059381019384526001600160581b0319989098169088015263ffffffff9390931660608701526001600160a01b0393909316608086015260a085019390935260c084019290925260e080840192909252908252906142c861010082610ec9565b5190206142d490614070565b607489013589018d8b82013591016142eb92614b72565b9a6142f69488612a14565b6143008183614d0f565b61430991611a1b565b61431291611b4e565b61431b91614ec9565b6094810135019293830192013590565b6001600160c01b0319903581811693926008811061434857505050565b60080360031b82901b16169150565b604090611d7d939281528160208201520190612e9a565b60009493916001868161438085611d30565b016000835b6143cd575b5050505060ff806143a1613fe96134c6878961348d565b1603614035576101006143c56143be8561401e96611d7d98611a73565b369161254d565b910152611d30565b8197969754811015614566576143fe6143f66143e98385613c58565b90549060031b1c60501b90565b908160501c90565b98909761441a614414613fe96134c6858561348d565b60ff1690565b808403614535575090818161445361444761444161443b8461447098611af7565b9061432b565b60c01c90565b6001600160401b031690565b600901916144656143be848484611b08565b6101008b0152611b36565b989098975b600160f01b161561448a575b50830183614385565b99866144c7929b60018060a01b036040918983518092633894f6e760e11b8252818b868260209c8d9760049c63ffffffff60e01b168d8401614357565b0393165af1958615610890578896614516575b505084166144fc5750506144f285949392859261456e565b9a91929350614481565b51631f24c1fb60e11b81529081018c815281906020010390fd5b61452d929650803d1061302b5761301c8183610ec9565b9338806144da565b909991989083111561455357604051630760bdcf60e11b8152600490fd5b61455b6124fa565b610100880152614475565b96959661438a565b6001600160a01b03818318811615606083811b848601821b9081149186901b14171760011461459f57505050600190565b65ffffffffffff60a01b80831693906001600160d01b031984811691908316908615614601575b83811680156145fa575b8781109088180280881897146145f2575b508181119082180218921716171790565b9550386145e1565b50806145d0565b9550856145c6565b9190803501916020906020840193359061462281611d30565b9260019060018501906001825401850361470c57906000835b61469e575b5050505061468d9161468882613dec6101e397986146656001613f2e613e0898611d30565b875461467c9060101c6001600160a01b0316611c62565b94600019810191613411565b61374e565b5080546001600160b01b0319169055565b8154811015614707579083826146fd613e088c6146ef8a6146d4868e6146cc6143f66143e98c9f9e8e613c58565b969050613411565b6040519586939092906001600160e01b0319168c8501613cb1565b6001600160a01b031661374e565b500190919261463b565b614640565b60405163013dcc8d60e31b8152600490fd5b90806014116101d357813560601c92816034116101d357601483013592603401916033190190565b906000928491604051958692833738935af1913d82523d6000602084013e60203d830101604052565b9092600092819594604051968792833738935af11561479e573d82523d6000602084013e60203d830101604052565b503d6000823e3d90fd5b91908110156133f85760051b81013590605e19813603018212156101d3570190565b9190916147d68361398b565b9260005b8181106147e657505050565b806147f460019284866147a8565b80356147ff816101c2565b6148206020809360409361481585830183611f2a565b939092013590614746565b61482a858b6133fd565b5215614839575b5050016147da565b7fe723f28f104e46b47fd3531f3608374ac226bcf3ddda334a23a266453e0efdb79161487d614868858b6133fd565b51838051948594888652850152830190610bef565b0390a13880614831565b9190916148938361398b565b9260005b8181106148a357505050565b806148d960206148b660019486886147a8565b80356148c1816101c2565b6148ce6040830183611f2a565b93909201359061476f565b6148e382886133fd565b526148ee81876133fd565b5001614897565b9092608092611d7d9594835260018060a01b0316602083015260408201528160608201520190610bef565b919060608301600193600161493f614019845163ffffffff60e01b1690565b01936000936000958054965b87811061495d57505050505050505050565b8061496f6143f66143e98c9486613c58565b6001600160a01b031660a0880190815260808801959091614998906001600160f01b0319168752565b6149b26149ab613fe96134c68a8561348d565b60ff168952565b6149c0614414895160ff1690565b808403614b3a57508681816149e561444761444161443b614a399c9d614a0c98611af7565b60208c018181528c60c0614a016143be60099586018789611b08565b910152510191611b36565b959095965b51600160f11b90614a2b906001600160f01b031916611eae565b166001600160f01b03191690565b15614a46575b500161494b565b51909150614a5c906001600160a01b0316611c62565b8651614a8090614a73906001600160e01b03191681565b6001600160e01b03191690565b60e08701519091906001600160a01b031691614ac56101008901519360c08a01516040948551808095819463184dfdbb60e11b835260209a8b9760049a8b86016148f5565b03915afa938415610890578b94614b1b575b50506001600160a01b038316614b005750860180518b9392614af89161456e565b905238614a3f565b9051631f24c1fb60e11b815290810183815281906020010390fd5b614b32929450803d1061302b5761301c8183610ec9565b913880614ad7565b839196945010600014614b5957604051630760bdcf60e11b8152600490fd5b614a398b93614b68368861252a565b60c08a0152614a11565b600080516020614fab8339815191525460009493929060581b916001600160f81b03198316600160f81b8103614c355750604051637aa8f17760e11b8152936020938593909284928392614bca923060048601611da1565b039160581c6001600160a01b03165afa90811561089057600091614c16575b505b6001600160e01b0319166374eca2c160e11b01614c0457565b6040516362467c7760e11b8152600490fd5b614c2f915060203d602011611e8657611e7e8183610ec9565b38614be9565b919550929190600160f91b036103a957602091614c589160081b95843088613f53565b60405163392dffaf60e01b81529297929586949385938493614c8b93909230906001600160e01b03191660048701612c5b565b03916001600160a01b03165afa90811561089057600091614cad575b50614beb565b614cc6915060203d602011611e8657611e7e8183610ec9565b38614ca7565b15614cd357565b60405162461bcd60e51b8152602060048201526014602482015273496e76616c69642073656c6563746f724461746160601b6044820152606490fd5b614d1c6105c98383611a1b565b906004831015614d2b57505050565b602c8310614ebb57614d46611c626122f16122eb8685611a46565b602c8201358201602c604c820191013591604c840135840194614d80614d726134d46134c6878761348d565b6001600160f81b0319161590565b80614e2a575b94614dc761242895611c6295614dcc956101e39b956122f19a614ddc575b614db7611c626122f16122eb8a8a611b25565b916001600160a01b031690613496565b611b25565b602c86013595604c019491612274565b614e25606c8701358701614e1f602c604c830192013580614e06611c626122f16122eb8488611a57565b93614e1a856001600160a01b038a16614f2e565b611a90565b916135e2565b614da4565b5091939092956040519163ecd0596160e01b835260208380614e5460048201906002602083019252565b03816001600160a01b0389165afa928315610890576101e3986122f19761242897611c6297614dcc97614dc795600091614e9c575b50959a50959b5095509550955050614d86565b614eb5915060203d6020116108f8576108ea8183610ec9565b38614e89565b505060046101e39114614ccc565b7f9d17cd6d095ac90a655405ab29f30a7ee7e88ef3974c1bf7544bf591043bb71a91606091614efb82610b4483611bb3565b600160ff198254161790556040519163ffffffff60e01b1682526001600160581b031916602082015260016040820152a1565b6101e391906001600160a01b039081831615614f81575b16600052600080516020614f8b83398151915260205260406000209060018060a01b03166bffffffffffffffffffffffff60a01b825416179055565b60019250614f4556fe1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b867bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f0000000000000000000000000000000071727de22e5e9d8baf0edac6f37da032"; + +bytes constant STAKER_CODE = + hex"0000000000000000000000000000000000000000000000000000000000000000608060405234801561001057600080fd5b5060405161080838038061080883398101604081905261002f9161007a565b6100388161003e565b506100aa565b6001600160a01b0316638b78c6d8198190558060007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a350565b60006020828403121561008c57600080fd5b81516001600160a01b03811681146100a357600080fd5b9392505050565b61074f806100b96000396000f3fe6080604052600436106100c25760003560e01c8063b36f97051161007f578063d8b964e611610059578063d8b964e614610172578063f04e283e146101b2578063f2fde38b146101c5578063fee81cf4146101d857600080fd5b8063b36f970514610139578063c5265d5d1461014c578063c7e55f3e1461015f57600080fd5b806325692962146100c75780634a1ce599146100d157806354d1f13d146100e45780636e7dbabb146100ec578063715018a6146100ff5780638da5cb5b14610107575b600080fd5b6100cf610219565b005b6100cf6100df3660046105a7565b610269565b6100cf6102c7565b6100cf6100fa3660046105cb565b610303565b6100cf610336565b34801561011357600080fd5b50638b78c6d819545b6040516001600160a01b0390911681526020015b60405180910390f35b6100cf610147366004610609565b61034a565b61011c61015a366004610637565b6103b1565b6100cf61016d3660046106c2565b610466565b34801561017e57600080fd5b506101a261018d3660046105a7565b60006020819052908152604090205460ff1681565b6040519015158152602001610130565b6100cf6101c03660046105a7565b6104d2565b6100cf6101d33660046105a7565b610512565b3480156101e457600080fd5b5061020b6101f33660046105a7565b63389a75e1600c908152600091909152602090205490565b604051908152602001610130565b60006202a30067ffffffffffffffff164201905063389a75e1600c5233600052806020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d600080a250565b610271610539565b806001600160a01b031663bb9fe6bf6040518163ffffffff1660e01b8152600401600060405180830381600087803b1580156102ac57600080fd5b505af11580156102c0573d6000803e3d6000fd5b5050505050565b63389a75e1600c523360005260006020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c92600080a2565b61030b610539565b6001600160a01b03919091166000908152602081905260409020805460ff1916911515919091179055565b61033e610539565b6103486000610554565b565b610352610539565b60405163611d2e7560e11b81526001600160a01b03828116600483015283169063c23a5cea90602401600060405180830381600087803b15801561039557600080fd5b505af11580156103a9573d6000803e3d6000fd5b505050505050565b6001600160a01b03841660009081526020819052604081205460ff166103ea57604051633220d5f360e21b815260040160405180910390fd5b604051633a9b44eb60e21b81526001600160a01b0386169063ea6d13ac9061041a908790879087906004016106f9565b6020604051808303816000875af1158015610439573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061045d9190610732565b95945050505050565b61046e610539565b604051621cb65b60e51b815263ffffffff821660048201526001600160a01b03831690630396cb609034906024016000604051808303818588803b1580156104b557600080fd5b505af11580156104c9573d6000803e3d6000fd5b50505050505050565b6104da610539565b63389a75e1600c52806000526020600c20805442111561050257636f5e88186000526004601cfd5b6000905561050f81610554565b50565b61051a610539565b8060601b61053057637448fbae6000526004601cfd5b61050f81610554565b638b78c6d819543314610348576382b429006000526004601cfd5b638b78c6d81980546001600160a01b039092169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0600080a355565b6001600160a01b038116811461050f57600080fd5b6000602082840312156105b957600080fd5b81356105c481610592565b9392505050565b600080604083850312156105de57600080fd5b82356105e981610592565b9150602083013580151581146105fe57600080fd5b809150509250929050565b6000806040838503121561061c57600080fd5b823561062781610592565b915060208301356105fe81610592565b6000806000806060858703121561064d57600080fd5b843561065881610592565b9350602085013567ffffffffffffffff8082111561067557600080fd5b818701915087601f83011261068957600080fd5b81358181111561069857600080fd5b8860208285010111156106aa57600080fd5b95986020929092019750949560400135945092505050565b600080604083850312156106d557600080fd5b82356106e081610592565b9150602083013563ffffffff811681146105fe57600080fd5b604081528260408201528284606083013760006060848301015260006060601f19601f8601168301019050826020830152949350505050565b60006020828403121561074457600080fd5b81516105c481610592560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a"; + +bytes constant KERNEL_FACTORY_CODE = + hex"000000000000000000000000000000000000000000000000000000000000000060a03461007757601f61047038819003918201601f19168301916001600160401b0383118484101761007c5780849260209460405283398101031261007757516001600160a01b0381168103610077576080526040516103dd9081610093823960805181818160d10152818161023401526102f00152f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe60806040818152600490600436101561001757600080fd5b600092833560e01c90816348aac39214610267575080635c60da1b1461021f5763ea6d13ac1461004657600080fd5b61004f36610352565b94919083519560209661007a86828a81019486888737868201908c820152038a8101845201826103a5565b5190209483958551917fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076875261600989527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f97602192605f60212060358601523060581b855260ff855380601586015260558520993415948b3b156101fe57505050506001916101f85785388180348c5af1156101ed57505b818652846060521561016b575b505091516001600160a01b0390931683525050f35b8082859493859483378101838152039082875af1903d156101e7573d9067ffffffffffffffff82116101d3578351916101ad601f8201601f19168801846103a5565b8252853d92013e5b156101c35738808080610156565b5163487e630960e11b8152600490fd5b634e487b7160e01b81526041600452602490fd5b506101b5565b63b12d13eb8652601cfd5b50610149565b91939a5091935034f59687156102145750610149565b63301164258652601cfd5b838234610263578160031936011261026357517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5080fd5b848334610263578260209361029d8361027f36610352565b90808a879498019788378201908982015203878101845201826103a5565b51902081517fcc3735a920a3ca505d382bbc545af43d6000803e6038573d6000fd5b3d6000f36060527f5155f3363d3d373d3d363d7f360894a13ba1a3210667c828492db98dca3e2076835261600985527f0000000000000000000000000000000000000000000000000000000000000000601e5268603d3d8160223d3973600a52605f6021209083528360605260ff84536035523060601b6001526015526055822091603552519060018060a01b03168152f35b9060406003198301126103a05760043567ffffffffffffffff928382116103a057806023830112156103a05781600401359384116103a057602484830101116103a057602401919060243590565b600080fd5b90601f8019910116810190811067ffffffffffffffff8211176103c757604052565b634e487b7160e01b600052604160045260246000fd00000000000000000000000094f097e1ebeb4eca3aae54cabb08905b239a7d27"; + +contract Deploy is Script { + address constant DEPLOYER = 0x9775137314fE595c943712B0b336327dfa80aE8A; + address constant ENTRYPOINT_0_7_ADDR = 0x0000000071727De22E5E9d8BAf0edAc6f37da032; + address constant CREATE2_PROXY = 0x4e59b44847b379578588920cA78FbF26c0B4956C; + + address constant EXPECTED_STAKER = 0xd703aaE79538628d27099B8c4f621bE4CCd142d5; + address constant EXPECTED_KERNEL = 0x94F097E1ebEB4ecA3AAE54cabb08905B239A7D27; + address constant EXPECTED_FACTORY = 0x6723b44Abeec4E71eBE3232BD5B455805baDD22f; + + function run() external { + vm.startBroadcast(DEPLOYER); + FactoryStaker staker = FactoryStaker(payable(EXPECTED_STAKER)); + if (address(staker).code.length == 0) { + (bool success,) = CREATE2_PROXY.call(STAKER_CODE); + require(success); + console.log("Deployed staker"); + } + console.log("Factory Staker :", address(staker)); + + Kernel kernel = Kernel(payable(EXPECTED_KERNEL)); + if (EXPECTED_KERNEL.code.length == 0) { + (bool success,) = CREATE2_PROXY.call(KERNEL_CODE); + require(success); + console.log("Deployed kernel"); + } + console.log("Kernel :", address(kernel)); + + KernelFactory factory = KernelFactory(EXPECTED_FACTORY); + if (EXPECTED_FACTORY.code.length == 0) { + (bool success,) = CREATE2_PROXY.call(KERNEL_FACTORY_CODE); + require(success); + console.log("Deployed factory"); + } + console.log("Factory :", address(factory)); + + if (!staker.approved(factory)) { + staker.approveFactory(factory, true); + console.log("Approved"); + } + IEntryPoint entryPoint = IEntryPoint(ENTRYPOINT_0_7_ADDR); + IStakeManager.DepositInfo memory info = entryPoint.getDepositInfo(address(staker)); + if (info.stake < 1e17) { + staker.stake{value: 1e17 - info.stake}(IEntryPoint(ENTRYPOINT_0_7_ADDR), 86400); + } + vm.stopBroadcast(); + } +} diff --git a/script/DeployDeterministic.s.sol b/script/DeployDeterministic.s.sol deleted file mode 100644 index caae47ac..00000000 --- a/script/DeployDeterministic.s.sol +++ /dev/null @@ -1,40 +0,0 @@ -pragma solidity ^0.8.0; - -import "src/factory/KernelFactory.sol"; -import "forge-std/Script.sol"; - -import "./deterministic/ECDSAValidator.s.sol"; -import "./deterministic/Factory.s.sol"; -import "./deterministic/SessionKey.s.sol"; -import "./deterministic/Kernel2_2.s.sol"; -import "./deterministic/Kernel2_3.s.sol"; - -contract DeployDeterministic is Script { - address constant DEPLOYER = 0x9775137314fE595c943712B0b336327dfa80aE8A; - - function run() external { - vm.startBroadcast(DEPLOYER); - KernelFactory factory = KernelFactory(payable(FactoryDeploy.deploy())); - - ECDSAValidatorDeploy.deploy(); - SessionKeyDeploy.deploy(); - - //(address k22, address k22lite) = Kernel_2_2_Deploy.deploy(); - - //if(!factory.isAllowedImplementation(k22)) { - // factory.setImplementation(k22, true); - //} - //if(!factory.isAllowedImplementation(k22lite)) { - // factory.setImplementation(k22lite, true); - //} - - (address k23, address k23lite) = Kernel_2_3_Deploy.deploy(); - if (!factory.isAllowedImplementation(k23)) { - factory.setImplementation(k23, true); - } - if (!factory.isAllowedImplementation(k23lite)) { - factory.setImplementation(k23lite, true); - } - vm.stopBroadcast(); - } -} diff --git a/script/DeployECDSA.s.sol b/script/DeployECDSA.s.sol new file mode 100644 index 00000000..fc12961f --- /dev/null +++ b/script/DeployECDSA.s.sol @@ -0,0 +1,17 @@ +pragma solidity ^0.8.0; + +import "forge-std/Script.sol"; +import "forge-std/console.sol"; + +import "src/validator/ECDSAValidator.sol"; + +contract DeployValidators is Script { + address constant DEPLOYER = 0x9775137314fE595c943712B0b336327dfa80aE8A; + + function run() external { + vm.startBroadcast(DEPLOYER); + ECDSAValidator validator = new ECDSAValidator{salt: 0}(); + console.log("ECDSA :", address(validator)); + vm.stopBroadcast(); + } +} diff --git a/script/DeployECDSAValidator.s.sol b/script/DeployECDSAValidator.s.sol deleted file mode 100644 index ad57c0bf..00000000 --- a/script/DeployECDSAValidator.s.sol +++ /dev/null @@ -1,24 +0,0 @@ -pragma solidity ^0.8.0; - -import "src/factory/KernelFactory.sol"; -import "src/validator/ECDSAValidator.sol"; -import "forge-std/Script.sol"; -import "forge-std/console.sol"; - -contract DeployKernel is Script { - address constant DEPLOYER = 0x9775137314fE595c943712B0b336327dfa80aE8A; - address constant ENTRYPOINT_0_6 = 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789; - address constant EXPECTED_VALIDATOR_ADDRESS = 0xd9AB5096a832b9ce79914329DAEE236f8Eea0390; - - function run() public { - uint256 key = vm.envUint("DEPLOYER_PRIVATE_KEY"); - vm.startBroadcast(key); - if (EXPECTED_VALIDATOR_ADDRESS.code.length == 0) { - ECDSAValidator validator = new ECDSAValidator{salt: 0}(); - console.log("validator address: %s", address(validator)); - } else { - console.log("validator address: %s", EXPECTED_VALIDATOR_ADDRESS); - } - vm.stopBroadcast(); - } -} diff --git a/script/DeployKernel.s.sol b/script/DeployKernel.s.sol deleted file mode 100644 index d46570bf..00000000 --- a/script/DeployKernel.s.sol +++ /dev/null @@ -1,58 +0,0 @@ -pragma solidity ^0.8.0; - -import "src/factory/KernelFactory.sol"; -import "I4337/interfaces/IStakeManager.sol"; -import "src/Kernel.sol"; -import "src/lite/KernelLiteECDSA.sol"; -import "forge-std/Script.sol"; -import "forge-std/console.sol"; -import "src/validator/ECDSAValidator.sol"; - -contract DeployKernel is Script { - address constant DEPLOYER = 0x9775137314fE595c943712B0b336327dfa80aE8A; - address constant ENTRYPOINT_0_6 = 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789; - address constant ECDSAVALIDATOR = 0xd9AB5096a832b9ce79914329DAEE236f8Eea0390; - address constant EXPECTED_KERNEL_ADDRESS = 0x0DA6a956B9488eD4dd761E59f52FDc6c8068E6B5; - address constant EXPECTED_KERNEL_LITE_ADDRESS = 0xbEdb61Be086F3f15eE911Cc9AB3EEa945DEbFa96; - address payable constant EXPECTED_KERNEL_FACTORY_ADDRESS = payable(0x5de4839a76cf55d0c90e2061ef4386d962E15ae3); - - function run() public { - uint256 key = vm.envUint("DEPLOYER_PRIVATE_KEY"); - vm.startBroadcast(key); - KernelFactory factory; - if (EXPECTED_KERNEL_FACTORY_ADDRESS.code.length == 0) { - factory = new KernelFactory{salt: 0}(DEPLOYER, IEntryPoint(ENTRYPOINT_0_6)); - console.log("KernelFactory address: %s", address(factory)); - } else { - factory = KernelFactory(EXPECTED_KERNEL_FACTORY_ADDRESS); - } - if (EXPECTED_KERNEL_LITE_ADDRESS.code.length == 0) { - if (address(ECDSAVALIDATOR).code.length == 0) { - console.log("ECDSAVALIDATOR NOT DEPLOYED"); - } else { - KernelLiteECDSA kernellite; - kernellite = new KernelLiteECDSA{salt: 0}(IEntryPoint(ENTRYPOINT_0_6), IKernelValidator(ECDSAVALIDATOR)); - console.log("Kernel Lite address: %s", address(kernellite)); - } - } - if (factory.isAllowedImplementation(EXPECTED_KERNEL_LITE_ADDRESS) == false) { - console.log("Registering kernellite implementation"); - factory.setImplementation(EXPECTED_KERNEL_LITE_ADDRESS, true); - } - if (EXPECTED_KERNEL_ADDRESS.code.length == 0) { - Kernel kernel; - kernel = new Kernel{salt: 0}(IEntryPoint(ENTRYPOINT_0_6)); - console.log("Kernel address: %s", address(kernel)); - } - if (factory.isAllowedImplementation(EXPECTED_KERNEL_ADDRESS) == false) { - console.log("Registering kernel implementation"); - factory.setImplementation(EXPECTED_KERNEL_ADDRESS, true); - } - IEntryPoint entryPoint = IEntryPoint(ENTRYPOINT_0_6); - IStakeManager.DepositInfo memory info = entryPoint.getDepositInfo(address(factory)); - if (info.stake == 0) { - console.log("Need to stake to factory"); - } - vm.stopBroadcast(); - } -} diff --git a/script/DeployKernelInitial.s.sol b/script/DeployKernelInitial.s.sol deleted file mode 100644 index 45c1e4e3..00000000 --- a/script/DeployKernelInitial.s.sol +++ /dev/null @@ -1,41 +0,0 @@ -pragma solidity ^0.8.0; - -import "src/factory/KernelFactory.sol"; -import "I4337/interfaces/IStakeManager.sol"; -import "src/Kernel.sol"; -import "src/lite/KernelLiteECDSA.sol"; -import "forge-std/Script.sol"; -import "forge-std/console.sol"; -import "src/validator/ECDSAValidator.sol"; - -contract DeployKernelInitial is Script { - address constant DEPLOYER = 0x9775137314fE595c943712B0b336327dfa80aE8A; - address constant ENTRYPOINT_0_6 = 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789; - address constant ECDSAVALIDATOR = 0xd9AB5096a832b9ce79914329DAEE236f8Eea0390; - address payable constant EXPECTED_KERNEL_FACTORY_ADDRESS = payable(0x5de4839a76cf55d0c90e2061ef4386d962E15ae3); - - function run() public { - uint256 key = vm.envUint("DEPLOYER_PRIVATE_KEY"); - vm.startBroadcast(key); - KernelFactory factory; - if (EXPECTED_KERNEL_FACTORY_ADDRESS.code.length == 0) { - factory = new KernelFactory{salt: 0}(DEPLOYER, IEntryPoint(ENTRYPOINT_0_6)); - console.log("KernelFactory address: %s", address(factory)); - } else { - factory = KernelFactory(EXPECTED_KERNEL_FACTORY_ADDRESS); - } - Kernel kernel; - kernel = new Kernel{salt: 0}(IEntryPoint(ENTRYPOINT_0_6)); - console.log("Kernel address: %s", address(kernel)); - if (factory.isAllowedImplementation(address(kernel)) == false) { - console.log("Registering kernel implementation"); - factory.setImplementation(address(kernel), true); - } - IEntryPoint entryPoint = IEntryPoint(ENTRYPOINT_0_6); - IStakeManager.DepositInfo memory info = entryPoint.getDepositInfo(address(factory)); - if (info.stake == 0) { - console.log("Need to stake to factory"); - } - vm.stopBroadcast(); - } -} diff --git a/script/DeployKillSwitch.s.sol b/script/DeployKillSwitch.s.sol deleted file mode 100644 index 48aa6df9..00000000 --- a/script/DeployKillSwitch.s.sol +++ /dev/null @@ -1,33 +0,0 @@ -pragma solidity ^0.8.0; - -import "src/validator/KillSwitchValidator.sol"; -import "src/executor/KillSwitchAction.sol"; -import "forge-std/Script.sol"; -import "forge-std/console.sol"; - -contract DeployKillSwitch is Script { - address constant EXPECTED_ADDRESS_KILL_SWITCH_VALIDATOR = 0x7393A7dA58CCfFb78f52adb09705BE6E20F704BC; - address constant EXPECTED_ADDRESS_KILL_SWITCH_ACTION = 0x3f38e479304c7F18F988269a1bDa7d646bd48243; - - function run() public { - uint256 key = vm.envUint("TESTNET_DEPLOYER_PRIVATE_KEY"); - vm.startBroadcast(key); - KillSwitchValidator validator; - if (EXPECTED_ADDRESS_KILL_SWITCH_VALIDATOR.code.length == 0) { - console.log("deploying KillSwitchValidator"); - validator = new KillSwitchValidator{salt: 0}(); - console.log("validator address: %s", address(validator)); - } else { - validator = KillSwitchValidator(EXPECTED_ADDRESS_KILL_SWITCH_VALIDATOR); - console.log("validator address: %s", address(EXPECTED_ADDRESS_KILL_SWITCH_VALIDATOR)); - } - if (EXPECTED_ADDRESS_KILL_SWITCH_ACTION.code.length == 0) { - console.log("deploying KillSwitchAction"); - KillSwitchAction action = new KillSwitchAction{salt: 0}(validator); - console.log("KillSwitchAction address: %s", address(action)); - } else { - console.log("KillSwitchAction address: %s", address(EXPECTED_ADDRESS_KILL_SWITCH_ACTION)); - } - vm.stopBroadcast(); - } -} diff --git a/script/DeployModularPermission.s.sol b/script/DeployModularPermission.s.sol deleted file mode 100644 index 839d909d..00000000 --- a/script/DeployModularPermission.s.sol +++ /dev/null @@ -1,74 +0,0 @@ -pragma solidity ^0.8.0; - -import "src/validator/modularPermission/ModularPermissionValidator.sol"; -import "src/validator/modularPermission/signers/ECDSASigner.sol"; -import "src/validator/modularPermission/policies/GasPolicy.sol"; -import "src/validator/modularPermission/policies/SignaturePolicy.sol"; -import "src/validator/modularPermission/policies/SudoPolicy.sol"; -import {MerklePolicy} from "src/validator/modularPermission/policies/MerklePolicy.sol"; -import "forge-std/Script.sol"; -import "forge-std/console.sol"; - -contract DeployModularPermission is Script { - address constant EXPECTED_MODULAR_PERMISSION_ADDRESS = 0xfdDE9a26b6c3B7ca4b52C5f010d5B9Fb67e09E5A; - address constant EXPECTED_ECDSA_SIGNER_ADDRESS = 0x5569b550050F6537D9ac3329001be7F4C6659Cb0; - address constant EXPECTED_GAS_POLICY_ADDRESS = 0x62868E950Efbb336DCFf033598Ee5E602f0a93cD; - address constant EXPECTED_MERKLE_POLICY_ADDRESS = 0xb808D75B5ACf6B5513eb816d3980C733ae6Be468; - address constant EXPECTED_SIGNATURE_POLICY_ADDRESS = 0xdb5F74349Dd2FB2A09eEc2C6A39e77B68ca2852C; - address constant EXPECTED_SUDO_POLICY_ADDRESS = 0x9262C3A894328f9036Aa7a3f0f2cE8CF684ad20f; - - function run() public { - uint256 key = vm.envUint("TESTNET_DEPLOYER_PRIVATE_KEY"); - vm.startBroadcast(key); - - if (EXPECTED_MODULAR_PERMISSION_ADDRESS.code.length == 0) { - console.log("deploying ModularPermissionValidator"); - ModularPermissionValidator validator = new ModularPermissionValidator{salt: 0}(); - console.log("validator address: %s", address(validator)); - } else { - console.log("validator address: %s", address(EXPECTED_MODULAR_PERMISSION_ADDRESS)); - } - - if (EXPECTED_ECDSA_SIGNER_ADDRESS.code.length == 0) { - console.log("deploying ECDSASigner"); - ECDSASigner ecdsaSigner = new ECDSASigner{salt: 0}(); - console.log("ecdsaSigner address: %s", address(ecdsaSigner)); - } else { - console.log("ecdsaSigner address: %s", address(EXPECTED_ECDSA_SIGNER_ADDRESS)); - } - - if (EXPECTED_GAS_POLICY_ADDRESS.code.length == 0) { - console.log("deploying GasPolicy"); - GasPolicy gasPolicy = new GasPolicy{salt: 0}(); - console.log("gasPolicy address: %s", address(gasPolicy)); - } else { - console.log("gasPolicy address: %s", address(EXPECTED_GAS_POLICY_ADDRESS)); - } - - if (EXPECTED_MERKLE_POLICY_ADDRESS.code.length == 0) { - console.log("deploying MerklePolicy"); - MerklePolicy merklePolicy = new MerklePolicy{salt: 0}(); - console.log("merklePolicy address: %s", address(merklePolicy)); - } else { - console.log("merklePolicy address: %s", address(EXPECTED_MERKLE_POLICY_ADDRESS)); - } - - if (EXPECTED_SIGNATURE_POLICY_ADDRESS.code.length == 0) { - console.log("deploying SignaturePolicy"); - SignaturePolicy signturePolicy = new SignaturePolicy{salt: 0}(); - console.log("signturePolicy address: %s", address(signturePolicy)); - } else { - console.log("signturePolicy address: %s", address(EXPECTED_SIGNATURE_POLICY_ADDRESS)); - } - - if (EXPECTED_SUDO_POLICY_ADDRESS.code.length == 0) { - console.log("deploying SudoPolicy"); - SudoPolicy sudoPolicy = new SudoPolicy{salt: 0}(); - console.log("sudoPolicy address: %s", address(sudoPolicy)); - } else { - console.log("sudoPolicy address: %s", address(EXPECTED_SUDO_POLICY_ADDRESS)); - } - - vm.stopBroadcast(); - } -} diff --git a/script/DeployMulticall.s.sol b/script/DeployMulticall.s.sol deleted file mode 100644 index 6f94e870..00000000 --- a/script/DeployMulticall.s.sol +++ /dev/null @@ -1,22 +0,0 @@ -pragma solidity ^0.8.0; - -import "forge-std/Script.sol"; - -contract DeployMultiCall is Script { - address constant DEPLOYER = 0x9775137314fE595c943712B0b336327dfa80aE8A; - address constant EXPECTED_MULTICALL_ADDRESS = 0x8ae01fCF7c655655fF2c6Ef907b8B4718Ab4e17c; - address constant DETERMINISTIC_DEPLOYER = 0x4e59b44847b379578588920cA78FbF26c0B4956C; - - function run() public { - uint256 key = vm.envUint("DEPLOYER_PRIVATE_KEY"); - vm.startBroadcast(key); - if (EXPECTED_MULTICALL_ADDRESS.code.length == 0) { - (bool success, bytes memory ret) = DETERMINISTIC_DEPLOYER.call( - hex"000000000000000000000000000000000000000000000000000000000000000060a060405234801561001057600080fd5b50306080526080516102bd61002f6000396000604f01526102bd6000f3fe60806040526004361061001e5760003560e01c80638d80ff0a14610023575b600080fd5b6100366100313660046101b8565b610038565b005b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003610101576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603060248201527f4d756c746953656e642073686f756c64206f6e6c792062652063616c6c65642060448201527f7669612064656c656761746563616c6c00000000000000000000000000000000606482015260840160405180910390fd5b805160205b81811015610184578083015160f81c6001820184015160601c60158301850151603584018601516055850187016000856000811461014b576001811461015b57610166565b6000808585888a5af19150610166565b6000808585895af491505b508061017157600080fd5b5050806055018501945050505050610106565b505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000602082840312156101ca57600080fd5b813567ffffffffffffffff808211156101e257600080fd5b818401915084601f8301126101f657600080fd5b81358181111561020857610208610189565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561024e5761024e610189565b8160405282815287602084870101111561026757600080fd5b82602086016020830137600092810160200192909252509594505050505056fea2646970667358221220aee0f2dd047c52784b9c7806e4078197141e146ec66587d8610576db5f8ad20e64736f6c634300080f0033" - ); - } else { - console.log("validator address: %s", EXPECTED_MULTICALL_ADDRESS); - } - vm.stopBroadcast(); - } -} diff --git a/script/DeployRecovery.s.sol b/script/DeployRecovery.s.sol deleted file mode 100644 index dbf9683a..00000000 --- a/script/DeployRecovery.s.sol +++ /dev/null @@ -1,19 +0,0 @@ -pragma solidity ^0.8.0; - -import "src/validator/WeightedECDSAValidator.sol"; -import "src/executor/RecoveryAction.sol"; -import "forge-std/Script.sol"; -import "forge-std/console.sol"; - -contract DeployRecovery is Script { - function run() public { - address deployer = vm.envAddress("DEPLOYER"); - vm.startBroadcast(deployer); - console.log("Deployer address: ", deployer); - //RecoveryAction action = new RecoveryAction{salt:0}(); - //console.log("Deploying RecoveryAction at address: ", address(action)); - WeightedECDSAValidator validator = new WeightedECDSAValidator{salt: 0}(); - console.log("Deploying WeightedECDSAValidator at address: ", address(validator)); - vm.stopBroadcast(); - } -} diff --git a/script/DeploySessionKey.s.sol b/script/DeploySessionKey.s.sol deleted file mode 100644 index ae2f6129..00000000 --- a/script/DeploySessionKey.s.sol +++ /dev/null @@ -1,18 +0,0 @@ -pragma solidity ^0.8.0; - -import "src/validator/SessionKeyValidator.sol"; -import "forge-std/Script.sol"; -import "forge-std/console.sol"; - -contract DeploySessionKey is Script { - address constant EXPECTED_ADDRESS = 0x5C06CE2b673fD5E6e56076e40DD46aB67f5a72A5; - - function run() public { - address deployer = vm.envAddress("DEPLOYER"); - vm.startBroadcast(deployer); - console.log("deploying SessionKeyValidator"); - SessionKeyValidator validator = new SessionKeyValidator{salt: 0}(); - console.log("validator address: %s", address(validator)); - vm.stopBroadcast(); - } -} diff --git a/script/DeployWebAuthnFclValidator.sol b/script/DeployWebAuthnFclValidator.sol deleted file mode 100644 index 94437add..00000000 --- a/script/DeployWebAuthnFclValidator.sol +++ /dev/null @@ -1,22 +0,0 @@ -pragma solidity ^0.8.0; - -import "src/factory/KernelFactory.sol"; -import "src/utils/P256VerifierWrapper.sol"; -import "src/validator/webauthn//WebAuthnFclValidator.sol"; -import "forge-std/Script.sol"; -import "forge-std/console.sol"; - -contract DeployWebAuthnFclValidator is Script { - function run() public { - uint256 key = vm.envUint("DEPLOYER_PRIVATE_KEY"); - vm.startBroadcast(key); - - P256VerifierWrapper p256VerifierWrapper = new P256VerifierWrapper{salt: 0}(); - console.log("p256 wrapper address: %s", address(p256VerifierWrapper)); - - WebAuthnFclValidator validator = new WebAuthnFclValidator{salt: 0}(address(p256VerifierWrapper)); - console.log("validator address: %s", address(validator)); - - vm.stopBroadcast(); - } -} diff --git a/script/DeployWeightedECDSA.s.sol b/script/DeployWeightedECDSA.s.sol deleted file mode 100644 index 1e7e6d13..00000000 --- a/script/DeployWeightedECDSA.s.sol +++ /dev/null @@ -1,31 +0,0 @@ -pragma solidity ^0.8.0; - -import "src/validator/WeightedECDSAValidator.sol"; -import "src/executor/RecoveryAction.sol"; -import "forge-std/Script.sol"; -import "forge-std/console.sol"; - -contract DeployWeightedECDSA is Script { - address constant EXPECTED_ADDRESS_WEIGHTED_ECDSA_VALIDATOR = 0x4fd47D861c349bD49DC61341a922cb72F9dF7E8d; - address constant EXPECTED_ADDRESS_RECOVERY_ACTION = 0x2f65dB8039fe5CAEE0a8680D2879deB800F31Ae1; - - function run() public { - uint256 key = vm.envUint("DEPLOYER_PRIVATE_KEY"); - vm.startBroadcast(key); - if (EXPECTED_ADDRESS_WEIGHTED_ECDSA_VALIDATOR.code.length == 0) { - console.log("deploying WeightedECDSAValidator"); - WeightedECDSAValidator validator = new WeightedECDSAValidator{salt: 0}(); - console.log("validator address: %s", address(validator)); - } else { - console.log("validator address: %s", address(EXPECTED_ADDRESS_WEIGHTED_ECDSA_VALIDATOR)); - } - if (EXPECTED_ADDRESS_RECOVERY_ACTION.code.length == 0) { - console.log("deploying RecoveryAction"); - RecoveryAction action = new RecoveryAction{salt: 0}(); - console.log("RecoveryAction address: %s", address(action)); - } else { - console.log("RecoveryAction address: %s", address(EXPECTED_ADDRESS_RECOVERY_ACTION)); - } - vm.stopBroadcast(); - } -} diff --git a/script/StakeToFactory.s.sol b/script/StakeToFactory.s.sol deleted file mode 100644 index 4a80a611..00000000 --- a/script/StakeToFactory.s.sol +++ /dev/null @@ -1,24 +0,0 @@ -pragma solidity ^0.8.0; - -import "src/factory/KernelFactory.sol"; -import "I4337/interfaces/IStakeManager.sol"; -import "forge-std/Script.sol"; -import "forge-std/console.sol"; - -contract StakeToFactory is Script { - address constant DEPLOYER = 0x9775137314fE595c943712B0b336327dfa80aE8A; - address constant ENTRYPOINT_0_6 = 0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789; - address payable constant EXPECTED_KERNEL_ADDRESS = payable(0xf048AD83CB2dfd6037A43902a2A5Be04e53cd2Eb); - address payable constant EXPECTED_KERNEL_FACTORY_ADDRESS = payable(0x5de4839a76cf55d0c90e2061ef4386d962E15ae3); - - function run() public { - vm.startBroadcast(DEPLOYER); - KernelFactory factory = KernelFactory(EXPECTED_KERNEL_FACTORY_ADDRESS); - IEntryPoint entryPoint = IEntryPoint(ENTRYPOINT_0_6); - IStakeManager.DepositInfo memory info = entryPoint.getDepositInfo(address(factory)); - if (info.stake < 1e17) { - factory.addStake{value: 1e17 - info.stake}(86400); - } - vm.stopBroadcast(); - } -} diff --git a/script/deterministic/DeterministicDeploy.s.sol b/script/deterministic/DeterministicDeploy.s.sol deleted file mode 100644 index 53986845..00000000 --- a/script/deterministic/DeterministicDeploy.s.sol +++ /dev/null @@ -1,18 +0,0 @@ -pragma solidity ^0.8.0; - -import "forge-std/console.sol"; - -library DeterministicDeploy { - address constant DETERMINISTIC_DEPLOYER = 0x4e59b44847b379578588920cA78FbF26c0B4956C; - - function checkDeploy(string memory tag, address _expectedAddress, bytes memory _code) internal { - if (_expectedAddress.code.length == 0) { - (bool success, bytes memory addr) = DETERMINISTIC_DEPLOYER.call(_code); - require(success, "DeterministicDeploy: failed to deploy"); - require(address(bytes20(addr)) == _expectedAddress, "DeterministicDeploy: address mismatch"); - console.log(string.concat(tag, ": deployed at %s"), _expectedAddress); - } else { - console.log(string.concat(tag, ": already deployed")); - } - } -} diff --git a/script/deterministic/ECDSAValidator.s.sol b/script/deterministic/ECDSAValidator.s.sol deleted file mode 100644 index a70f4df7..00000000 --- a/script/deterministic/ECDSAValidator.s.sol +++ /dev/null @@ -1,14 +0,0 @@ -pragma solidity ^0.8.0; - -import "./DeterministicDeploy.s.sol"; - -library ECDSAValidatorDeploy { - address constant EXPECTED_ECDSA_VALIDATOR_ADDRESS = 0xd9AB5096a832b9ce79914329DAEE236f8Eea0390; - bytes constant VALIDATOR_CODE = - hex"000000000000000000000000000000000000000000000000000000000000000060808060405234610016576104ee908161001c8239f35b600080fdfe60406080815260048036101561001457600080fd5b600091823560e01c80630c959556146101d557806320709efc1461019b578063333daf921461015b5780633a871cdd1461010d578381638fc925aa146100c85750639ea9bd591461006457600080fd5b346100c457806003193601126100c45761007c610296565b9160243567ffffffffffffffff81116100c057936100a08392602096369101610263565b5050338152808552205490516001600160a01b0392831691909216148152f35b8480fd5b8280fd5b92905060203660031901126101095780359067ffffffffffffffff8211610104576100f591369101610263565b50503382528160205281205580f35b505050fd5b5050fd5b50600319836060368301126101545783359167ffffffffffffffff831161015757610160908336030112610154575060209261014d916024359101610348565b9051908152f35b80fd5b5080fd5b5082346101545781600319360112610154576024359067ffffffffffffffff8211610154575060209261019461014d9236908301610263565b9135610464565b838234610157576020366003190112610157576020916001600160a01b03908290826101c5610296565b1681528085522054169051908152f35b509060203660031901126100c45780359067ffffffffffffffff821161025f5761020191369101610263565b6014116100c4573560601c90338352826020528220805490826bffffffffffffffffffffffff60a01b831617905560018060a01b0316337f381c0d11398486654573703c51ee8210ce9461764d133f9f0e53b6a5397053318480a480f35b8380fd5b9181601f840112156102915782359167ffffffffffffffff8311610291576020838186019501011161029157565b600080fd5b600435906001600160a01b038216820361029157565b903590601e1981360301821215610291570180359067ffffffffffffffff82116102915760200191813603831361029157565b92919267ffffffffffffffff918281116103325760405192601f8201601f19908116603f011684019081118482101761033257604052829481845281830111610291578281602093846000960137010152565b634e487b7160e01b600052604160045260246000fd5b600092916001600160a01b039084833583811690819003610157578152806020528260408220541693826020527b19457468657265756d205369676e6564204d6573736167653a0a33328252603c60042091846103be6101408401946103b86103b187876102ac565b36916102df565b906103ee565b1686146103e557506103b16103d793926103b8926102ac565b16036103df57565b60019150565b96505050505050565b60207f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a19392608060405193838301516040526040830151928360605260416000988995869485526060840151851a885210915114165afa508251923d1561045757606052604052565b638baa579f90526004601cfd5b3360009081526020819052604081205490936001600160a01b03918216939192836104996104933685876102df565b836103ee565b1685146104e6576104d7926103b8916020527b19457468657265756d205369676e6564204d6573736167653a0a33328752603c6004209236916102df565b16036104e05790565b50600190565b50505050509056"; - - function deploy() internal returns (address) { - DeterministicDeploy.checkDeploy("ECDSAValidator", EXPECTED_ECDSA_VALIDATOR_ADDRESS, VALIDATOR_CODE); - return EXPECTED_ECDSA_VALIDATOR_ADDRESS; - } -} diff --git a/script/deterministic/Factory.s.sol b/script/deterministic/Factory.s.sol deleted file mode 100644 index 471e2c1a..00000000 --- a/script/deterministic/Factory.s.sol +++ /dev/null @@ -1,14 +0,0 @@ -pragma solidity ^0.8.0; - -import "./DeterministicDeploy.s.sol"; - -library FactoryDeploy { - address payable constant EXPECTED_KERNEL_FACTORY_ADDRESS = payable(0x5de4839a76cf55d0c90e2061ef4386d962E15ae3); - bytes constant KERNEL_FACTORY_CODE = - hex"00000000000000000000000000000000000000000000000000000000000000006080346100b257601f610b2d38819003918201601f19168301916001600160401b038311848410176100b75780849260409485528339810103126100b25780516001600160a01b0391828216918290036100b257602001519182168092036100b25780638b78c6d8195560007f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08180a3600080546001600160a01b031916919091179055604051610a5f90816100ce8239f35b600080fd5b634e487b7160e01b600052604160045260246000fdfe6040608081526004908136101561001557600080fd5b600091823560e01c9081630396cb60146107d45781632569296214610789578163296601cd1461059d5781634d6cb7001461052b5781635414dff0146104fa57816354d1f13d146104b4578163584465f2146104745781636544c82814610436578163715018a6146103f05781638da5cb5b146103c3578163b0d691fe1461039b578163bb30a9741461034557838263bb9fe6bf146102ec578263c23a5cea1461026157508163d7533f0214610243578163db4c545e14610219578163f04e283e14610199578163f2fde38b1461012c575063fee81cf4146100f657600080fd5b3461012857602036600319011261012857602091610112610845565b9063389a75e1600c525281600c20549051908152f35b5080fd5b8390602036600319011261012857610142610845565b9061014b61088e565b8160601b1561018e575060018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b637448fbae8352601cfd5b83906020366003190112610128576101af610845565b906101b861088e565b63389a75e1600c528183526020600c20908154421161020e575082905560018060a01b0316638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08580a35580f35b636f5e88188452601cfd5b5050346101285781600319360112610128576020906089601361023a6108d8565b01209051908152f35b505034610128578160031936011261012857602090516202a3008152f35b809184346102e85760203660031901126102e85781356001600160a01b0381811693918490036102e45761029361088e565b84541692833b156102e45760248592838551968794859363611d2e7560e11b85528401525af19081156102db57506102c85750f35b6102d190610a13565b6102d85780f35b80fd5b513d84823e3d90fd5b8480fd5b5050fd5b809184346102e857826003193601126102e85761030761088e565b82546001600160a01b031691823b1561034057815163bb9fe6bf60e01b81529284918491829084905af19081156102db57506102c85750f35b505050fd5b50503461012857806003193601126101285761035f610845565b90602435918215158093036103975761037661088e565b60018060a01b03168352600160205282209060ff8019835416911617905580f35b8380fd5b505034610128578160031936011261012857905490516001600160a01b039091168152602090f35b505034610128578160031936011261012857638b78c6d8195490516001600160a01b039091168152602090f35b83806003193601126102d85761040461088e565b80638b78c6d8198181547f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a35580f35b5050346101285760203660031901126101285760209160ff9082906001600160a01b03610461610845565b1681526001855220541690519015158152f35b83903461012857602036600319011261012857356001600160a01b03811690819003610128576104a261088e565b81546001600160a01b03191617815580f35b83806003193601126102d85763389a75e1600c52338152806020600c2055337ffa7b8eab7da67f412cc9575ed43464468f9bfbae89d1675917346ca6d8fe3c928280a280f35b8284346102d85760203660031901126102d8575061051a602092356108ab565b90516001600160a01b039091168152f35b8284346102d857816003193601126102d85782359067ffffffffffffffff82116102d857506bffffffffffffffffffffffff61056f60209461051a93369101610860565b6105948580518381948a830196873781016024358a8201520388810184520182610a3d565b519020166108ab565b828460603660031901126102d8576105b3610845565b9160243567ffffffffffffffff8111610785576105d39036908601610860565b9360018060a01b039384821681526020966001885260ff858320541615610730576bffffffffffffffffffffffff8551898101908987833761062988828d8d82019060443590820152038d810184520182610a3d565b5190201696331560011715610724576106406108d8565b90601382019860898a2060ff86536035523060601b600152806015526055852099856035528a3b15610678575b8b8b8b8b5191168152f35b856089929394959697989b50f597881561071857918185939284938884527f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8d85015289840137870190348a5af1156106fe57507f09e48df7857bd0c1e0d31bb8a85d42cf1874817895f171c917f6ee2cea73ec20818692a3848080808080808061066d565b3d1561070d57503d81803e3d90fd5b63301164258252601cfd5b8363301164258652601cfd5b50632f6348368252601cfd5b845162461bcd60e51b8152908101889052602960248201527f4b65726e656c466163746f72793a20696d706c656d656e746174696f6e206e6f6044820152681d08185b1b1bddd95960ba1b6064820152608490fd5b8280fd5b83806003193601126102d85763389a75e1600c523381526202a30042016020600c2055337fdbf36a107da19e49527a7176a1babf963b4b0ff8cde35ee35d6cd8f1f9ac7e1d8280a280f35b91905060203660031901126107855782823563ffffffff8116809103610128576107fc61088e565b81546001600160a01b031693843b156107855760249084519586938492621cb65b60e51b845283015234905af19081156102db5750610839575080f35b61084290610a13565b80f35b600435906001600160a01b038216820361085b57565b600080fd5b9181601f8401121561085b5782359167ffffffffffffffff831161085b576020838186019501011161085b57565b638b78c6d81954330361089d57565b6382b429006000526004601cfd5b608960136108b76108d8565b012060ff6000536035523060601b6001526015526055600020906000603552565b604051903060701c1561097c57666052573d6000fd607b8301527f3d356020355560408036111560525736038060403d373d3d355af43d6000803e60748301527f3735a920a3ca505d382bbc545af43d6000803e6052573d6000fd5b3d6000f35b60548301527f14605757363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc60348301523060148301526c607f3d8160093d39f33d3d33738252565b66604c573d6000fd60758301527f3d3560203555604080361115604c5736038060403d373d3d355af43d6000803e606e8301527f3735a920a3ca505d382bbc545af43d6000803e604c573d6000fd5b3d6000f35b604e8301527f14605157363d3d37363d7f360894a13ba1a3210667c828492db98dca3e2076cc602e83015230600e8301526c60793d8160093d39f33d3d336d8252565b67ffffffffffffffff8111610a2757604052565b634e487b7160e01b600052604160045260246000fd5b90601f8019910116810190811067ffffffffffffffff821117610a2757604052560000000000000000000000009775137314fe595c943712b0b336327dfa80ae8a0000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789"; - - function deploy() internal returns (address) { - DeterministicDeploy.checkDeploy("factory", EXPECTED_KERNEL_FACTORY_ADDRESS, KERNEL_FACTORY_CODE); - return EXPECTED_KERNEL_FACTORY_ADDRESS; - } -} diff --git a/script/deterministic/Factory_old.s.sol b/script/deterministic/Factory_old.s.sol deleted file mode 100644 index 066e3004..00000000 --- a/script/deterministic/Factory_old.s.sol +++ /dev/null @@ -1,24 +0,0 @@ -pragma solidity ^0.8.0; - -import "./DeterministicDeploy.s.sol"; -import "forge-std/Script.sol"; - -contract Factory_old is Script { - address constant DEPLOYER = 0x7A0D94F55792C434d74a40883C6ed8545E406D12; - address constant EXPECTED_FACTORY = 0x5D006d3880645ec6e254E18C1F879DAC9Dd71A39; - address constant EXPECTED_ECDSA_FACTORY = 0xD49a72cb78C44c6bfbf0d471581B7635cF62E81e; - bytes constant FACTORY_BYTECODE = - hex"60e060405234801561001057600080fd5b50604051614de5380380614de583398101604081905261002f916100e1565b8060405161003c906100c7565b6001600160a01b039091168152602001604051809103906000f080158015610068573d6000803e3d6000fd5b506001600160a01b03166080526040518190610083906100d4565b6001600160a01b039091168152602001604051809103906000f0801580156100af573d6000803e3d6000fd5b506001600160a01b0390811660a0521660c052610111565b611b8380610abe83390190565b6127a48061264183390190565b6000602082840312156100f357600080fd5b81516001600160a01b038116811461010a57600080fd5b9392505050565b60805160a05160c051610957610167600039600060f101526000818160ca01528181610191015281816102c3015261033701526000818160610152818161016f015281816102a1015261031501526109576000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c8063037637aa1461005c5780631bb12e691461009f578063296601cd146100b25780636c2f70fd146100c5578063b0d691fe146100ec575b600080fd5b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200160405180910390f35b6100836100ad366004610471565b610113565b6100836100c0366004610471565b610243565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6100837f000000000000000000000000000000000000000000000000000000000000000081565b6000808585858560405160200161012d9493929190610508565b604051602081830303815290604052805190602001209050610237816040518060200161015990610464565b6020820181038252601f19601f820116604052507f0000000000000000000000000000000000000000000000000000000000000000897f00000000000000000000000000000000000000000000000000000000000000008a8a6040516024016101c5949392919061055e565b60408051601f19818403018152918152602080830180516001600160e01b031663cf7a1d7760e01b17905290516101fe939291016105b9565b60408051601f198184030181529082905261021c92916020016105fb565b60405160208183030381529060405280519060200120610426565b9150505b949350505050565b6000808585858560405160200161025d9493929190610508565b60405160208183030381529060405280519060200120905060006102f7826040518060200161028b90610464565b6020820181038252601f19601f820116604052507f00000000000000000000000000000000000000000000000000000000000000008a7f00000000000000000000000000000000000000000000000000000000000000008b8b6040516024016101c5949392919061055e565b90506001600160a01b0381163b1561031257915061023b9050565b817f0000000000000000000000000000000000000000000000000000000000000000887f0000000000000000000000000000000000000000000000000000000000000000898960405160240161036b949392919061055e565b60408051601f198184030181529181526020820180516001600160e01b031663cf7a1d7760e01b1790525161039f90610464565b6103aa9291906105b9565b8190604051809103906000f59050801580156103ca573d6000803e3d6000fd5b509250866001600160a01b0316836001600160a01b03167fa4ec333d142e947b3345528c6cbc210be703d984f8df2c3d589f2b3ea39f74378888886040516104149392919061062a565b60405180910390a35050949350505050565b600061043383833061043a565b9392505050565b6000604051836040820152846020820152828152600b8101905060ff815360559020949350505050565b6103088061064f83390190565b6000806000806060858703121561048757600080fd5b84356001600160a01b038116811461049e57600080fd5b9350602085013567ffffffffffffffff808211156104bb57600080fd5b818701915087601f8301126104cf57600080fd5b8135818111156104de57600080fd5b8860208285010111156104f057600080fd5b95986020929092019750949560400135945092505050565b6bffffffffffffffffffffffff198560601b16815282846014830137601492019182015260340192915050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6001600160a01b0385811682528416602082015260606040820181905260009061058b9083018486610535565b9695505050505050565b60005b838110156105b0578181015183820152602001610598565b50506000910152565b60018060a01b038316815260406020820152600082518060408401526105e6816060850160208701610595565b601f01601f1916919091016060019392505050565b6000835161060d818460208801610595565b835190830190610621818360208801610595565b01949350505050565b60408152600061063e604083018587610535565b905082602083015294935050505056fe6080604052604051610308380380610308833981016040819052610022916101be565b6001600160a01b0382166100965760405162461bcd60e51b815260206004820152603060248201527f4549503139363750726f78793a20696d706c656d656e746174696f6e2069732060448201526f746865207a65726f206164647265737360801b60648201526084015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc82815581511561017c576000836001600160a01b0316836040516100db919061028c565b600060405180830381855af49150503d8060008114610116576040519150601f19603f3d011682016040523d82523d6000602084013e61011b565b606091505b505090508061017a5760405162461bcd60e51b815260206004820152602560248201527f4549503139363750726f78793a20636f6e7374727563746f722063616c6c2066604482015264185a5b195960da1b606482015260840161008d565b505b5050506102a8565b634e487b7160e01b600052604160045260246000fd5b60005b838110156101b557818101518382015260200161019d565b50506000910152565b600080604083850312156101d157600080fd5b82516001600160a01b03811681146101e857600080fd5b60208401519092506001600160401b038082111561020557600080fd5b818501915085601f83011261021957600080fd5b81518181111561022b5761022b610184565b604051601f8201601f19908116603f0116810190838211818310171561025357610253610184565b8160405282815288602084870101111561026c57600080fd5b61027d83602083016020880161019a565b80955050505050509250929050565b6000825161029e81846020870161019a565b9190910192915050565b6052806102b66000396000f3fe60806040526000602d7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5490565b90503660008037600080366000845af43d6000803e808015604d573d6000f35b3d6000fd61016060405234801561001157600080fd5b50604051611b83380380611b8383398101604081905261003091610130565b604080518082018252600681526512d95c9b995b60d21b602080830191825283518085019094526005845264181718171960d91b908401528151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a0529192917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f61010f8184846040805160208101859052908101839052606081018290524660808201523060a082015260009060c0016040516020818303038152906040528051906020012090509392505050565b6080523060c05261012052505050506001600160a01b031661014052610160565b60006020828403121561014257600080fd5b81516001600160a01b038116811461015957600080fd5b9392505050565b60805160a05160c05160e0516101005161012051610140516119c26101c160003960008181610347015261050c015260006110a6015260006110f5015260006110d001526000611029015260006110530152600061107d01526119c26000f3fe6080604052600436106100745760003560e01c80634be5cd9f1161004e5780634be5cd9f146102e157806354fd4d5014610304578063b0d691fe14610335578063cf7a1d77146103815761007b565b806306fdde03146102325780631626ba7e1461027a5780633a871cdd146102b35761007b565b3661007b57005b3080546001600160a01b03167f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81815560006100b56103a1565b6001015460405163064acaab60e11b8152600160501b9091046001600160a01b031691508190630c959556906100f290600288019060040161117d565b600060405180830381600087803b15801561010c57600080fd5b505af1158015610120573d6000803e3d6000fd5b50505050600061012d3090565b600101546001600160a01b0316905080156101a45760405163064acaab60e11b81526001600160a01b03821690630c9595569061017190600330019060040161117d565b600060405180830381600087803b15801561018b57600080fd5b505af115801561019f573d6000803e3d6000fd5b505050505b600080856001600160a01b03166000366040516101c2929190611208565b600060405180830381855af49150503d80600081146101fd576040519150601f19603f3d011682016040523d82523d6000602084013e610202565b606091505b50915091508181906102305760405162461bcd60e51b8152600401610227919061125e565b60405180910390fd5b005b34801561023e57600080fd5b506102646040518060400160405280600681526020016512d95c9b995b60d21b81525081565b604051610271919061125e565b60405180910390f35b34801561028657600080fd5b5061029a6102953660046112ba565b6103d5565b6040516001600160e01b03199091168152602001610271565b3480156102bf57600080fd5b506102d36102ce366004611306565b6104ff565b604051908152602001610271565b3480156102ed57600080fd5b506102f661084f565b60405161027192919061135a565b34801561031057600080fd5b5061026460405180604001604052806005815260200164181718171960d91b81525081565b34801561034157600080fd5b506103697f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610271565b34801561038d57600080fd5b5061023061039c3660046113ae565b6108f8565b6000806103cf60017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9611429565b92915050565b60008061044e6103e36103a1565b600101600a9054906101000a90046001600160a01b031663333daf9260e01b87878760405160240161041793929190611465565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152610a63565b9150506000818060200190518101906104679190611488565b9050600061047482610ab8565b905042816020015165ffffffffffff16111561049e57506001600160e01b031992506104f8915050565b42816040015165ffffffffffff1610156104c657506001600160e01b031992506104f8915050565b80516001600160a01b0316156104ea57506001600160e01b031992506104f8915050565b50630b135d3f60e11b925050505b9392505050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146105795760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e74000000006044820152606401610227565b60006105896101408601866114a1565b610598916004916000916114e8565b6105a191611512565b905060006105ae8661160f565b90506000806105c060608901896114a1565b6105cf916004916000916114e8565b6105d891611512565b90506001600160e01b03198416600003610670576105f58861160f565b92506106056101408901896114a1565b6106139160049082906114e8565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408401526106556103a1565b60010154600160501b90046001600160a01b031691506107ad565b6001600160e01b03198416600160e11b036107a0576106936101408901896114a1565b6106a2916024916010916114e8565b6106ab9161171e565b60601c915036600081816106cc856106c76101408f018f6114a1565b610b29565b604051949d50929750909550935091506000906106fe90889063064acaab60e11b906104179089908990602401611751565b509050806107595760405162461bcd60e51b815260206004820152602260248201527f6163636f756e743a20656e61626c65206d6f646520656e61626c65206661696c604482015261195960f21b6064820152608401610227565b82828080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140890152506107ad9350505050565b60019450505050506104f8565b85156107ff57604051600090339088908381818185875af1925050503d80600081146107f5576040519150601f19603f3d011682016040523d82523d6000602084013e6107fa565b606091505b505050505b600061082283633a871cdd60e01b868b8b60405160240161041793929190611765565b915050610842868280602001905181019061083d9190611488565b610f33565b9998505050505050505050565b3080546002820180546001600160a01b039092169260609290919061087390611143565b80601f016020809104026020016040519081016040528092919081815260200182805461089f90611143565b80156108ec5780601f106108c1576101008083540402835291602001916108ec565b820191906000526020600020905b8154815290600101906020018083116108cf57829003601f168201915b50505050509150509091565b60006109026103a1565b6001810154909150600160501b90046001600160a01b0316156109675760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a6564000000006044820152606401610227565b6001810180547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b03881602179055833080546001600160a01b0319166001600160a01b0392909216919091179055828230600201916109d49190836118a2565b5060006109f686630c95955660e01b8686604051602401610417929190611751565b50905080610a5b5760405162461bcd60e51b815260206004820152602c60248201527f6163636f756e743a20656e61626c65206661696c65642077697468206465666160448201526b3ab63a3b30b634b230ba37b960a11b6064820152608401610227565b505050505050565b600060606000808451602086016000885af260405160203d0181016040523d81523d6000602083013e90925090508082610ab05760405162461bcd60e51b8152600401610227919061125e565b509250929050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff8116600003610af4575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b60003681818180610b3e60586038898b6114e8565b610b4791611963565b905087605888610b578483611981565b92610b64939291906114e8565b909550935060008888610b78846058611981565b90610b84856078611981565b92610b91939291906114e8565b610b9a91611963565b60001c90506000610c7b7f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c600490602492610bda939291906114e8565b610be391611963565b60001c8d8d602490603892610bfa939291906114e8565b610c039161171e565b60601c8b8b604051610c16929190611208565b604051908190038120610c6095949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b60405160208183030381529060405280519060200120610fce565b90506000610cea610c8a6103a1565b60010154600160501b90046001600160a01b031663199ed7c960e11b848e8e610cb48a6078611981565b9089610cc18c6078611981565b610ccb9190611981565b92610cd8939291906114e8565b60405160240161041793929190611465565b915050610d3a81806020019051810190610d049190611488565b60a06bffffffffffffffffffffffff8016901b8d8d600490602492610d2b939291906114e8565b610d3491611963565b16610f33565b98508a8a84610d4a876078611981565b610d549190611981565b610d5f9282906114e8565b9550955060405180608001604052808c8c600490600a92610d82939291906114e8565b610d8b91611994565b60d01c65ffffffffffff1681526020018c8c600a90601092610daf939291906114e8565b610db891611994565b60d01c65ffffffffffff1681526020018c8c602490603892610ddc939291906114e8565b610de59161171e565b60601c6001600160a01b031681526020018c8c601090602492610e0a939291906114e8565b610e139161171e565b60601c9052610e206103a1565b6001600160e01b03198e166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166bffffffffffffffffffffffff199094169390931766010000000000009190941602929092176bffffffffffffffffffffffff16600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055610ecb602460108c8e6114e8565b610ed49161171e565b60013090810180546001600160a01b03191660609390931c92909217909155600301610f01888a836118a2565b50888b60588c610f118883611981565b92610f1e939291906114e8565b98509850985050505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614610f56575060016103cf565b60a083811c9060d085811c9185901c9085901c65ffffffffffff8083169085161015610f80578193505b8065ffffffffffff168365ffffffffffff161115610f9c578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006103cf610fdb61101c565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801561107557507f000000000000000000000000000000000000000000000000000000000000000046145b1561109f57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b600181811c9082168061115757607f821691505b60208210810361117757634e487b7160e01b600052602260045260246000fd5b50919050565b600060208083526000845461119181611143565b808487015260406001808416600081146111b257600181146111cc576111fa565b60ff1985168984015283151560051b8901830195506111fa565b896000528660002060005b858110156111f25781548b82018601529083019088016111d7565b8a0184019650505b509398975050505050505050565b8183823760009101908152919050565b6000815180845260005b8181101561123e57602081850181015186830182015201611222565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006104f86020830184611218565b60008083601f84011261128357600080fd5b50813567ffffffffffffffff81111561129b57600080fd5b6020830191508360208285010111156112b357600080fd5b9250929050565b6000806000604084860312156112cf57600080fd5b83359250602084013567ffffffffffffffff8111156112ed57600080fd5b6112f986828701611271565b9497909650939450505050565b60008060006060848603121561131b57600080fd5b833567ffffffffffffffff81111561133257600080fd5b8401610160818703121561134557600080fd5b95602085013595506040909401359392505050565b6001600160a01b038316815260406020820181905260009061137e90830184611218565b949350505050565b6001600160a01b038116811461139b57600080fd5b50565b80356113a981611386565b919050565b600080600080606085870312156113c457600080fd5b84356113cf81611386565b935060208501356113df81611386565b9250604085013567ffffffffffffffff8111156113fb57600080fd5b61140787828801611271565b95989497509550505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156103cf576103cf611413565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061147f60408301848661143c565b95945050505050565b60006020828403121561149a57600080fd5b5051919050565b6000808335601e198436030181126114b857600080fd5b83018035915067ffffffffffffffff8211156114d357600080fd5b6020019150368190038213156112b357600080fd5b600080858511156114f857600080fd5b8386111561150557600080fd5b5050820193919092039150565b6001600160e01b0319813581811691600485101561153a5780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b604051610160810167ffffffffffffffff8111828210171561157c5761157c611542565b60405290565b600082601f83011261159357600080fd5b813567ffffffffffffffff808211156115ae576115ae611542565b604051601f8301601f19908116603f011681019082821181831017156115d6576115d6611542565b816040528381528660208588010111156115ef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561162257600080fd5b61162a611558565b6116338361139e565b815260208301356020820152604083013567ffffffffffffffff8082111561165a57600080fd5b61166636838701611582565b6040840152606085013591508082111561167f57600080fd5b61168b36838701611582565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e084015261010091508185013582840152610120915081850135818111156116db57600080fd5b6116e736828801611582565b83850152506101409150818501358181111561170257600080fd5b61170e36828801611582565b8385015250505080915050919050565b6bffffffffffffffffffffffff19813581811691601485101561153a5760149490940360031b84901b1690921692915050565b60208152600061137e60208301848661143c565b6060815261177f6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526117a76101c0850183611218565b91506060870151605f19808685030160c08701526117c58483611218565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a01526118218787611218565b9650808c0151955050505080868503016101a087015250506118438282611218565b602085019690965250505060400152919050565b601f82111561189d57600081815260208120601f850160051c8101602086101561187e5750805b601f850160051c820191505b81811015610a5b5782815560010161188a565b505050565b67ffffffffffffffff8311156118ba576118ba611542565b6118ce836118c88354611143565b83611857565b6000601f84116001811461190257600085156118ea5750838201355b600019600387901b1c1916600186901b17835561195c565b600083815260209020601f19861690835b828110156119335786850135825560209485019460019092019101611913565b50868210156119505760001960f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b803560208310156103cf57600019602084900360031b1b1692915050565b808201808211156103cf576103cf611413565b6001600160d01b0319813581811691600685101561153a5760069490940360031b84901b1690921692915050566101606040523480156200001257600080fd5b50604051620027a4380380620027a483398101604081905262000035916200018e565b604080518082018252600681526512d95c9b995b60d21b6020808301918252835180850185526005815264181718171960d91b908201529151902060e08190527fb30367effb941b728181f67f3bd24a38a4fff408ee7fb3b074425c9fb5e9be746101008190524660a081815285517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818701819052818801959095526060810193909352608080840192909252308382018190528651808503909201825260c09384019096528051940193909320909252919052610120526001600160a01b038116610140528060016200012962000158565b600101600a6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050620001e2565b6000806200018860017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9620001c0565b92915050565b600060208284031215620001a157600080fd5b81516001600160a01b0381168114620001b957600080fd5b9392505050565b818103818111156200018857634e487b7160e01b600052601160045260246000fd5b60805160a05160c05160e0516101005161012051610140516125286200027c60003960008181610135015281816104af015281816106ff015281816108d30152818161098301528181610e5a01528181610f72015281816110ae0152818161123201526113a901526000611a4501526000611a9401526000611a6f015260006119c8015260006119f201526000611a1c01526125286000f3fe6080604052600436106101235760003560e01c806354fd4d50116100a0578063bc197c8111610064578063bc197c81146104d1578063d087d28814610500578063d1f5789414610515578063d541622114610535578063f23a6e61146105555761012a565b806354fd4d501461040b57806355b14f501461043c57806357b750471461045c57806388e7fd0614610471578063b0d691fe1461049d5761012a565b80633659cfe6116100e75780633659cfe6146103105780633a871cdd146103305780633e1b08121461035e57806351166ba01461037e57806351945447146103eb5761012a565b806306fdde03146102165780630b3dc3541461025e578063150b7a021461028b5780631626ba7e146102d057806329f8b174146102f05761012a565b3661012a57005b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146101a75760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e740000000060448201526064015b60405180910390fd5b600080356001600160e01b031916905060006101c1610582565b6001600160e01b0319831660009081526002919091016020526040812054600160601b90046001600160a01b0316915036908037600080366000845af43d6000803e80801561020f573d6000f35b3d6000fd5b005b34801561022257600080fd5b506102486040518060400160405280600681526020016512d95c9b995b60d21b81525081565b6040516102559190611b28565b60405180910390f35b34801561026a57600080fd5b506102736105b6565b6040516001600160a01b039091168152602001610255565b34801561029757600080fd5b506102b76102a6366004611bab565b630a85bd0160e11b95945050505050565b6040516001600160e01b03199091168152602001610255565b3480156102dc57600080fd5b506102b76102eb366004611c1d565b6105d9565b3480156102fc57600080fd5b5061021461030b366004611c96565b6106f4565b34801561031c57600080fd5b5061021461032b366004611d30565b6108c8565b34801561033c57600080fd5b5061035061034b366004611d4d565b610976565b604051908152602001610255565b34801561036a57600080fd5b50610350610379366004611da0565b610e33565b34801561038a57600080fd5b5061039e610399366004611dc9565b610ecd565b60408051825165ffffffffffff908116825260208085015190911690820152828201516001600160a01b039081169282019290925260609283015190911691810191909152608001610255565b3480156103f757600080fd5b50610214610406366004611de4565b610f67565b34801561041757600080fd5b5061024860405180604001604052806005815260200164181718171960d91b81525081565b34801561044857600080fd5b50610214610457366004611e5b565b6110a3565b34801561046857600080fd5b506102b76111da565b34801561047d57600080fd5b506104866111f0565b60405165ffffffffffff9091168152602001610255565b3480156104a957600080fd5b506102737f000000000000000000000000000000000000000000000000000000000000000081565b3480156104dd57600080fd5b506102b76104ec366004611eda565b63bc197c8160e01b98975050505050505050565b34801561050c57600080fd5b50610350611213565b34801561052157600080fd5b50610214610530366004611e5b565b6112aa565b34801561054157600080fd5b50610214610550366004611dc9565b61139e565b34801561056157600080fd5b506102b7610570366004611f98565b63f23a6e6160e01b9695505050505050565b6000806105b060017f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9612029565b92915050565b60006105c0610582565b60010154600160501b90046001600160a01b0316919050565b6000806105e4610582565b6001015460405163199ed7c960e11b8152600160501b9091046001600160a01b03169063333daf929061061f90889088908890600401612065565b602060405180830381865afa15801561063c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106609190612088565b9050600061066d82611442565b905042816020015165ffffffffffff16111561069657506001600160e01b031991506106ed9050565b42816040015165ffffffffffff1610156106bd57506001600160e01b031991506106ed9050565b80516001600160a01b0316156106e057506001600160e01b031991506106ed9050565b50630b135d3f60e11b9150505b9392505050565b336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061072a57503330145b6107465760405162461bcd60e51b815260040161019e906120a1565b60405180608001604052808565ffffffffffff1681526020018465ffffffffffff168152602001876001600160a01b03168152602001866001600160a01b0316815250610791610582565b6001600160e01b031989166000908152600291909101602090815260409182902083518154928501518585015165ffffffffffff9283166001600160601b031990951694909417600160301b9290911691909102176001600160601b0316600160601b6001600160a01b0393841602178155606090930151600190930180546001600160a01b031916938216939093179092555163064acaab60e11b815290861690630c9595569061084990859085906004016120ee565b600060405180830381600087803b15801561086357600080fd5b505af1158015610877573d6000803e3d6000fd5b50506040516001600160a01b038089169350891691506001600160e01b03198a16907fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d32135390600090a450505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806108fe57503330145b61091a5760405162461bcd60e51b815260040161019e906120a1565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8181556040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a25050565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109f05760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279506f696e7400000000604482015260640161019e565b6000610a0061014086018661210a565b610a0f91600491600091612150565b610a189161217a565b9050610a22610582565b6001015460e01b81166001600160e01b03191615610a7a5760405162461bcd60e51b81526020600482015260156024820152741ad95c9b995b0e881b5bd91948191a5cd8589b1959605a1b604482015260640161019e565b6000610a8586612275565b9050600080610a97606089018961210a565b610aa691600491600091612150565b610aaf9161217a565b90506001600160e01b03198416600003610b4757610acc88612275565b9250610adc61014089018961210a565b610aea916004908290612150565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050610140840152610b2c610582565b60010154600160501b90046001600160a01b03169150610d59565b6001600160e01b03198416600160e01b03610c3d576000610b66610582565b6001600160e01b0319831660009081526002919091016020526040902060018101546001600160a01b03169350905082610bb957610ba2610582565b60010154600160501b90046001600160a01b031692505b610bc76101408a018a61210a565b610bd5916004908290612150565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506101408501525460d081901b6001600160d01b031916600160301b90910460a01b65ffffffffffff60a01b16179450610d59565b6001600160e01b03198416600160e11b03610d4c57610c6061014089018961210a565b610c6f91602491601091612150565b610c7891612383565b60601c91503660008181610c9985610c946101408f018f61210a565b6114b3565b60405163064acaab60e11b8152949d50929750909550935091506001600160a01b03871690630c95955690610cd490879087906004016120ee565b600060405180830381600087803b158015610cee57600080fd5b505af1158015610d02573d6000803e3d6000fd5b5050505081818080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505061014088015250610d5992505050565b60019450505050506106ed565b8515610dab57604051600090339088908381818185875af1925050503d8060008114610da1576040519150601f19603f3d011682016040523d82523d6000602084013e610da6565b606091505b505050505b610e2785836001600160a01b0316633a871cdd868b8b6040518463ffffffff1660e01b8152600401610ddf939291906123b1565b6020604051808303816000875af1158015610dfe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e229190612088565b611864565b98975050505050505050565b604051631aab3f0d60e11b81523060048201526001600160c01b03821660248201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015610ea9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105b09190612088565b604080516080810182526000808252602082018190529181018290526060810191909152610ef9610582565b6001600160e01b0319909216600090815260029290920160209081526040928390208351608081018552815465ffffffffffff8082168352600160301b820416938201939093526001600160a01b03600160601b909304831694810194909452600101541660608301525090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fdf5760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e7400000000604482015260640161019e565b600060606001836001811115610ff757610ff76124a3565b036110465761103c8786868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506118ff92505050565b909250905061108d565b611087878787878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061193592505050565b90925090505b8161109a57805160208201fd5b50505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806110d957503330145b6110f55760405162461bcd60e51b815260040161019e906120a1565b60006110ff610582565b60010154600160501b90046001600160a01b031690508361111e610582565b6001018054600160501b600160f01b031916600160501b6001600160a01b0393841602179055604051858216918316907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c90600090a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b600060405180830381600087803b1580156111bc57600080fd5b505af11580156111d0573d6000803e3d6000fd5b5050505050505050565b60006111e4610582565b6001015460e01b919050565b60006111fa610582565b60010154640100000000900465ffffffffffff16919050565b604051631aab3f0d60e11b8152306004820152600060248201819052907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906335567e1a90604401602060405180830381865afa158015611281573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a59190612088565b905090565b60006112b4610582565b6001810154909150600160501b90046001600160a01b0316156113195760405162461bcd60e51b815260206004820152601c60248201527f6163636f756e743a20616c726561647920696e697469616c697a656400000000604482015260640161019e565b600181018054600160501b600160f01b031916600160501b6001600160a01b038716908102919091179091556040516000907fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c908290a360405163064acaab60e11b81526001600160a01b03851690630c959556906111a290869086906004016120ee565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806113d457503330145b6113f05760405162461bcd60e51b815260040161019e906120a1565b806113f9610582565b600101805463ffffffff191660e09290921c9190911790554261141a610582565b60010160046101000a81548165ffffffffffff021916908365ffffffffffff16021790555050565b60408051606081018252600080825260208201819052918101919091528160a081901c65ffffffffffff811660000361147e575065ffffffffffff5b604080516060810182526001600160a01b03909316835260d09490941c602083015265ffffffffffff16928101929092525090565b600036818181806114c860586038898b612150565b6114d1916124b9565b9050876058886114e184836124d7565b926114ee93929190612150565b9095509350600088886115028460586124d7565b9061150e8560786124d7565b9261151b93929190612150565b611524916124b9565b60001c905060006116057f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641768c8c8c60049060249261156493929190612150565b61156d916124b9565b60001c8d8d60249060389261158493929190612150565b61158d91612383565b60601c8b8b6040516115a09291906124ea565b6040519081900381206115ea95949392916020019485526001600160e01b031993909316602085015260408401919091526001600160a01b03166060830152608082015260a00190565b6040516020818303038152906040528051906020012061196d565b90506116ed611612610582565b60010154600160501b90046001600160a01b031663333daf92838d8d6116398960786124d7565b90886116468b60786124d7565b61165091906124d7565b9261165d93929190612150565b6040518463ffffffff1660e01b815260040161167b93929190612065565b602060405180830381865afa158015611698573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116bc9190612088565b60a06001600160601b038016901b8c8c6004906024926116de93929190612150565b6116e7916124b9565b16611864565b97508989836116fd8660786124d7565b61170791906124d7565b611712928290612150565b6040805160808101909152919650945080611731600a60048d8f612150565b61173a916124fa565b60d01c81526020016117506010600a8d8f612150565b611759916124fa565b60d01c815260200161176f603860248d8f612150565b61177891612383565b60601c815260200161178e602460108d8f612150565b61179791612383565b60601c90526117a4610582565b6001600160e01b03198d166000908152600291909101602090815260409182902083518154928501519385015165ffffffffffff9182166001600160601b031990941693909317600160301b9190941602929092176001600160601b0316600160601b6001600160a01b0392831602178255606090920151600190910180546001600160a01b03191691909216179055878a60588b61184387836124d7565b9261185093929190612150565b975097509750505050939792965093509350565b6000816001600160a01b0316836001600160a01b031614611887575060016105b0565b60a083811c9060d085811c9185901c9085901c65ffffffffffff80831690851610156118b1578193505b8065ffffffffffff168365ffffffffffff1611156118cd578092505b60d08365ffffffffffff16901b60a08565ffffffffffff16901b886001600160a01b0316171794505050505092915050565b60006060600080845160208601875af491503d604051602082018101604052818152816000602083013e80925050509250929050565b6000606060008084516020860187895af191503d604051602082018101604052818152816000602083013e8092505050935093915050565b60006105b061197a6119bb565b8360405161190160f01b6020820152602281018390526042810182905260009060620160405160208183030381529060405280519060200120905092915050565b6000306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015611a1457507f000000000000000000000000000000000000000000000000000000000000000046145b15611a3e57507f000000000000000000000000000000000000000000000000000000000000000090565b50604080517f00000000000000000000000000000000000000000000000000000000000000006020808301919091527f0000000000000000000000000000000000000000000000000000000000000000828401527f000000000000000000000000000000000000000000000000000000000000000060608301524660808301523060a0808401919091528351808403909101815260c0909201909252805191012090565b6000815180845260005b81811015611b0857602081850181015186830182015201611aec565b506000602082860101526020601f19601f83011685010191505092915050565b6020815260006106ed6020830184611ae2565b6001600160a01b0381168114611b5057600080fd5b50565b8035611b5e81611b3b565b919050565b60008083601f840112611b7557600080fd5b5081356001600160401b03811115611b8c57600080fd5b602083019150836020828501011115611ba457600080fd5b9250929050565b600080600080600060808688031215611bc357600080fd5b8535611bce81611b3b565b94506020860135611bde81611b3b565b93506040860135925060608601356001600160401b03811115611c0057600080fd5b611c0c88828901611b63565b969995985093965092949392505050565b600080600060408486031215611c3257600080fd5b8335925060208401356001600160401b03811115611c4f57600080fd5b611c5b86828701611b63565b9497909650939450505050565b80356001600160e01b031981168114611b5e57600080fd5b803565ffffffffffff81168114611b5e57600080fd5b600080600080600080600060c0888a031215611cb157600080fd5b611cba88611c68565b96506020880135611cca81611b3b565b95506040880135611cda81611b3b565b9450611ce860608901611c80565b9350611cf660808901611c80565b925060a08801356001600160401b03811115611d1157600080fd5b611d1d8a828b01611b63565b989b979a50959850939692959293505050565b600060208284031215611d4257600080fd5b81356106ed81611b3b565b600080600060608486031215611d6257600080fd5b83356001600160401b03811115611d7857600080fd5b84016101608187031215611d8b57600080fd5b95602085013595506040909401359392505050565b600060208284031215611db257600080fd5b81356001600160c01b03811681146106ed57600080fd5b600060208284031215611ddb57600080fd5b6106ed82611c68565b600080600080600060808688031215611dfc57600080fd5b8535611e0781611b3b565b94506020860135935060408601356001600160401b03811115611e2957600080fd5b611e3588828901611b63565b909450925050606086013560028110611e4d57600080fd5b809150509295509295909350565b600080600060408486031215611e7057600080fd5b8335611e7b81611b3b565b925060208401356001600160401b03811115611c4f57600080fd5b60008083601f840112611ea857600080fd5b5081356001600160401b03811115611ebf57600080fd5b6020830191508360208260051b8501011115611ba457600080fd5b60008060008060008060008060a0898b031215611ef657600080fd5b8835611f0181611b3b565b97506020890135611f1181611b3b565b965060408901356001600160401b0380821115611f2d57600080fd5b611f398c838d01611e96565b909850965060608b0135915080821115611f5257600080fd5b611f5e8c838d01611e96565b909650945060808b0135915080821115611f7757600080fd5b50611f848b828c01611b63565b999c989b5096995094979396929594505050565b60008060008060008060a08789031215611fb157600080fd5b8635611fbc81611b3b565b95506020870135611fcc81611b3b565b9450604087013593506060870135925060808701356001600160401b03811115611ff557600080fd5b61200189828a01611b63565b979a9699509497509295939492505050565b634e487b7160e01b600052601160045260246000fd5b818103818111156105b0576105b0612013565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b83815260406020820152600061207f60408301848661203c565b95945050505050565b60006020828403121561209a57600080fd5b5051919050565b6020808252602d908201527f6163636f756e743a206e6f742066726f6d20656e747279706f696e74206f722060408201526c37bbb732b91037b91039b2b63360991b606082015260800190565b60208152600061210260208301848661203c565b949350505050565b6000808335601e1984360301811261212157600080fd5b8301803591506001600160401b0382111561213b57600080fd5b602001915036819003821315611ba457600080fd5b6000808585111561216057600080fd5b8386111561216d57600080fd5b5050820193919092039150565b6001600160e01b031981358181169160048510156121a25780818660040360031b1b83161692505b505092915050565b634e487b7160e01b600052604160045260246000fd5b60405161016081016001600160401b03811182821017156121e3576121e36121aa565b60405290565b600082601f8301126121fa57600080fd5b81356001600160401b0380821115612214576122146121aa565b604051601f8301601f19908116603f0116810190828211818310171561223c5761223c6121aa565b8160405283815286602085880101111561225557600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000610160823603121561228857600080fd5b6122906121c0565b61229983611b53565b81526020830135602082015260408301356001600160401b03808211156122bf57600080fd5b6122cb368387016121e9565b604084015260608501359150808211156122e457600080fd5b6122f0368387016121e9565b60608401526080850135608084015260a085013560a084015260c085013560c084015260e085013560e0840152610100915081850135828401526101209150818501358181111561234057600080fd5b61234c368288016121e9565b83850152506101409150818501358181111561236757600080fd5b612373368288016121e9565b8385015250505080915050919050565b6001600160601b031981358181169160148510156121a25760149490940360031b84901b1690921692915050565b606081526123cb6060820185516001600160a01b03169052565b60208401516080820152600060408501516101608060a08501526123f36101c0850183611ae2565b91506060870151605f19808685030160c08701526124118483611ae2565b9350608089015160e087015260a08901519150610100828188015260c08a01519250610120838189015260e08b0151935061014084818a0152828c0151868a0152818c0151955083898803016101808a015261246d8787611ae2565b9650808c0151955050505080868503016101a0870152505061248f8282611ae2565b602085019690965250505060400152919050565b634e487b7160e01b600052602160045260246000fd5b803560208310156105b057600019602084900360031b1b1692915050565b808201808211156105b0576105b0612013565b8183823760009101908152919050565b6001600160d01b031981358181169160068510156121a25760069490940360031b84901b1690921692915050560000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789"; - bytes constant ECDSA_FACTORY_BYTECODE = - hex"60e060405234801561001057600080fd5b5060405161048338038061048383398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161038a6100f9600039600060ca015260008181609001528181610188015261027201526000818160f101528181610153015261023d015261038a6000f3fe608060405234801561001057600080fd5b50600436106100575760003560e01c80630d253d761461005c5780633a5381b51461008b5780635fbfb9cf146100b2578063b0d691fe146100c5578063bc10273e146100ec575b600080fd5b61006f61006a3660046102d5565b610113565b6040516001600160a01b03909116815260200160405180910390f35b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f6100c03660046102d5565b6101fd565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b61006f7f000000000000000000000000000000000000000000000000000000000000000081565b60408051606084901b6bffffffffffffffffffffffff19166020820152815160148183030181526034820192839052631bb12e6960e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690631bb12e69906101b4907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b602060405180830381865afa1580156101d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101f59190610366565b949350505050565b60408051606084901b6bffffffffffffffffffffffff1916602082015281516014818303018152603482019283905263296601cd60e01b909252600091907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063296601cd9061029e907f00000000000000000000000000000000000000000000000000000000000000009085908890603801610301565b6020604051808303816000875af11580156101d1573d6000803e3d6000fd5b6001600160a01b03811681146102d257600080fd5b50565b600080604083850312156102e857600080fd5b82356102f3816102bd565b946020939093013593505050565b60018060a01b038416815260006020606081840152845180606085015260005b8181101561033d57868101830151858201608001528201610321565b506000608082860101526080601f19601f83011685010192505050826040830152949350505050565b60006020828403121561037857600080fd5b8151610383816102bd565b9392505050560000000000000000000000005d006d3880645ec6e254e18c1f879dac9dd71a39000000000000000000000000180d6465f921c7e0dea0040107d342c87455fff50000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789"; - - function run() external { - address caller = 0x9775137314fE595c943712B0b336327dfa80aE8A; - vm.startBroadcast(caller); - DEPLOYER.call(FACTORY_BYTECODE); - require(EXPECTED_FACTORY.code.length != 0); - DEPLOYER.call(ECDSA_FACTORY_BYTECODE); - require(EXPECTED_ECDSA_FACTORY.code.length != 0); - vm.stopBroadcast(); - } -} diff --git a/script/deterministic/Kernel2_2.s.sol b/script/deterministic/Kernel2_2.s.sol deleted file mode 100644 index a2b41d29..00000000 --- a/script/deterministic/Kernel2_2.s.sol +++ /dev/null @@ -1,18 +0,0 @@ -pragma solidity ^0.8.0; - -import "./DeterministicDeploy.s.sol"; - -library Kernel_2_2_Deploy { - address constant EXPECTED_KERNEL_2_2_ADDRESS = 0x0DA6a956B9488eD4dd761E59f52FDc6c8068E6B5; - bytes constant KERNEL_2_2_CODE = - hex"000000000000000000000000000000000000000000000000000000000000000061014034620001b757601f620021e238819003918201601f19168301916001600160401b03831184841017620001bc57808492602094604052833981010312620001b757516001600160a01b0381168103620001b757306080524660a05260a062000069620001d2565b600681526005602082016512d95c9b995b60d21b815260206200008b620001d2565b838152019264181719171960d91b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b031982541617905560405190611fef9283620001f3843960805183611a6a015260a05183611a8d015260c05183611aff015260e05183611b2501525182611a490152518181816104db0152818161079a015281816108a701528181610a3201528181610b5a01528181610d5401528181610e7501528181610f740152818161109e01528181611147015261148e0152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001bc5760405256fe6080604052600436101561001d575b366110815761001b611ece565b005b60003560e01c806306fdde031461018d5780630b3dc35414610188578063150b7a02146101835780631626ba7e1461017e57806329f8b17414610179578063333daf921461017457806334fcd5be1461016f5780633659cfe61461016a5780633a871cdd146101655780633e1b08121461016057806351166ba01461015b578063519454471461015657806354fd4d501461015157806355b14f501461014c57806357b750471461014757806384b0196e1461014257806388e7fd061461013d578063b0d691fe14610138578063bc197c8114610133578063d087d2881461012e578063d1f5789414610129578063d5416221146101245763f23a6e610361000e57610fef565b610f5d565b610ec1565b610e42565b610db3565b610d3e565b610d09565b610c61565b610c2a565b610b44565b610af0565b6109eb565b610922565b61085e565b61081c565b610776565b610693565b61060e565b610466565b610413565b610386565b610307565b6102d3565b600091031261019d57565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101cb57604052565b6101a2565b606081019081106001600160401b038211176101cb57604052565b608081019081106001600160401b038211176101cb57604052565b604081019081106001600160401b038211176101cb57604052565b90601f801991011681019081106001600160401b038211176101cb57604052565b6040519061024f826101eb565b565b6040519061016082018281106001600160401b038211176101cb57604052565b6040519061027e82610206565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b8481106102bf575050826000602080949584010152601f8019910116010190565b60208183018101518483018201520161029e565b3461019d57600036600319011261019d576103036102ef610271565b604051918291602083526020830190610293565b0390f35b3461019d57600036600319011261019d576020600080516020611fcf8339815191525460501c6040519060018060a01b03168152f35b6001600160a01b0381160361019d57565b359061024f8261033d565b9181601f8401121561019d578235916001600160401b03831161019d576020838186019501011161019d57565b3461019d57608036600319011261019d576103a260043561033d565b6103ad60243561033d565b6064356001600160401b03811161019d576103cc903690600401610359565b5050604051630a85bd0160e11b8152602090f35b90604060031983011261019d5760043591602435906001600160401b03821161019d5761040f91600401610359565b9091565b3461019d57602061042c610426366103e0565b91611b5b565b6040516001600160e01b03199091168152f35b600435906001600160e01b03198216820361019d57565b65ffffffffffff81160361019d57565b60c036600319011261019d5761047a61043f565b602435906104878261033d565b604435906104948261033d565b6064356104a081610456565b608435936104ad85610456565b60a4356001600160401b03811161019d576104cc903690600401610359565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610604575b6105f25784926105396105659261052a61051c610242565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261056087611049565b61172b565b1693843b1561019d576040519063064acaab60e11b8252818061058f6000998a94600484016117de565b038183895af180156105ed576105d4575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b806105e16105e7926101b8565b80610192565b386105a0565b611475565b604051637046c88d60e01b8152600490fd5b5030331415610504565b3461019d576020610627610621366103e0565b91611e13565b604051908152f35b9291926001600160401b0382116101cb5760405191610658601f8201601f191660200184610221565b82948184528183011161019d578281602093846000960137010152565b9080601f8301121561019d578160206106909335910161062f565b90565b60208060031936011261019d576001600160401b0360043581811161019d573660238201121561019d578060040135918083116101cb578260051b906040908151946106e187850187610221565b855285850191602480948601019436861161019d57848101935b86851061070b5761001b88611144565b843584811161019d5782016060602319823603011261019d57835191610730836101d0565b8782013561073d8161033d565b835260448201358b84015260648201359286841161019d576107678c94938a869536920101610675565b868201528152019401936106fb565b602036600319011261019d5760043561078e8161033d565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610812575b6105f257807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b50303314156107c3565b60031960603682011261019d57600435906001600160401b03821161019d5761016090823603011261019d576106276020916044359060243590600401611481565b3461019d57602036600319011261019d576004356001600160c01b0381169081900361019d57604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156105ed57610303916000916108f4575b506040519081529081906020820190565b610915915060203d811161091b575b61090d8183610221565b810190611396565b386108e3565b503d610903565b3461019d57602036600319011261019d5761030361096761094161043f565b60006060604051610951816101eb565b8281528260208201528260408201520152611049565b60405190610974826101eb565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b608036600319011261019d57600435610a038161033d565b6044356001600160401b03811161019d57610a22903690600401610675565b90606435600281101561019d57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ac5575b80610ab0575b6105f257610a75816110fa565b610a9e576000828193926020839451920190602435905af13d82803e15610a9a573d90f35b3d90fd5b6040516367ce775960e01b8152600490fd5b50610ac0610abc611c13565b1590565b610a68565b5030331415610a62565b60405190610adc82610206565b6005825264181719171960d91b6020830152565b3461019d57600036600319011261019d576103036102ef610acf565b90604060031983011261019d57600435610b258161033d565b91602435906001600160401b03821161019d5761040f91600401610359565b610b4d36610b0c565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c20575b6105f25780600080516020611fcf8339815191525460501c1691610ba681611eff565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c1c578385610bfa819593829463064acaab60e11b8452600484016117de565b03925af180156105ed57610c0c575080f35b806105e1610c19926101b8565b80f35b8380fd5b5030331415610b83565b3461019d57600036600319011261019d576020600080516020611fcf8339815191525460e01b6040519063ffffffff60e01b168152f35b3461019d57600036600319011261019d57610cb7610c7d610271565b610c85610acf565b90604051928392600f60f81b8452610ca960209360e08587015260e0860190610293565b908482036040860152610293565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cf257505050500390f35b835185528695509381019392810192600101610ce3565b3461019d57600036600319011261019d576020600080516020611fcf8339815191525465ffffffffffff60405191831c168152f35b3461019d57600036600319011261019d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f8401121561019d578235916001600160401b03831161019d576020808501948460051b01011161019d57565b3461019d5760a036600319011261019d57610dcf60043561033d565b610dda60243561033d565b6001600160401b0360443581811161019d57610dfa903690600401610d83565b505060643581811161019d57610e14903690600401610d83565b505060843590811161019d57610e2e903690600401610359565b505060405163bc197c8160e01b8152602090f35b3461019d57600036600319011261019d57604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156105ed57610303916000916108f457506040519081529081906020820190565b610eca36610b0c565b600080516020611fcf83398151915254919290916001600160a01b03919060501c8216610f4c57610efa81611eff565b1691823b1561019d57610f2f926000928360405180968195829463064acaab60e11b84526020600485015260248401916117bd565b03925af180156105ed57610f3f57005b806105e161001b926101b8565b60405162dc149f60e41b8152600490fd5b602036600319011261019d57610f7161043f565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610fe5575b6105f257600080516020611fcf83398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415610fa4565b3461019d5760a036600319011261019d5761100b60043561033d565b61101660243561033d565b6084356001600160401b03811161019d57611035903690600401610359565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061109781356001600160e01b031916611049565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110eb575b6105f257818091368280378136915af43d82803e15610a9a573d90f35b506110f4611c13565b156110ce565b6002111561110457565b634e487b7160e01b600052602160045260246000fd5b805182101561112e5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806111d1575b6105f25780519060005b82811061118d57505050565b60008061119a838561111a565b5180516001600160a01b03166020916040838201519101519283519301915af13d6000803e156111cc57600101611181565b3d6000fd5b506111dd610abc611c13565b611177565b9060041161019d5790600490565b909291928360041161019d57831161019d57600401916003190190565b9060241161019d5760100190601490565b9060581161019d5760380190602090565b9060241161019d5760040190602090565b9060381161019d5760240190601490565b90600a1161019d5760040190600690565b9060101161019d57600a0190600690565b9093929384831161019d57841161019d578101920390565b6001600160e01b031990358181169392600481106112a857505050565b60040360031b82901b16169150565b91906101608382031261019d576112cc610251565b926112d68161034e565b8452602081013560208501526040810135916001600160401b039283811161019d5781611304918401610675565b6040860152606082013583811161019d5781611321918401610675565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e086015261010080830135908601526101208083013584811161019d5782611373918501610675565b90860152610140928383013590811161019d576113909201610675565b90830152565b9081602091031261019d575190565b606080825282516001600160a01b0316908201529193929160409161146b9060208101516080840152838101516113ea610160918260a08701526101c0860190610293565b9061145861140a606085015193605f1994858983030160c08a0152610293565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b0152870151908901528501518488830301610180890152610293565b92015190848303016101a0850152610293565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b039392917f00000000000000000000000000000000000000000000000000000000000000008516330361169f576004948535928361014481013501918760248401930135946114e06114da87866111e2565b9061128b565b926001600160e01b031980851691821561167c576114ff9036906112b7565b94611519600080516020611fcf8339815191525460e01b90565b1616156115315760405163fc2f51c560e01b81528a90fd5b97989697600160e01b810361162b575090602095966115bb61158961157061156b6114da87606460009901350160248782013591016111e2565b611049565b6001810154909a9081906001600160a01b0316986111f0565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617995b8b61161d575b369161062f565b6101408501526115df604051998a9788968794633a871cdd60e01b865285016113a5565b0393165af19081156105ed57610690926000926115fd575b50611f4c565b61161691925060203d811161091b5761090d8183610221565b90386115f7565b348080808f335af1506115b4565b9095939190600160e11b0361166f576116656115bb946000936116606114da8a606460209c01350160248d82013591016111e2565b6117ef565b91999296916115ae565b5050505050505050600190565b9697505050505050506106909394508215611d47573434343486335af150611d47565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff1990358181169392601481106116d357505050565b60140360031b82901b16169150565b3590602081106116f0575090565b6000199060200360031b1b1690565b6001600160d01b0319903581811693926006811061171c57505050565b60060360031b82901b16169150565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b90602091808252806000848401376000828201840152601f01601f1916010190565b908060209392818452848401376000828201840152601f01601f1916010190565b9160206106909381815201916117bd565b91906117fb828261120d565b611804916116b1565b60601c93611812838361121e565b61181b916116e2565b605883016078820194858360580190611835918388611273565b61183e916116e2565b611848828761122f565b611851916116e2565b61185b8388611240565b611864916116b1565b60601c61187236878761062f565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641769381019384526001600160e01b03198e169181019190915260608101949094526001600160a01b0392909216608084015260a080840192909252908252906118e860c082610221565b5190206118f490611a47565b9084019660788801611907918489611273565b9061191192611e13565b61191b828761122f565b6001600160a01b03199161192f91906116e2565b1661193991611f4c565b9660788688010196820360771901956119528382611251565b61195b916116ff565b60d01c926119698183611262565b611972916116ff565b60d01c916119808282611240565b611989916116b1565b60601c916119969161120d565b61199f916116b1565b60601c916119ab610242565b65ffffffffffff909516855265ffffffffffff1660208501526001600160a01b031660408401526001600160a01b031660608301526119e990611049565b906119f39161172b565b6001600160a01b03871691823b1561019d57611a29926000928360405180968195829463064acaab60e11b8452600484016117de565b03925af180156105ed57611a3a5750565b806105e161024f926101b8565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611ad4575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611ab5565b90611b669291611e13565b65ffffffffffff808260a01c16908115600114611bd1575b428360d01c11611bc15742911610611bb4576001600160a01b0316611ba857630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b905080611b7e565b9081602091031261019d5751801515810361019d5790565b6001600160a01b0390911681526040602082018190526106909291019061179b565b611c1d3633611e7b565b611d4257611c366000356001600160e01b031916611049565b6001810154611c55906001600160a01b03165b6001600160a01b031690565b906001600160a01b03821615908115611d06575b8115611cdb575b5015611c7c5750600090565b60206040518092639ea9bd5960e01b82528180611c9d363360048401611bf1565b03915afa9081156105ed57600091611cb3575090565b610690915060203d8111611cd4575b611ccc8183610221565b810190611bd9565b503d611cc2565b54611cf5915065ffffffffffff165b65ffffffffffff1690565b65ffffffffffff4291161138611c70565b905065ffffffffffff611d26611cea835465ffffffffffff9060301c1690565b168015159081611d38575b5090611c69565b9050421138611d31565b600190565b9091611d5336836112b7565b610140928381013590601e198136030182121561019d5701938435946001600160401b03861161019d5760200193853603851361019d57611d9d6115b487611de5986020986111f0565b908301526000611dc7611c49600080516020611fcf8339815191525460501c60018060a01b031690565b9260405196879586948593633a871cdd60e01b8552600485016113a5565b03925af19081156105ed57600091611dfb575090565b610690915060203d811161091b5761090d8183610221565b600080516020611fcf833981519152546040805163199ed7c960e11b8152600481019390935260248301529092602092849260501c6001600160a01b03169183918291611e65916044840191906117bd565b03915afa9081156105ed57600091611dfb575090565b600080516020611fcf8339815191525460408051639ea9bd5960e01b81526001600160a01b039384166004820152602481019190915292602092849260501c169082908190611c9d90604483019061179b565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b600080516020611fcf83398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8082186001600160a01b031615600114611f67575050600190565b65ffffffffffff60a01b8181169265ffffffffffff60a01b1992831692811691908415611fc5575b81168015611fbe575b848110908518028085189414611fb6575b5081811190821802181790565b925038611fa9565b5080611f98565b93508093611f8f56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789"; - address constant EXPECTED_KERNEL_LITE_2_2_ADDRESS = 0xbEdb61Be086F3f15eE911Cc9AB3EEa945DEbFa96; - bytes constant KERNEL_LITE_2_2_CODE = - hex"0000000000000000000000000000000000000000000000000000000000000000610160346200021357601f6200230b38819003918201601f19168301916001600160401b0383118484101762000218578084926040948552833981010312620002135780516001600160a01b039182821682036200021357602001519182168092036200021357306080524660a05260a06200007a6200022e565b600681526005602082016512d95c9b995b60d21b815260206200009c6200022e565b838152019264181719171960d91b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220916101009283526101209182527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b03198254161790556101409081527fdea7fea882fba743201b2aeb1babf326b8944488db560784858525d123ee7e976001808060a01b0319825416179055604051916120bc93846200024f853960805184611b7c015260a05184611b9f015260c05184611c11015260e05184611c3701525183611b5b0152518281816104fb015281816107ba015281816108c701528181610a5201528181610b7301528181610d1201528181610e780152818161101c01528181611114015281816111c40152818161126d01526115c2015251818181610e160152610ed90152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620002185760405256fe6080604052600436101561001d575b366111a75761001b611e6b565b005b60003560e01c806306fdde03146101ad5780630b3dc354146101a8578063150b7a02146101a35780631626ba7e1461019e57806329f8b17414610199578063333daf921461019457806334fcd5be1461018f5780633659cfe61461018a5780633a871cdd146101855780633e1b08121461018057806351166ba01461017b578063519454471461017657806354fd4d501461017157806355b14f501461016c57806357b750471461016757806384b0196e1461016257806388e7fd061461015d578063b0d691fe14610158578063bc197c8114610153578063cdaea3ed1461014e578063d087d28814610149578063d1f5789414610144578063d54162211461013f578063f23a6e611461013a5763f2fde38b0361000e576110f1565b611097565b611005565b610ec4565b610e45565b610e00565b610d71565b610cfc565b610cc7565b610c1f565b610be8565b610b64565b610b10565b610a0b565b610942565b61087e565b61083c565b610796565b6106b3565b61062e565b610486565b610433565b6103a6565b610327565b6102f3565b60009103126101bd57565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101eb57604052565b6101c2565b606081019081106001600160401b038211176101eb57604052565b608081019081106001600160401b038211176101eb57604052565b604081019081106001600160401b038211176101eb57604052565b90601f801991011681019081106001600160401b038211176101eb57604052565b6040519061026f8261020b565b565b6040519061016082018281106001600160401b038211176101eb57604052565b6040519061029e82610226565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b8481106102df575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016102be565b346101bd5760003660031901126101bd5761032361030f610291565b6040519182916020835260208301906102b3565b0390f35b346101bd5760003660031901126101bd57602060008051602061207c8339815191525460501c6040519060018060a01b03168152f35b6001600160a01b038116036101bd57565b359061026f8261035d565b9181601f840112156101bd578235916001600160401b0383116101bd57602083818601950101116101bd57565b346101bd5760803660031901126101bd576103c260043561035d565b6103cd60243561035d565b6064356001600160401b0381116101bd576103ec903690600401610379565b5050604051630a85bd0160e11b8152602090f35b9060406003198301126101bd5760043591602435906001600160401b0382116101bd5761042f91600401610379565b9091565b346101bd57602061044c61044636610400565b91611c6d565b6040516001600160e01b03199091168152f35b600435906001600160e01b0319821682036101bd57565b65ffffffffffff8116036101bd57565b60c03660031901126101bd5761049a61045f565b602435906104a78261035d565b604435906104b48261035d565b6064356104c081610476565b608435936104cd85610476565b60a4356001600160401b0381116101bd576104ec903690600401610379565b9590946001600160a01b0393337f00000000000000000000000000000000000000000000000000000000000000008616141580610624575b6106125784926105596105859261054a61053c610262565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105808761116f565b611869565b1693843b156101bd576040519063064acaab60e11b825281806105af6000998a94600484016118d9565b038183895af1801561060d576105f4575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b80610601610607926101d8565b806101b2565b386105c0565b6115a9565b604051637046c88d60e01b8152600490fd5b5030331415610524565b346101bd57602061064761064136610400565b91611f94565b604051908152f35b9291926001600160401b0382116101eb5760405191610678601f8201601f191660200184610241565b8294818452818301116101bd578281602093846000960137010152565b9080601f830112156101bd578160206106b09335910161064f565b90565b6020806003193601126101bd576001600160401b036004358181116101bd57366023820112156101bd578060040135918083116101eb578260051b9060409081519461070187850187610241565b85528585019160248094860101943686116101bd57848101935b86851061072b5761001b8861126a565b84358481116101bd578201606060231982360301126101bd57835191610750836101f0565b8782013561075d8161035d565b835260448201358b8401526064820135928684116101bd576107878c94938a869536920101610695565b8682015281520194019361071b565b60203660031901126101bd576004356107ae8161035d565b6001600160a01b0390337f00000000000000000000000000000000000000000000000000000000000000008316141580610832575b61061257807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b50303314156107e3565b6003196060368201126101bd57600435906001600160401b0382116101bd576101609082360301126101bd5761064760209160443590602435906004016115b5565b346101bd5760203660031901126101bd576004356001600160c01b038116908190036101bd57604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060d5761032391600091610914575b506040519081529081906020820190565b610935915060203d811161093b575b61092d8183610241565b8101906114ca565b38610903565b503d610923565b346101bd5760203660031901126101bd5761032361098761096161045f565b600060606040516109718161020b565b828152826020820152826040820152015261116f565b604051906109948261020b565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b60803660031901126101bd57600435610a238161035d565b6044356001600160401b0381116101bd57610a42903690600401610695565b9060643560028110156101bd57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610ae5575b80610ad0575b61061257610a9581611220565b610abe576000828193926020839451920190602435905af13d82803e15610aba573d90f35b3d90fd5b6040516367ce775960e01b8152600490fd5b50610ae0610adc611d3c565b1590565b610a88565b5030331415610a82565b60405190610afc82610226565b6005825264181719171960d91b6020830152565b346101bd5760003660031901126101bd5761032361030f610aef565b9060406003198301126101bd57600435610b458161035d565b91602435906001600160401b0382116101bd5761042f91600401610379565b610b6d36610b2c565b505050337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610bde575b6106125760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b5c1b195b595b9d1959608a1b6044820152606490fd5b5030331415610ba3565b346101bd5760003660031901126101bd57602060008051602061207c8339815191525460e01b6040519063ffffffff60e01b168152f35b346101bd5760003660031901126101bd57610c75610c3b610291565b610c43610aef565b90604051928392600f60f81b8452610c6760209360e08587015260e08601906102b3565b9084820360408601526102b3565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cb057505050500390f35b835185528695509381019392810192600101610ca1565b346101bd5760003660031901126101bd57602060008051602061207c8339815191525465ffffffffffff60405191831c168152f35b346101bd5760003660031901126101bd576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b9181601f840112156101bd578235916001600160401b0383116101bd576020808501948460051b0101116101bd57565b346101bd5760a03660031901126101bd57610d8d60043561035d565b610d9860243561035d565b6001600160401b036044358181116101bd57610db8903690600401610d41565b50506064358181116101bd57610dd2903690600401610d41565b50506084359081116101bd57610dec903690600401610379565b505060405163bc197c8160e01b8152602090f35b346101bd5760003660031901126101bd576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101bd5760003660031901126101bd57604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa801561060d576103239160009161091457506040519081529081906020820190565b610ecd36610b2c565b916001600160a01b03907f0000000000000000000000000000000000000000000000000000000000000000821690821603610fb55760008051602061209c8339815191525416610f6457610f30610f2a61001b93610f3693611308565b906117ef565b60601c90565b60008051602061209c83398151915280546001600160a01b0319166001600160a01b03909216919091179055565b60405162461bcd60e51b8152602060048201526024808201527f4b65726e656c4c69746545434453413a20616c726561647920696e697469616c6044820152631a5e995960e21b6064820152608490fd5b60405162461bcd60e51b815260206004820152602260248201527f4b65726e656c4c69746545434453413a20696e76616c69642076616c6964617460448201526137b960f11b6064820152608490fd5b60203660031901126101bd5761101961045f565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614158061108d575b6106125760008051602061207c83398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b503033141561104c565b346101bd5760a03660031901126101bd576110b360043561035d565b6110be60243561035d565b6084356001600160401b0381116101bd576110dd903690600401610379565b505060405163f23a6e6160e01b8152602090f35b60203660031901126101bd576004356111098161035d565b6001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580611165575b6106125760008051602061209c83398151915280546001600160a01b03191691909216179055005b503033141561113d565b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b60006111bd81356001600160e01b03191661116f565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611211575b61061257818091368280378136915af43d82803e15610aba573d90f35b5061121a611d3c565b156111f4565b6002111561122a57565b634e487b7160e01b600052602160045260246000fd5b80518210156112545760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806112f7575b6106125780519060005b8281106112b357505050565b6000806112c08385611240565b5180516001600160a01b03166020916040838201519101519283519301915af13d6000803e156112f2576001016112a7565b3d6000fd5b50611303610adc611d3c565b61129d565b906014116101bd5790601490565b906004116101bd5790600490565b90929192836004116101bd5783116101bd57600401916003190190565b906024116101bd5760100190601490565b906058116101bd5760380190602090565b906024116101bd5760040190602090565b906038116101bd5760240190601490565b90600a116101bd5760040190600690565b906010116101bd57600a0190600690565b909392938483116101bd5784116101bd578101920390565b6001600160e01b031990358181169392600481106113dc57505050565b60040360031b82901b16169150565b9190610160838203126101bd57611400610271565b9261140a8161036e565b8452602081013560208501526040810135916001600160401b03928381116101bd5781611438918401610695565b604086015260608201358381116101bd5781611455918401610695565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e08601526101008083013590860152610120808301358481116101bd57826114a7918501610695565b9086015261014092838301359081116101bd576114c49201610695565b90830152565b908160209103126101bd575190565b606080825282516001600160a01b0316908201529193929160409161159f90602081015160808401528381015161151e610160918260a08701526101c08601906102b3565b9061158c61153e606085015193605f1994858983030160c08a01526102b3565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b01528701519089015285015184888303016101808901526102b3565b92015190848303016101a08501526102b3565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b039392917f0000000000000000000000000000000000000000000000000000000000000000851633036117dd5760049485359283610144810135019187602484019301359461161461160e8786611316565b906113bf565b926001600160e01b03198085169182156117b0576116339036906113eb565b9461164d60008051602061207c8339815191525460e01b90565b1616156116655760405163fc2f51c560e01b81528a90fd5b97989697600160e01b810361175f575090602095966116ef6116bd6116a461169f61160e8760646000990135016024878201359101611316565b61116f565b6001810154909a9081906001600160a01b031698611324565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617995b8b611751575b369161064f565b610140850152611713604051998a9788968794633a871cdd60e01b865285016114d9565b0393165af190811561060d576106b092600092611731575b50611ff9565b61174a91925060203d811161093b5761092d8183610241565b903861172b565b348080808f335af1506116e8565b9095939190600160e11b036117a3576117996116ef9460009361179461160e8a606460209c01350160248d8201359101611316565b611901565b91999296916116e2565b5050505050505050600190565b9750505050505050916106b0939450806117cb575b50611e9c565b3490349034903490335af150386117c5565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff19903581811693926014811061181157505050565b60140360031b82901b16169150565b35906020811061182e575090565b6000199060200360031b1b1690565b6001600160d01b0319903581811693926006811061185a57505050565b60060360031b82901b16169150565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b90918060409360208452816020850152848401376000828201840152601f01601f1916010190565b919061190d8282611341565b611916916117ef565b60601c936119248383611352565b61192d91611820565b6058830160788201948583605801906119479183886113a7565b61195091611820565b61195a8287611363565b61196391611820565b61196d8388611374565b611976916117ef565b60601c61198436878761064f565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641769381019384526001600160e01b03198e169181019190915260608101949094526001600160a01b0392909216608084015260a080840192909252908252906119fa60c082610241565b519020611a0690611b59565b9084019660788801611a199184896113a7565b90611a2392611f94565b611a2d8287611363565b6001600160a01b031991611a419190611820565b16611a4b91611ff9565b966078868801019682036077190195611a648382611385565b611a6d9161183d565b60d01c92611a7b8183611396565b611a849161183d565b60d01c91611a928282611374565b611a9b916117ef565b60601c91611aa891611341565b611ab1916117ef565b60601c91611abd610262565b65ffffffffffff909516855265ffffffffffff1660208501526001600160a01b031660408401526001600160a01b03166060830152611afb9061116f565b90611b0591611869565b6001600160a01b03871691823b156101bd57611b3b926000928360405180968195829463064acaab60e11b8452600484016118d9565b03925af1801561060d57611b4c5750565b8061060161026f926101d8565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611be6575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611bc7565b90611c789291611f94565b65ffffffffffff808260a01c16908115600114611ce3575b428360d01c11611cd35742911610611cc6576001600160a01b0316611cba57630b135d3f60e11b90565b6001600160e01b031990565b506001600160e01b031990565b506001600160e01b031992915050565b905080611c90565b908160209103126101bd575180151581036101bd5790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b60008051602061209c833981519152546001600160a01b039081163314611e6557611d726000356001600160e01b03191661116f565b60018101546001600160a01b031691821615908115611e29575b8115611dfe575b5015611d9f5750600090565b60206040518092639ea9bd5960e01b82528180611dc0363360048401611d03565b03915afa90811561060d57600091611dd6575090565b6106b0915060203d8111611df7575b611def8183610241565b810190611ceb565b503d611de5565b54611e18915065ffffffffffff165b65ffffffffffff1690565b65ffffffffffff4291161138611d93565b905065ffffffffffff611e49611e0d835465ffffffffffff9060301c1690565b168015159081611e5b575b5090611d8c565b9050421138611e54565b50600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b90611ecc906020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042090565b9061014081013590601e19813603018212156101bd5701908135916001600160401b0383116101bd576020019180360383136101bd576116e881611f1392611f1995611324565b90611f45565b60008051602061209c833981519152546001600160a01b03908116911603611f4057600090565b600190565b6001608060006041602094969596604080519880519285526060810151851a88528781015182520151606052145afa51913d15611f86576000606052604052565b638baa579f6000526004601cfd5b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c600420611fcd9291611f139192369161064f565b60008051602061209c833981519152546001600160a01b03918216911614611ff457600190565b600090565b8082186001600160a01b031615600114612014575050600190565b65ffffffffffff60a01b8181169265ffffffffffff60a01b1992831692811691908415612072575b8116801561206b575b848110908518028085189414612063575b5081811190821802181790565b925038612056565b5080612045565b9350809361203c56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9dea7fea882fba743201b2aeb1babf326b8944488db560784858525d123ee7e970000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789000000000000000000000000d9ab5096a832b9ce79914329daee236f8eea0390"; - - function deploy() internal returns (address, address) { - DeterministicDeploy.checkDeploy("Kernel 2.2", EXPECTED_KERNEL_2_2_ADDRESS, KERNEL_2_2_CODE); - DeterministicDeploy.checkDeploy("Kernel lite 2.2", EXPECTED_KERNEL_LITE_2_2_ADDRESS, KERNEL_LITE_2_2_CODE); - return (EXPECTED_KERNEL_2_2_ADDRESS, EXPECTED_KERNEL_LITE_2_2_ADDRESS); - } -} diff --git a/script/deterministic/Kernel2_3.s.sol b/script/deterministic/Kernel2_3.s.sol deleted file mode 100644 index fdac0b61..00000000 --- a/script/deterministic/Kernel2_3.s.sol +++ /dev/null @@ -1,19 +0,0 @@ -pragma solidity ^0.8.0; - -import "./DeterministicDeploy.s.sol"; - -library Kernel_2_3_Deploy { - address constant EXPECTED_KERNEL_2_3_ADDRESS = 0xD3F582F6B4814E989Ee8E96bc3175320B5A540ab; - bytes constant KERNEL_2_3_CODE = - hex"000000000000000000000000000000000000000000000000000000000000000061014034620001be57601f6200238b38819003918201601f19168301916001600160401b03831184841017620001c357808492602094604052833981010312620001be57516001600160a01b0381168103620001be57306080524660a05260a062000069620001d9565b600681526005602082016512d95c9b995b60d21b815260206200008b620001d9565b838152019264302e322e3360d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220906101009182526101209081527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b0319825416179055604051906121919283620001fa843960805183611b42015260a05183611b65015260c05183611bd7015260e05183611bfd01525182611b21015251818181610506015281816107c5015281816108d201528181610a5d01528181610b8501528181610d7f01528181610de901528181610f4d0152818161104c015281816111760152818161121f01526115660152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b03811183821017620001c35760405256fe6080604052600436101561001d575b366111595761001b612047565b005b60003560e01c806306fdde031461019d5780630b3dc35414610198578063150b7a02146101935780631626ba7e1461018e57806329f8b17414610189578063333daf921461018457806334fcd5be1461017f5780633659cfe61461017a5780633a871cdd146101755780633e1b08121461017057806351166ba01461016b578063519454471461016657806354fd4d501461016157806355b14f501461015c57806357b750471461015757806384b0196e1461015257806388e7fd061461014d578063b0d691fe14610148578063b68df16d14610143578063bc197c811461013e578063d087d28814610139578063d1f5789414610134578063d54162211461012f5763f23a6e610361000e576110c7565b611035565b610f99565b610f1a565b610e8b565b610dae565b610d69565b610d34565b610c8c565b610c55565b610b6f565b610b1b565b610a16565b61094d565b610889565b610847565b6107a1565b6106be565b610639565b610491565b61043e565b6103b1565b610332565b6102fe565b60009103126101ad57565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101db57604052565b6101b2565b606081019081106001600160401b038211176101db57604052565b608081019081106001600160401b038211176101db57604052565b604081019081106001600160401b038211176101db57604052565b60c081019081106001600160401b038211176101db57604052565b90601f801991011681019081106001600160401b038211176101db57604052565b6040519061027a826101fb565b565b6040519061016082018281106001600160401b038211176101db57604052565b604051906102a982610216565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b8481106102ea575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016102c9565b346101ad5760003660031901126101ad5761032e61031a61029c565b6040519182916020835260208301906102be565b0390f35b346101ad5760003660031901126101ad5760206000805160206121718339815191525460501c6040519060018060a01b03168152f35b6001600160a01b038116036101ad57565b359061027a82610368565b9181601f840112156101ad578235916001600160401b0383116101ad57602083818601950101116101ad57565b346101ad5760803660031901126101ad576103cd600435610368565b6103d8602435610368565b6064356001600160401b0381116101ad576103f7903690600401610384565b5050604051630a85bd0160e11b8152602090f35b9060406003198301126101ad5760043591602435906001600160401b0382116101ad5761043a91600401610384565b9091565b346101ad5760206104576104513661040b565b91611c33565b6040516001600160e01b03199091168152f35b600435906001600160e01b0319821682036101ad57565b65ffffffffffff8116036101ad57565b60c03660031901126101ad576104a561046a565b602435906104b282610368565b604435906104bf82610368565b6064356104cb81610481565b608435936104d885610481565b60a4356001600160401b0381116101ad576104f7903690600401610384565b9590946001600160a01b0393337f0000000000000000000000000000000000000000000000000000000000000000861614158061062f575b61061d5784926105646105909261055561054761026d565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b038316606082015261058b87611121565b611803565b1693843b156101ad576040519063064acaab60e11b825281806105ba6000998a94600484016118b6565b038183895af18015610618576105ff575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061060c610612926101c8565b806101a2565b386105cb565b61154d565b604051637046c88d60e01b8152600490fd5b503033141561052f565b346101ad57602061065261064c3661040b565b91611f8c565b604051908152f35b9291926001600160401b0382116101db5760405191610683601f8201601f19166020018461024c565b8294818452818301116101ad578281602093846000960137010152565b9080601f830112156101ad578160206106bb9335910161065a565b90565b6020806003193601126101ad576001600160401b036004358181116101ad57366023820112156101ad578060040135918083116101db578260051b9060409081519461070c8785018761024c565b85528585019160248094860101943686116101ad57848101935b8685106107365761001b8861121c565b84358481116101ad578201606060231982360301126101ad5783519161075b836101e0565b8782013561076881610368565b835260448201358b8401526064820135928684116101ad576107928c94938a8695369201016106a0565b86820152815201940193610726565b60203660031901126101ad576004356107b981610368565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061083d575b61061d57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b50303314156107ee565b6003196060368201126101ad57600435906001600160401b0382116101ad576101609082360301126101ad576106526020916044359060243590600401611559565b346101ad5760203660031901126101ad576004356001600160c01b038116908190036101ad57604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156106185761032e9160009161091f575b506040519081529081906020820190565b610940915060203d8111610946575b610938818361024c565b81019061146e565b3861090e565b503d61092e565b346101ad5760203660031901126101ad5761032e61099261096c61046a565b6000606060405161097c816101fb565b8281528260208201528260408201520152611121565b6040519061099f826101fb565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b60803660031901126101ad57600435610a2e81610368565b6044356001600160401b0381116101ad57610a4d9036906004016106a0565b9060643560028110156101ad57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610af0575b80610adb575b61061d57610aa0816111d2565b610ac9576000828193926020839451920190602435905af13d82803e15610ac5573d90f35b3d90fd5b6040516367ce775960e01b8152600490fd5b50610aeb610ae7611d8c565b1590565b610a93565b5030331415610a8d565b60405190610b0782610216565b6005825264302e322e3360d81b6020830152565b346101ad5760003660031901126101ad5761032e61031a610afa565b9060406003198301126101ad57600435610b5081610368565b91602435906001600160401b0382116101ad5761043a91600401610384565b610b7836610b37565b90916001600160a01b03337f00000000000000000000000000000000000000000000000000000000000000008216141580610c4b575b61061d57806000805160206121718339815191525460501c1691610bd181612078565b1692836040519360009586947fa35f5cdc5fbabb614b4cd5064ce5543f43dc8fab0e4da41255230eb8aba2531c8680a3813b15610c47578385610c25819593829463064acaab60e11b8452600484016118b6565b03925af1801561061857610c37575080f35b8061060c610c44926101c8565b80f35b8380fd5b5030331415610bae565b346101ad5760003660031901126101ad5760206000805160206121718339815191525460e01b6040519063ffffffff60e01b168152f35b346101ad5760003660031901126101ad57610ce2610ca861029c565b610cb0610afa565b90604051928392600f60f81b8452610cd460209360e08587015260e08601906102be565b9084820360408601526102be565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610d1d57505050500390f35b835185528695509381019392810192600101610d0e565b346101ad5760003660031901126101ad5760206000805160206121718339815191525465ffffffffffff60405191831c168152f35b346101ad5760003660031901126101ad576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b60403660031901126101ad57600435610dc681610368565b6024356001600160401b0381116101ad57610de59036906004016106a0565b90337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610e51575b80610e40575b61061d5760008281939260208394519201905af43d82803e15610ac5573d90f35b50610e4c610ae7611d8c565b610e1f565b5030331415610e19565b9181601f840112156101ad578235916001600160401b0383116101ad576020808501948460051b0101116101ad57565b346101ad5760a03660031901126101ad57610ea7600435610368565b610eb2602435610368565b6001600160401b036044358181116101ad57610ed2903690600401610e5b565b50506064358181116101ad57610eec903690600401610e5b565b50506084359081116101ad57610f06903690600401610384565b505060405163bc197c8160e01b8152602090f35b346101ad5760003660031901126101ad57604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156106185761032e9160009161091f57506040519081529081906020820190565b610fa236610b37565b60008051602061217183398151915254919290916001600160a01b03919060501c821661102457610fd281612078565b1691823b156101ad57611007926000928360405180968195829463064acaab60e11b8452602060048501526024840191611895565b03925af180156106185761101757005b8061060c61001b926101c8565b60405162dc149f60e41b8152600490fd5b60203660031901126101ad5761104961046a565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806110bd575b61061d5760008051602061217183398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b503033141561107c565b346101ad5760a03660031901126101ad576110e3600435610368565b6110ee602435610368565b6084356001600160401b0381116101ad5761110d903690600401610384565b505060405163f23a6e6160e01b8152602090f35b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061116f81356001600160e01b031916611121565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806111c3575b61061d57818091368280378136915af43d82803e15610ac5573d90f35b506111cc611d8c565b156111a6565b600211156111dc57565b634e487b7160e01b600052602160045260246000fd5b80518210156112065760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806112a9575b61061d5780519060005b82811061126557505050565b60008061127283856111f2565b5180516001600160a01b03166020916040838201519101519283519301915af13d6000803e156112a457600101611259565b3d6000fd5b506112b5610ae7611d8c565b61124f565b906004116101ad5790600490565b90929192836004116101ad5783116101ad57600401916003190190565b906024116101ad5760100190601490565b906058116101ad5760380190602090565b906024116101ad5760040190602090565b906038116101ad5760240190601490565b90600a116101ad5760040190600690565b906010116101ad57600a0190600690565b909392938483116101ad5784116101ad578101920390565b6001600160e01b0319903581811693926004811061138057505050565b60040360031b82901b16169150565b9190610160838203126101ad576113a461027c565b926113ae81610379565b8452602081013560208501526040810135916001600160401b03928381116101ad57816113dc9184016106a0565b604086015260608201358381116101ad57816113f99184016106a0565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e08601526101008083013590860152610120808301358481116101ad578261144b9185016106a0565b9086015261014092838301359081116101ad5761146892016106a0565b90830152565b908160209103126101ad575190565b606080825282516001600160a01b031690820152919392916040916115439060208101516080840152838101516114c2610160918260a08701526101c08601906102be565b906115306114e2606085015193605f1994858983030160c08a01526102be565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b01528701519089015285015184888303016101808901526102be565b92015190848303016101a08501526102be565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b039392917f000000000000000000000000000000000000000000000000000000000000000085163303611777576004948535928361014481013501918760248401930135946115b86115b287866112ba565b90611363565b926001600160e01b0319808516918215611754576115d790369061138f565b946115f16000805160206121718339815191525460e01b90565b1616156116095760405163fc2f51c560e01b81528a90fd5b97989697600160e01b8103611703575090602095966116936116616116486116436115b287606460009901350160248782013591016112ba565b611121565b6001810154909a9081906001600160a01b0316986112c8565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617995b8b6116f5575b369161065a565b6101408501526116b7604051998a9788968794633a871cdd60e01b8652850161147d565b0393165af1908115610618576106bb926000926116d5575b506120ee565b6116ee91925060203d811161094657610938818361024c565b90386116cf565b348080808f335af15061168c565b9095939190600160e11b036117475761173d611693946000936117386115b28a606460209c01350160248d82013591016112ba565b6118c7565b9199929691611686565b5050505050505050600190565b9697505050505050506106bb9394508215611ec0573434343486335af150611ec0565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff1990358181169392601481106117ab57505050565b60140360031b82901b16169150565b3590602081106117c8575090565b6000199060200360031b1b1690565b6001600160d01b031990358181169392600681106117f457505050565b60060360031b82901b16169150565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b90602091808252806000848401376000828201840152601f01601f1916010190565b908060209392818452848401376000828201840152601f01601f1916010190565b9160206106bb938181520191611895565b91906118d382826112e5565b6118dc91611789565b60601c936118ea83836112f6565b6118f3916117ba565b60588301607882019485836058019061190d91838861134b565b611916916117ba565b6119208287611307565b611929916117ba565b6119338388611318565b61193c91611789565b60601c61194a36878761065a565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641769381019384526001600160e01b03198e169181019190915260608101949094526001600160a01b0392909216608084015260a080840192909252908252906119c060c08261024c565b5190206119cc90611b1f565b90840196607888016119df91848961134b565b906119e992611f8c565b6119f38287611307565b6001600160a01b031991611a0791906117ba565b16611a11916120ee565b966078868801019682036077190195611a2a8382611329565b611a33916117d7565b60d01c92611a41818361133a565b611a4a916117d7565b60d01c91611a588282611318565b611a6191611789565b60601c91611a6e916112e5565b611a7791611789565b60601c91611a8361026d565b65ffffffffffff909516855265ffffffffffff1660208501526001600160a01b031660408401526001600160a01b03166060830152611ac190611121565b90611acb91611803565b6001600160a01b03871691823b156101ad57611b01926000928360405180968195829463064acaab60e11b8452600484016118b6565b03925af1801561061857611b125750565b8061060c61027a926101c8565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611bac575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611b8d565b91611cf291611cf793611cdc611cea611c4a61029c565b611c52610afa565b906020815191012090602081519101206040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152611cb181610231565b51902092604051928391602083019586909160429261190160f01b8352600283015260228201520190565b03601f19810183528261024c565b519020611f8c565b6120c5565b9065ffffffffffff928342911611159283611d44575b505081611d32575b5015611d2657630b135d3f60e11b90565b6001600160e01b031990565b6001600160a01b031615905038611d15565b429116101591503880611d0d565b908160209103126101ad575180151581036101ad5790565b6001600160a01b0390911681526040602082018190526106bb92910190611873565b611d963633611ff4565b611ebb57611daf6000356001600160e01b031916611121565b6001810154611dce906001600160a01b03165b6001600160a01b031690565b906001600160a01b03821615908115611e7f575b8115611e54575b5015611df55750600090565b60206040518092639ea9bd5960e01b82528180611e16363360048401611d6a565b03915afa90811561061857600091611e2c575090565b6106bb915060203d8111611e4d575b611e45818361024c565b810190611d52565b503d611e3b565b54611e6e915065ffffffffffff165b65ffffffffffff1690565b65ffffffffffff4291161138611de9565b905065ffffffffffff611e9f611e63835465ffffffffffff9060301c1690565b168015159081611eb1575b5090611de2565b9050421138611eaa565b600190565b9091611ecc368361138f565b610140928381013590601e19813603018212156101ad5701938435946001600160401b0386116101ad576020019385360385136101ad57611f1661168c87611f5e986020986112c8565b908301526000611f40611dc26000805160206121718339815191525460501c60018060a01b031690565b9260405196879586948593633a871cdd60e01b85526004850161147d565b03925af190811561061857600091611f74575090565b6106bb915060203d811161094657610938818361024c565b600080516020612171833981519152546040805163199ed7c960e11b8152600481019390935260248301529092602092849260501c6001600160a01b03169183918291611fde91604484019190611895565b03915afa90811561061857600091611f74575090565b6000805160206121718339815191525460408051639ea9bd5960e01b81526001600160a01b039384166004820152602481019190915292602092849260501c169082908190611e16906044830190611873565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b60008051602061217183398151915280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff1660509290921b600160501b600160f01b0316919091179055565b8065ffffffffffff91828160a01c169283156001146120e6575b5060d01c92565b9250386120df565b8082186001600160a01b031615600114612109575050600190565b65ffffffffffff60a01b8181169265ffffffffffff60a01b1992831692811691908415612167575b81168015612160575b848110908518028085189414612158575b5081811190821802181790565b92503861214b565b508061213a565b9350809361213156fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd90000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789"; - - address constant EXPECTED_KERNEL_LITE_2_3_ADDRESS = 0x482EC42E88a781485E1B6A4f07a0C5479d183291; - bytes constant KERNEL_LITE_2_3_CODE = - hex"0000000000000000000000000000000000000000000000000000000000000000610160346200021a57601f620024b438819003918201601f19168301916001600160401b038311848410176200021f5780849260409485528339810103126200021a5780516001600160a01b039182821682036200021a57602001519182168092036200021a57306080524660a05260a06200007a62000235565b600681526005602082016512d95c9b995b60d21b815260206200009c62000235565b838152019264302e322e3360d81b845251902091208160c0528060e052604051917f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f83526020830152604082015246606082015230608082015220916101009283526101209182527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd96a010000000000000000000080600160f01b03198254161790556101409081527fdea7fea882fba743201b2aeb1babf326b8944488db560784858525d123ee7e976001808060a01b03198254161790556040519161225e938462000256853960805184611c54015260a05184611c77015260c05184611ce9015260e05184611d0f01525183611c33015251828181610526015281816107e5015281816108f201528181610a7d01528181610b9e01528181610d3d01528181610da701528181610f50015281816110f4015281816111ec0152818161129c01528181611345015261169a015251818181610eee0152610fb10152f35b600080fd5b634e487b7160e01b600052604160045260246000fd5b60408051919082016001600160401b038111838210176200021f5760405256fe6080604052600436101561001d575b3661127f5761001b611fe4565b005b60003560e01c806306fdde03146101bd5780630b3dc354146101b8578063150b7a02146101b35780631626ba7e146101ae57806329f8b174146101a9578063333daf92146101a457806334fcd5be1461019f5780633659cfe61461019a5780633a871cdd146101955780633e1b08121461019057806351166ba01461018b578063519454471461018657806354fd4d501461018157806355b14f501461017c57806357b750471461017757806384b0196e1461017257806388e7fd061461016d578063b0d691fe14610168578063b68df16d14610163578063bc197c811461015e578063cdaea3ed14610159578063d087d28814610154578063d1f578941461014f578063d54162211461014a578063f23a6e61146101455763f2fde38b0361000e576111c9565b61116f565b6110dd565b610f9c565b610f1d565b610ed8565b610e49565b610d6c565b610d27565b610cf2565b610c4a565b610c13565b610b8f565b610b3b565b610a36565b61096d565b6108a9565b610867565b6107c1565b6106de565b610659565b6104b1565b61045e565b6103d1565b610352565b61031e565b60009103126101cd57565b600080fd5b634e487b7160e01b600052604160045260246000fd5b6001600160401b0381116101fb57604052565b6101d2565b606081019081106001600160401b038211176101fb57604052565b608081019081106001600160401b038211176101fb57604052565b604081019081106001600160401b038211176101fb57604052565b60c081019081106001600160401b038211176101fb57604052565b90601f801991011681019081106001600160401b038211176101fb57604052565b6040519061029a8261021b565b565b6040519061016082018281106001600160401b038211176101fb57604052565b604051906102c982610236565b600682526512d95c9b995b60d21b6020830152565b919082519283825260005b84811061030a575050826000602080949584010152601f8019910116010190565b6020818301810151848301820152016102e9565b346101cd5760003660031901126101cd5761034e61033a6102bc565b6040519182916020835260208301906102de565b0390f35b346101cd5760003660031901126101cd57602060008051602061221e8339815191525460501c6040519060018060a01b03168152f35b6001600160a01b038116036101cd57565b359061029a82610388565b9181601f840112156101cd578235916001600160401b0383116101cd57602083818601950101116101cd57565b346101cd5760803660031901126101cd576103ed600435610388565b6103f8602435610388565b6064356001600160401b0381116101cd576104179036906004016103a4565b5050604051630a85bd0160e11b8152602090f35b9060406003198301126101cd5760043591602435906001600160401b0382116101cd5761045a916004016103a4565b9091565b346101cd5760206104776104713661042b565b91611d45565b6040516001600160e01b03199091168152f35b600435906001600160e01b0319821682036101cd57565b65ffffffffffff8116036101cd57565b60c03660031901126101cd576104c561048a565b602435906104d282610388565b604435906104df82610388565b6064356104eb816104a1565b608435936104f8856104a1565b60a4356001600160401b0381116101cd576105179036906004016103a4565b9590946001600160a01b0393337f0000000000000000000000000000000000000000000000000000000000000000861614158061064f575b61063d5784926105846105b09261057561056761028d565b65ffffffffffff9094168452565b65ffffffffffff166020830152565b6001600160a01b03851660408201526001600160a01b03831660608201526105ab87611247565b611941565b1693843b156101cd576040519063064acaab60e11b825281806105da6000998a94600484016119b1565b038183895af180156106385761061f575b5016906001600160e01b0319167fed03d2572564284398470d3f266a693e29ddfff3eba45fc06c5e91013d3213538480a480f35b8061062c610632926101e8565b806101c2565b386105eb565b611681565b604051637046c88d60e01b8152600490fd5b503033141561054f565b346101cd57602061067261066c3661042b565b91612136565b604051908152f35b9291926001600160401b0382116101fb57604051916106a3601f8201601f19166020018461026c565b8294818452818301116101cd578281602093846000960137010152565b9080601f830112156101cd578160206106db9335910161067a565b90565b6020806003193601126101cd576001600160401b036004358181116101cd57366023820112156101cd578060040135918083116101fb578260051b9060409081519461072c8785018761026c565b85528585019160248094860101943686116101cd57848101935b8685106107565761001b88611342565b84358481116101cd578201606060231982360301126101cd5783519161077b83610200565b8782013561078881610388565b835260448201358b8401526064820135928684116101cd576107b28c94938a8695369201016106c0565b86820152815201940193610746565b60203660031901126101cd576004356107d981610388565b6001600160a01b0390337f0000000000000000000000000000000000000000000000000000000000000000831614158061085d575b61063d57807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc55167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b600080a2005b503033141561080e565b6003196060368201126101cd57600435906001600160401b0382116101cd576101609082360301126101cd57610672602091604435906024359060040161168d565b346101cd5760203660031901126101cd576004356001600160c01b038116908190036101cd57604051631aab3f0d60e11b815230600482015260248101919091526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156106385761034e9160009161093f575b506040519081529081906020820190565b610960915060203d8111610966575b610958818361026c565b8101906115a2565b3861092e565b503d61094e565b346101cd5760203660031901126101cd5761034e6109b261098c61048a565b6000606060405161099c8161021b565b8281528260208201528260408201520152611247565b604051906109bf8261021b565b805465ffffffffffff80821684528160301c16602084015260601c60408301526001808060a01b03910154166060820152604051918291829190916060608082019365ffffffffffff80825116845260208201511660208401528160018060a01b0391826040820151166040860152015116910152565b60803660031901126101cd57600435610a4e81610388565b6044356001600160401b0381116101cd57610a6d9036906004016106c0565b9060643560028110156101cd57337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610b10575b80610afb575b61063d57610ac0816112f8565b610ae9576000828193926020839451920190602435905af13d82803e15610ae5573d90f35b3d90fd5b6040516367ce775960e01b8152600490fd5b50610b0b610b07611eb5565b1590565b610ab3565b5030331415610aad565b60405190610b2782610236565b6005825264302e322e3360d81b6020830152565b346101cd5760003660031901126101cd5761034e61033a610b1a565b9060406003198301126101cd57600435610b7081610388565b91602435906001600160401b0382116101cd5761045a916004016103a4565b610b9836610b57565b505050337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610c09575b61063d5760405162461bcd60e51b815260206004820152600f60248201526e1b9bdd081a5b5c1b195b595b9d1959608a1b6044820152606490fd5b5030331415610bce565b346101cd5760003660031901126101cd57602060008051602061221e8339815191525460e01b6040519063ffffffff60e01b168152f35b346101cd5760003660031901126101cd57610ca0610c666102bc565b610c6e610b1a565b90604051928392600f60f81b8452610c9260209360e08587015260e08601906102de565b9084820360408601526102de565b90466060840152306080840152600060a084015282820360c08401528060605192838152019160809160005b828110610cdb57505050500390f35b835185528695509381019392810192600101610ccc565b346101cd5760003660031901126101cd57602060008051602061221e8339815191525465ffffffffffff60405191831c168152f35b346101cd5760003660031901126101cd576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b60403660031901126101cd57600435610d8481610388565b6024356001600160401b0381116101cd57610da39036906004016106c0565b90337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580610e0f575b80610dfe575b61063d5760008281939260208394519201905af43d82803e15610ae5573d90f35b50610e0a610b07611eb5565b610ddd565b5030331415610dd7565b9181601f840112156101cd578235916001600160401b0383116101cd576020808501948460051b0101116101cd57565b346101cd5760a03660031901126101cd57610e65600435610388565b610e70602435610388565b6001600160401b036044358181116101cd57610e90903690600401610e19565b50506064358181116101cd57610eaa903690600401610e19565b50506084359081116101cd57610ec49036906004016103a4565b505060405163bc197c8160e01b8152602090f35b346101cd5760003660031901126101cd576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b346101cd5760003660031901126101cd57604051631aab3f0d60e11b8152306004820152600060248201526020816044817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156106385761034e9160009161093f57506040519081529081906020820190565b610fa536610b57565b916001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082169082160361108d5760008051602061223e833981519152541661103c5761100861100261001b9361100e936113e0565b906118c7565b60601c90565b60008051602061223e83398151915280546001600160a01b0319166001600160a01b03909216919091179055565b60405162461bcd60e51b8152602060048201526024808201527f4b65726e656c4c69746545434453413a20616c726561647920696e697469616c6044820152631a5e995960e21b6064820152608490fd5b60405162461bcd60e51b815260206004820152602260248201527f4b65726e656c4c69746545434453413a20696e76616c69642076616c6964617460448201526137b960f11b6064820152608490fd5b60203660031901126101cd576110f161048a565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316141580611165575b61063d5760008051602061221e83398151915290815469ffffffffffff000000004260201b169160e01c9069ffffffffffffffffffff191617179055600080f35b5030331415611124565b346101cd5760a03660031901126101cd5761118b600435610388565b611196602435610388565b6084356001600160401b0381116101cd576111b59036906004016103a4565b505060405163f23a6e6160e01b8152602090f35b60203660031901126101cd576004356111e181610388565b6001600160a01b03337f0000000000000000000000000000000000000000000000000000000000000000821614158061123d575b61063d5760008051602061223e83398151915280546001600160a01b03191691909216179055005b5030331415611215565b63ffffffff60e01b166000527f439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dda602052604060002090565b600061129581356001600160e01b031916611247565b5460601c337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806112e9575b61063d57818091368280378136915af43d82803e15610ae5573d90f35b506112f2611eb5565b156112cc565b6002111561130257565b634e487b7160e01b600052602160045260246000fd5b805182101561132c5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161415806113cf575b61063d5780519060005b82811061138b57505050565b6000806113988385611318565b5180516001600160a01b03166020916040838201519101519283519301915af13d6000803e156113ca5760010161137f565b3d6000fd5b506113db610b07611eb5565b611375565b906014116101cd5790601490565b906004116101cd5790600490565b90929192836004116101cd5783116101cd57600401916003190190565b906024116101cd5760100190601490565b906058116101cd5760380190602090565b906024116101cd5760040190602090565b906038116101cd5760240190601490565b90600a116101cd5760040190600690565b906010116101cd57600a0190600690565b909392938483116101cd5784116101cd578101920390565b6001600160e01b031990358181169392600481106114b457505050565b60040360031b82901b16169150565b9190610160838203126101cd576114d861029c565b926114e281610399565b8452602081013560208501526040810135916001600160401b03928381116101cd57816115109184016106c0565b604086015260608201358381116101cd578161152d9184016106c0565b60608601526080820135608086015260a082013560a086015260c082013560c086015260e082013560e08601526101008083013590860152610120808301358481116101cd578261157f9185016106c0565b9086015261014092838301359081116101cd5761159c92016106c0565b90830152565b908160209103126101cd575190565b606080825282516001600160a01b031690820152919392916040916116779060208101516080840152838101516115f6610160918260a08701526101c08601906102de565b90611664611616606085015193605f1994858983030160c08a01526102de565b608085015160e088015260a085015192610100938489015260c08601519061012091828a015260e08701519461014095868b01528701519089015285015184888303016101808901526102de565b92015190848303016101a08501526102de565b9460208201520152565b6040513d6000823e3d90fd5b6001600160a01b039392917f0000000000000000000000000000000000000000000000000000000000000000851633036118b5576004948535928361014481013501918760248401930135946116ec6116e687866113ee565b90611497565b926001600160e01b03198085169182156118885761170b9036906114c3565b9461172560008051602061221e8339815191525460e01b90565b16161561173d5760405163fc2f51c560e01b81528a90fd5b97989697600160e01b8103611837575090602095966117c761179561177c6117776116e687606460009901350160248782013591016113ee565b611247565b6001810154909a9081906001600160a01b0316986113fc565b995460d081901b6001600160d01b03191660709190911b65ffffffffffff60a01b1617995b8b611829575b369161067a565b6101408501526117eb604051998a9788968794633a871cdd60e01b865285016115b1565b0393165af1908115610638576106db92600092611809575b5061219b565b61182291925060203d811161096657610958818361026c565b9038611803565b348080808f335af1506117c0565b9095939190600160e11b0361187b576118716117c79460009361186c6116e68a606460209c01350160248d82013591016113ee565b6119d9565b91999296916117ba565b5050505050505050600190565b9750505050505050916106db939450806118a3575b5061203e565b3490349034903490335af1503861189d565b604051636b31ba1560e11b8152600490fd5b6bffffffffffffffffffffffff1990358181169392601481106118e957505050565b60140360031b82901b16169150565b359060208110611906575090565b6000199060200360031b1b1690565b6001600160d01b0319903581811693926006811061193257505050565b60060360031b82901b16169150565b81516020830151604084015160309190911b6bffffffffffff0000000000001665ffffffffffff9290921691909117606091821b6bffffffffffffffffffffffff19161782559091015160019190910180546001600160a01b0319166001600160a01b0392909216919091179055565b90918060409360208452816020850152848401376000828201840152601f01601f1916010190565b91906119e58282611419565b6119ee916118c7565b60601c936119fc838361142a565b611a05916118f8565b605883016078820194858360580190611a1f91838861147f565b611a28916118f8565b611a32828761143b565b611a3b916118f8565b611a45838861144c565b611a4e916118c7565b60601c611a5c36878761067a565b8051602091820120604080517f3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee9641769381019384526001600160e01b03198e169181019190915260608101949094526001600160a01b0392909216608084015260a08084019290925290825290611ad260c08261026c565b519020611ade90611c31565b9084019660788801611af191848961147f565b90611afb92612136565b611b05828761143b565b6001600160a01b031991611b1991906118f8565b16611b239161219b565b966078868801019682036077190195611b3c838261145d565b611b4591611915565b60d01c92611b53818361146e565b611b5c91611915565b60d01c91611b6a828261144c565b611b73916118c7565b60601c91611b8091611419565b611b89916118c7565b60601c91611b9561028d565b65ffffffffffff909516855265ffffffffffff1660208501526001600160a01b031660408401526001600160a01b03166060830152611bd390611247565b90611bdd91611941565b6001600160a01b03871691823b156101cd57611c13926000928360405180968195829463064acaab60e11b8452600484016119b1565b03925af1801561063857611c245750565b8061062c61029a926101e8565b7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000030147f000000000000000000000000000000000000000000000000000000000000000046141615611cbe575b671901000000000000600052601a52603a526042601820906000603a52565b5060a06040517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f81527f000000000000000000000000000000000000000000000000000000000000000060208201527f0000000000000000000000000000000000000000000000000000000000000000604082015246606082015230608082015220611c9f565b91611e0491611e0993611dee611dfc611d5c6102bc565b611d64610b1a565b906020815191012090602081519101206040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a08152611dc381610251565b51902092604051928391602083019586909160429261190160f01b8352600283015260228201520190565b03601f19810183528261026c565b519020612136565b612015565b9065ffffffffffff928342911611159283611e56575b505081611e44575b5015611e3857630b135d3f60e11b90565b6001600160e01b031990565b6001600160a01b031615905038611e27565b429116101591503880611e1f565b908160209103126101cd575180151581036101cd5790565b6001600160a01b0390911681526040602082018190528101829052606091806000848401376000828201840152601f01601f1916010190565b60008051602061223e833981519152546001600160a01b039081163314611fde57611eeb6000356001600160e01b031916611247565b60018101546001600160a01b031691821615908115611fa2575b8115611f77575b5015611f185750600090565b60206040518092639ea9bd5960e01b82528180611f39363360048401611e7c565b03915afa90811561063857600091611f4f575090565b6106db915060203d8111611f70575b611f68818361026c565b810190611e64565b503d611f5e565b54611f91915065ffffffffffff165b65ffffffffffff1690565b65ffffffffffff4291161138611f0c565b905065ffffffffffff611fc2611f86835465ffffffffffff9060301c1690565b168015159081611fd4575b5090611f05565b9050421138611fcd565b50600190565b7f88a5966d370b9919b20f3e2c13ff65706f196a4e32cc2c12bf57088f8852587460408051338152346020820152a1565b8065ffffffffffff91828160a01c16928315600114612036575b5060d01c92565b92503861202f565b9061206e906020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042090565b9061014081013590601e19813603018212156101cd5701908135916001600160401b0383116101cd576020019180360383136101cd576117c0816120b5926120bb956113fc565b906120e7565b60008051602061223e833981519152546001600160a01b039081169116036120e257600090565b600190565b6001608060006041602094969596604080519880519285526060810151851a88528781015182520151606052145afa51913d15612128576000606052604052565b638baa579f6000526004601cfd5b6020527b19457468657265756d205369676e6564204d6573736167653a0a3332600052603c60042061216f92916120b59192369161067a565b60008051602061223e833981519152546001600160a01b0391821691161461219657600190565b600090565b8082186001600160a01b0316156001146121b6575050600190565b65ffffffffffff60a01b8181169265ffffffffffff60a01b1992831692811691908415612214575b8116801561220d575b848110908518028085189414612205575b5081811190821802181790565b9250386121f8565b50806121e7565b935080936121de56fe439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9dea7fea882fba743201b2aeb1babf326b8944488db560784858525d123ee7e970000000000000000000000005ff137d4b0fdcd49dca30c7cf57e578a026d2789000000000000000000000000d9ab5096a832b9ce79914329daee236f8eea0390"; - - function deploy() internal returns (address, address) { - DeterministicDeploy.checkDeploy("Kernel 2.3", EXPECTED_KERNEL_2_3_ADDRESS, KERNEL_2_3_CODE); - DeterministicDeploy.checkDeploy("Kernel Lite 2.3", EXPECTED_KERNEL_LITE_2_3_ADDRESS, KERNEL_LITE_2_3_CODE); - return (EXPECTED_KERNEL_2_3_ADDRESS, EXPECTED_KERNEL_LITE_2_3_ADDRESS); - } -} diff --git a/script/deterministic/SessionKey.s.sol b/script/deterministic/SessionKey.s.sol deleted file mode 100644 index 157c855f..00000000 --- a/script/deterministic/SessionKey.s.sol +++ /dev/null @@ -1,14 +0,0 @@ -pragma solidity ^0.8.0; - -import "./DeterministicDeploy.s.sol"; - -library SessionKeyDeploy { - address constant EXPECTED_SESSIONKEY_ADDRESS = 0xB8E3c4bEaACAd06f6092793012DA4a8cB23D6123; - bytes constant SESSIONKEY_CODE = - hex"0000000000000000000000000000000000000000000000000000000000000000608080604052346100165761156e908161001c8239f35b600080fdfe60806040908082526004908136101561001757600080fd5b600092833560e01c9182630c9595561461034d57508163333daf921461031a5781633a871cdd146102d657816346585db21461027d57816352721fdd146102005781637ecebe00146101b8578382638fc925aa1461010b575081639ea9bd59146100bd575063dbba225d1461008b57600080fd5b346100b95760203660031901126100b957356001600160801b03811681036100b9576100b6906105d7565b80f35b5080fd5b905082346101085781600319360112610108576100d8610533565b50602435906001600160401b03821161010857506100f990369084016104eb565b50505163d623472560e01b8152fd5b80fd5b8091846020600319360112610170578035906001600160401b0382116101b357610137913691016104eb565b9091906014810361017457601411610170576002913560601c835260016020528083203384526020528220828155826001820155015580f35b5050fd5b9192506010820361019457506010116100b9576100b6903560801c6105d7565b6100b692506001600160801b03915033845283602052832054166105d7565b505050fd5b8390346100b95760203660031901126100b9579081906001600160a01b036101de610533565b1681528060205220548151906001600160801b038116825260801c6020820152f35b8390346100b957806003193601126100b9578060a09261021e610533565b61022661051d565b90600180871b03809116835260016020528383209116825260205220908154916002600182015491015491805193845265ffffffffffff80831660208601528260301c169084015260601c60608301526080820152f35b919050346102d257816003193601126102d25791819261029b61051d565b9035825260026020528282209060018060a01b03168252602052205481519065ffffffffffff90818116835260301c166020820152f35b8280fd5b91905060031992606084360112610108578135936001600160401b0385116100b95761016090853603011261010857506020926103139101610934565b9051908152f35b90508234610108578160031936011261010857602435906001600160401b03821161010857506100f990369084016104eb565b8492509060203660031901126102d2576001600160401b039184358381116104e35761037c90369087016104eb565b806014116104e757806034116104e75780603a116104e7578084116104e757806054116104e7576074116104e35760548101359360a08301908111838210176104d0579060029184526014810135835260208301603482013560d01c815284840190603a83013560d01c825261046160608601918785013560601c835260808701948986523560601c8a526001602052878a20338b52602052878a2096518755600187019365ffffffffffff8092511665ffffffffffff198654161785555116839065ffffffffffff60301b82549160301b169065ffffffffffff60301b1916179055565b516bffffffffffffffffffffffff82549181199060601b16911617905551910155826020528220908154916001600160801b038084168181146104bd576100b69596506001011680936001600160801b03191617905514610580565b634e487b7160e01b865260118752602486fd5b634e487b7160e01b865260418752602486fd5b8480fd5b8580fd5b9181601f84011215610518578235916001600160401b038311610518576020838186019501011161051857565b600080fd5b602435906001600160a01b038216820361051857565b600435906001600160a01b038216820361051857565b90601f801991011681019081106001600160401b0382111761056a57604052565b634e487b7160e01b600052604160045260246000fd5b1561058757565b60405162461bcd60e51b815260206004820152602260248201527f53657373696f6e4b657956616c696461746f723a20696e76616c6964206e6f6e604482015261636560f01b6064820152608490fd5b600033815280602052604080822054916105ff6001600160801b0385169360801c8411610580565b3381528060205220916001600160801b03199060801b16179055565b903590601e198136030182121561051857018035906001600160401b0382116105185760200191813603831361051857565b356001600160a01b03811681036105185790565b1561066857565b60405162461bcd60e51b8152602060048201526024808201527f53657373696f6e4b657956616c696461746f723a20746172676574206d69736d6044820152630c2e8c6d60e31b6064820152608490fd5b156106c057565b60405162461bcd60e51b815260206004820152602960248201527f53657373696f6e4b657956616c696461746f723a2076616c7565206c696d697460448201526808195e18d95959195960ba1b6064820152608490fd5b1561071e57565b60405162461bcd60e51b815260206004820152603360248201527f53657373696f6e4b657956616c696461746f723a207065726d697373696f6e206044820152721d995c9a599a58d85d1a5bdb8819985a5b1959606a1b6064820152608490fd5b3563ffffffff811681036105185790565b359065ffffffffffff8216820361051857565b602091828252610120820190803563ffffffff81168091036105185784840152808401356001600160a01b038116949085900361051857604094858501528482013563ffffffff60e01b811680910361051857606090818601528083013560808601526080830135601e1984360301811215610518578301918083359301966001600160401b03841161051857828402360388136105185792919082610100968760a08a01525261014087019793600080925b8584106108a3575050505050505061089c60e065ffffffffffff928361087e60a08301610790565b1660c08701528361089160c08301610790565b168287015201610790565b1691015290565b909192939495998a358152818b013560068110156108da57828201528a840135848201528501998501959493600101929190610856565b8380fd5b9092916001600160401b03841161056a578360051b604051926020809461090782850182610549565b809781520191810192831161051857905b8282106109255750505050565b81358152908301908301610918565b6101408101610943818361061b565b601411610518573560601c90600082815260019360209085825260408084203385528352808420936002850180548286528383205460801c1015610d0b578886019687548060601c8b8114600014610c8757506109a461012087018761061b565b905015610c34575b875415610c10575060608501926109c3848761061b565b6004939193116100b95782356001600160e01b031916635194544760e01b8103610b7057506109f2908761061b565b6055959195116100b9576055850135850190605582019560758101350197610a1a828261061b565b6024116104e357610a53929190610a4e9060106001600160a01b03610a416075890161064d565b1691013560601c14610661565b61061b565b6044939193116101085750610a9685610ae994610a82610acc9795602460b5610a9b97013591013511156106b9565b604481013501602460048201359101611388565b610717565b54610aa58461077f565b855188810192835260e09190911b6001600160e01b03191660208301529283906024830190565b0392610ae0601f1994858101835282610549565b51902083610ed8565b96549465ffffffffffff9687871680898b1610610b66575b50610b2f610b4393610b4897969593610b2393549651938491820195866107a3565b03908101835282610549565b5190209236906075605582013591016108de565b610d64565b15610b5f57610b5c945060301c1691610dbb565b90565b5050505090565b9850610b2f610b01565b94509450949650945050631a7e6adf60e19896981b14600014610c0657610b97818561061b565b6055116102d25790816055610baf930135019461061b565b605592919211610108575090816075610be19493013501916075605584013593019160756055830135920190876110f7565b919091610bff575065ffffffffffff610b5c935460301c1691610dbb565b9250505090565b5050505091505090565b98975050505050505050610b5c925065ffffffffffff808360301c16921690610dbb565b845162461bcd60e51b815260048101889052602660248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206e6044820152651bdd081cd95d60d21b6064820152608490fd5b80610c93575b506109ac565b610ca161012088018861061b565b6014116104e7573560601c03610cb75738610c8d565b845162461bcd60e51b815260048101889052602760248201527f53657373696f6e4b657956616c696461746f723a207061796d6173746572206d6044820152660d2e6dac2e8c6d60cb1b6064820152608490fd5b825162461bcd60e51b815260048101869052602c60248201527f53657373696f6e4b657956616c696461746f723a2073657373696f6e206b657960448201526b081b9bdd08195b98589b195960a21b6064820152608490fd5b919091805180610d75575b50501490565b91906020908180820191600595861b0101925b81518111851b90815282825191185281604060002091019383851015610daf579390610d88565b50925050503880610d6f565b919091600435610144810135016024356020526000907b19457468657265756d205369676e6564204d6573736167653a0a33328252603c6004206040908151608081018181106001600160401b03821117610eb15783526041815260208101933660798201116104e75785604160209486600195836038608097018b3784606182015281519981519386526060820151861a89525182520151606052145afa51923d15610ea457606052526001600160a01b03908116911603610e9d5760d09190911b6001600160d01b03191660a09190911b65ffffffffffff60a01b161790565b5050600190565b638baa579f90526004601cfd5b634e487b7160e01b86526041600452602486fd5b3565ffffffffffff811681036105185790565b9065ffffffffffff60a0830160c0840182610ef282610ec5565b16610ff15750610f0360e091610ec5565b935b019181610f1184610ec5565b16610f1d575b50505090565b60009081526002602052604081203382526020526040812090600183835460301c160190838211610fdd575081546bffffffffffff000000000000191660309190911b65ffffffffffff60301b16178155610f7f9082905460301c1692610ec5565b1610610f8d57388080610f17565b60405162461bcd60e51b815260206004820152602260248201527f53657373696f6e4b657956616c696461746f723a2072756e7320657863656564604482015261195960f21b6064820152608490fd5b634e487b7160e01b81526011600452602490fd5b939082610ffd82610ec5565b161561107957600084815260026020526040812033825260205260408120918483549781891692831515600014611060575061103890610ec5565b160190848211610fdd5750908360e0939216955b65ffffffffffff1916868516179055610f05565b91505060e0949392506110739150610ec5565b9561104c565b60405162461bcd60e51b815260206004820152602b60248201527f53657373696f6e4b657956616c696461746f723a20696e76616c69642065786560448201526a637574696f6e2072756c6560a81b6064820152608490fd5b60001981146110e15760010190565b634e487b7160e01b600052601160045260246000fd5b94959391909160009560018060a01b03166000526001968760205260406000203360005260205260406000209365ffffffffffff89860154169560005b6004808401358401013581101561134857600483013583013681900360821901600583901b909101602401351215610518578181101561132a5760fe19863603018160051b870135121561051857611217610a9661120860248460051b600488013588010101356004870135870101606460248201916111e56111b68461064d565b8d6111d2602060018060a01b03928c60051b810135010161064d565b6001600160a01b03909216911614610661565b61120160608d8960051b810135010135604483013511156106b9565b019061061b565b8460051b8a01358a0191611388565b61127e600288015461125f61126d6112368560051b8b01358b0161077f565b604080516020810195865260e09290921b6001600160e01b031916908201529182906044820190565b03601f198101835282610549565b5190208260051b8801358801610ed8565b65ffffffffffff891665ffffffffffff821611611340575b508381101561132a578060051b850135601e19863603018112156105185785018035906001600160401b03821161051857602001908060051b360382136105185761130a91610b438a54918a6040516112ff8161125f60208201948b60051b81013501856107a3565b5190209336916108de565b1561131d57611318906110d2565b611134565b5095989750505050505050565b634e487b7160e01b600052603260045260246000fd5b975038611296565b505050505050509250565b903590601e198136030182121561051857018035906001600160401b0382116105185760200191606082023603831361051857565b600490828211610518576040908185013563ffffffff60e01b80821680920361051857823516036115645760005b608086016113c48188611353565b9050821015611558576113d79087611353565b821015611543576060820201803580860180871161152e57602480830180921161151b57508710610518578301850135602082013560068110156105185780158061150e575b1561143057505050505050505050600090565b6001811480611501575b1561144d57505050505050505050600090565b60028114806114f4575b1561146a57505050505050505050600090565b60038114806114e8575b1561148757505050505050505050600090565b868114806114dc575b156114a357505050505050505050600090565b600586911492836114cf575b5050506114c4576114bf906110d2565b6113b6565b505050505050600090565b01351490503884816114af565b50858301358211611490565b50858301358210611474565b5085830135821015611457565b508583013582111561143a565b508583013582141561141d565b634e487b7160e01b600090815260118952fd5b601187634e487b7160e01b6000525260246000fd5b603285634e487b7160e01b6000525260246000fd5b50505050505050600190565b505050505060009056"; - - function deploy() internal returns (address) { - DeterministicDeploy.checkDeploy("SessionKey", EXPECTED_SESSIONKEY_ADDRESS, SESSIONKEY_CODE); - return EXPECTED_SESSIONKEY_ADDRESS; - } -} diff --git a/src/Kernel.sol b/src/Kernel.sol index 55d5d658..cb84314f 100644 --- a/src/Kernel.sol +++ b/src/Kernel.sol @@ -1,201 +1,218 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -// Importing external libraries and contracts +import {PackedUserOperation} from "./interfaces/PackedUserOperation.sol"; +import {IAccount, ValidationData, ValidAfter, ValidUntil, parseValidationData} from "./interfaces/IAccount.sol"; +import {IEntryPoint} from "./interfaces/IEntryPoint.sol"; +import {IAccountExecute} from "./interfaces/IAccountExecute.sol"; +import {IERC7579Account} from "./interfaces/IERC7579Account.sol"; +import {ModuleLib} from "./utils/ModuleLib.sol"; +import { + ValidationManager, + ValidationMode, + ValidationId, + ValidatorLib, + ValidationType, + PermissionId, + PassFlag, + SKIP_SIGNATURE +} from "./core/ValidationManager.sol"; +import {HookManager} from "./core/HookManager.sol"; +import {ExecutorManager} from "./core/ExecutorManager.sol"; +import {SelectorManager} from "./core/SelectorManager.sol"; +import {IModule, IValidator, IHook, IExecutor, IFallback, IPolicy, ISigner} from "./interfaces/IERC7579Modules.sol"; import {EIP712} from "solady/utils/EIP712.sol"; -import {ECDSA} from "solady/utils/ECDSA.sol"; -import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol"; -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; -import {Compatibility} from "./abstract/Compatibility.sol"; -import {KernelStorage} from "./abstract/KernelStorage.sol"; -import {_intersectValidationData} from "./utils/KernelHelper.sol"; -import {IKernelValidator} from "./interfaces/IKernelValidator.sol"; - +import {ExecLib, ExecMode, CallType, ExecType, ExecModeSelector, ExecModePayload} from "./utils/ExecLib.sol"; import { - KERNEL_NAME, - KERNEL_VERSION, - VALIDATOR_APPROVED_STRUCT_HASH, - KERNEL_STORAGE_SLOT_1, - SIG_VALIDATION_FAILED -} from "./common/Constants.sol"; -import {Operation} from "./common/Enums.sol"; -import {WalletKernelStorage, Call, ExecutionDetail} from "./common/Structs.sol"; -import {ValidationData, ValidAfter, ValidUntil, parseValidationData, packValidationData} from "./common/Types.sol"; - -/// @title Kernel -/// @author taek -/// @notice wallet kernel for extensible wallet functionality -contract Kernel is EIP712, Compatibility, KernelStorage { - /// @dev Selector of the `DisabledMode()` error, to be used in assembly, 'bytes4(keccak256(bytes("DisabledMode()")))', same as DisabledMode.selector() - uint256 private constant _DISABLED_MODE_SELECTOR = 0xfc2f51c5; - bytes32 internal constant EIP712_DOMAIN_TYPEHASH = - 0x8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f; - - /// @dev Current kernel name and version - string public constant name = KERNEL_NAME; - string public constant version = KERNEL_VERSION; - - /// @dev Sets up the EIP712 and KernelStorage with the provided entry point - constructor(IEntryPoint _entryPoint) KernelStorage(_entryPoint) {} - - /// @notice Accepts incoming Ether transactions and calls from the EntryPoint contract - /// @dev This function will delegate any call to the appropriate executor based on the function signature. - fallback() external payable { - bytes4 sig = msg.sig; - address executor = getKernelStorage().execution[sig].executor; - if (msg.sender != address(entryPoint) && !_checkCaller()) { - revert NotAuthorizedCaller(); + CALLTYPE_SINGLE, + CALLTYPE_DELEGATECALL, + ERC1967_IMPLEMENTATION_SLOT, + VALIDATION_TYPE_ROOT, + VALIDATION_TYPE_VALIDATOR, + VALIDATION_TYPE_PERMISSION, + MODULE_TYPE_VALIDATOR, + MODULE_TYPE_EXECUTOR, + MODULE_TYPE_FALLBACK, + MODULE_TYPE_HOOK, + MODULE_TYPE_POLICY, + MODULE_TYPE_SIGNER, + EXECTYPE_TRY, + EXECTYPE_DEFAULT, + EXEC_MODE_DEFAULT, + CALLTYPE_DELEGATECALL, + CALLTYPE_SINGLE, + CALLTYPE_BATCH, + CALLTYPE_STATIC +} from "./types/Constants.sol"; + +contract Kernel is IAccount, IAccountExecute, IERC7579Account, ValidationManager { + error ExecutionReverted(); + error InvalidExecutor(); + error InvalidFallback(); + error InvalidCallType(); + error OnlyExecuteUserOp(); + error InvalidModuleType(); + error InvalidCaller(); + error InvalidSelector(); + + event Received(address sender, uint256 amount); + event Upgraded(address indexed implementation); + + IEntryPoint public immutable entrypoint; + + // NOTE : when eip 1153 has been enabled, this can be transient storage + mapping(bytes32 userOpHash => IHook) internal executionHook; + + constructor(IEntryPoint _entrypoint) { + entrypoint = _entrypoint; + _validationStorage().rootValidator = ValidationId.wrap(bytes21(abi.encodePacked(hex"deadbeef"))); + } + + modifier onlyEntryPoint() { + if (msg.sender != address(entrypoint)) { + revert InvalidCaller(); } - assembly { - calldatacopy(0, 0, calldatasize()) - let result := delegatecall(gas(), executor, 0, calldatasize(), 0, 0) - returndatacopy(0, 0, returndatasize()) - switch result - case 0 { revert(0, returndatasize()) } - default { return(0, returndatasize()) } + _; + } + + modifier onlyEntryPointOrSelf() { + if (msg.sender != address(entrypoint) && msg.sender != address(this)) { + revert InvalidCaller(); } + _; } - /// @notice Executes a function call to an external contract - /// @param to The address of the target contract - /// @param value The amount of Ether to send - /// @param data The call data to be sent - /// @dev operation is deprecated param, use executeBatch for batched transaction - function execute(address to, uint256 value, bytes memory data, Operation _operation) external payable { - if (msg.sender != address(entryPoint) && msg.sender != address(this) && !_checkCaller()) { - revert NotAuthorizedCaller(); + modifier onlyEntryPointOrSelfOrRoot() { + IValidator validator = ValidatorLib.getValidator(_validationStorage().rootValidator); + if ( + msg.sender != address(entrypoint) && msg.sender != address(this) // do rootValidator hook + ) { + if (validator.isModuleType(4)) { + bytes memory ret = IHook(address(validator)).preCheck(msg.sender, msg.value, msg.data); + _; + IHook(address(validator)).postCheck(ret, true, hex""); // TODO don't support try catch hook here + } else { + revert InvalidCaller(); + } + } else { + _; } - if (_operation != Operation.Call) { - revert DeprecatedOperation(); + } + + function initialize(ValidationId _rootValidator, IHook hook, bytes calldata validatorData, bytes calldata hookData) + external + { + ValidationStorage storage vs = _validationStorage(); + require(ValidationId.unwrap(vs.rootValidator) == bytes21(0), "already initialized"); + if (ValidationId.unwrap(_rootValidator) == bytes21(0)) { + revert InvalidValidator(); } - assembly { - let success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0) - returndatacopy(0, 0, returndatasize()) - switch success - case 0 { revert(0, returndatasize()) } - default { return(0, returndatasize()) } + ValidationType vType = ValidatorLib.getType(_rootValidator); + if (vType != VALIDATION_TYPE_VALIDATOR && vType != VALIDATION_TYPE_PERMISSION) { + revert InvalidValidationType(); } + _setRootValidator(_rootValidator); + ValidationConfig memory config = ValidationConfig({nonce: uint32(1), hook: hook}); + vs.currentNonce = 1; + _installValidation(_rootValidator, config, validatorData, hookData); } - /// @notice Executes a function call to an external contract with delegatecall - /// @param to The address of the target contract - /// @param data The call data to be sent - function executeDelegateCall(address to, bytes memory data) external payable { - if (msg.sender != address(entryPoint) && msg.sender != address(this) && !_checkCaller()) { - revert NotAuthorizedCaller(); - } + function upgradeTo(address _newImplementation) external payable onlyEntryPointOrSelfOrRoot { assembly { - let success := delegatecall(gas(), to, add(data, 0x20), mload(data), 0, 0) - returndatacopy(0, 0, returndatasize()) - switch success - case 0 { revert(0, returndatasize()) } - default { return(0, returndatasize()) } + sstore(ERC1967_IMPLEMENTATION_SLOT, _newImplementation) } + emit Upgraded(_newImplementation); } - /// @notice Executes a function call to an external contract batched - /// @param calls The calls to be executed, in order - /// @dev operation deprecated param, use executeBatch for batched transaction - function executeBatch(Call[] memory calls) external payable { - if (msg.sender != address(entryPoint) && !_checkCaller()) { - revert NotAuthorizedCaller(); + function _domainNameAndVersion() internal pure override returns (string memory name, string memory version) { + name = "Kernel"; + version = "0.3.0-beta"; + } + + receive() external payable { + emit Received(msg.sender, msg.value); + } + + fallback() external payable { + SelectorConfig memory config = _selectorConfig(msg.sig); + bool success; + bytes memory result; + if (address(config.hook) == address(0)) { + revert InvalidSelector(); + } else { + // action installed + bytes memory context; + if (address(config.hook) != address(1)) { + context = _doPreHook(config.hook, msg.value, msg.data); + } + // execute action + if (config.callType == CALLTYPE_SINGLE) { + (success, result) = ExecLib.doFallback2771Call(config.target); + } else if (config.callType == CALLTYPE_DELEGATECALL) { + (success, result) = ExecLib.executeDelegatecall(config.target, msg.data); + } else { + revert NotSupportedCallType(); + } + if (address(config.hook) != address(1)) { + _doPostHook(config.hook, context, success, result); + } } - uint256 len = calls.length; - for (uint256 i = 0; i < len;) { - Call memory call = calls[i]; - address to = call.to; - uint256 value = call.value; - bytes memory data = call.data; + if (!success) { assembly { - let success := call(gas(), to, value, add(data, 0x20), mload(data), 0, 0) - switch success - case 0 { - returndatacopy(0, 0, returndatasize()) - revert(0, returndatasize()) - } - default { i := add(i, 1) } + revert(add(result, 0x20), mload(result)) + } + } else { + assembly { + return(add(result, 0x20), mload(result)) } } } - /// @notice Validates a user operation based on its mode - /// @dev This function will validate user operation and be called by EntryPoint - /// @param _userOp The user operation to be validated - /// @param userOpHash The hash of the user operation - /// @param missingAccountFunds The funds needed to be reimbursed - /// @return validationData The data used for validation - function validateUserOp(UserOperation calldata _userOp, bytes32 userOpHash, uint256 missingAccountFunds) + // validation part + function validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds) external payable - virtual + override + onlyEntryPoint returns (ValidationData validationData) { - if (msg.sender != address(entryPoint)) { - revert NotEntryPoint(); + ValidationStorage storage vs = _validationStorage(); + // ONLY ENTRYPOINT + // Major change for v2 => v3 + // 1. instead of packing 4 bytes prefix to userOp.signature to determine the mode, v3 uses userOp.nonce's first 2 bytes to check the mode + // 2. instead of packing 20 bytes in userOp.signature for enable mode to provide the validator address, v3 uses userOp.nonce[2:22] + // 3. In v2, only 1 plugin validator(aside from root validator) can access the selector. + // In v3, you can use more than 1 plugin to use the exact selector, you need to specify the validator address in userOp.nonce[2:22] to use the validator + + (ValidationMode vMode, ValidationType vType, ValidationId vId) = ValidatorLib.decodeNonce(userOp.nonce); + if (vType == VALIDATION_TYPE_ROOT) { + vId = vs.rootValidator; } - bytes calldata userOpSignature; - uint256 userOpEndOffset; - assembly { - // Store the userOpSignature offset - userOpEndOffset := add(calldataload(0x04), 0x24) - // Extract the user op signature from the calldata (but keep it in the calldata, just extract offset & length) - userOpSignature.offset := add(calldataload(add(userOpEndOffset, 0x120)), userOpEndOffset) - userOpSignature.length := calldataload(sub(userOpSignature.offset, 0x20)) + validationData = _doValidation(vMode, vId, userOp, userOpHash); + ValidationConfig memory vc = vs.validationConfig[vId]; + // allow when nonce is not revoked or vType is sudo + if (vType != VALIDATION_TYPE_ROOT && vc.nonce < vs.validNonceFrom) { + revert InvalidNonce(); } - // mode based signature - bytes4 mode = bytes4(userOpSignature[0:4]); // mode == 00..00 use validators - // mode == 0x00000000 use sudo validator - if (mode == 0x00000000) { - assembly { - if missingAccountFunds { - pop(call(gas(), caller(), missingAccountFunds, callvalue(), callvalue(), callvalue(), callvalue())) - //ignore failure (its EntryPoint's job to verify, not account.) - } - } - // short circuit here for default validator - return _validateUserOp(_userOp, userOpHash, missingAccountFunds); + IHook execHook = vc.hook; + if (address(execHook) == address(0)) { + revert InvalidValidator(); } + executionHook[userOpHash] = execHook; - // Check if the kernel is disabled, if that's the case, it's only accepting userOperation with sudo mode - assembly ("memory-safe") { - // Extract the disabled mode from the storage slot - let isKernelDisabled := shl(224, sload(KERNEL_STORAGE_SLOT_1)) - // If we got a non-zero disabled mode, and non zero mode, then revert - if and(isKernelDisabled, mode) { - mstore(0x00, _DISABLED_MODE_SELECTOR) - revert(0x1c, 0x04) + if (address(execHook) == address(1)) { + // does not require hook + if (vType != VALIDATION_TYPE_ROOT && !vs.allowedSelectors[vId][bytes4(userOp.callData[0:4])]) { + revert InvalidValidator(); } - } - - // The validator that will be used - IKernelValidator validator; - - // mode == 0x00000001 use given validator - // mode == 0x00000002 enable validator - if (mode == 0x00000001) { - bytes calldata userOpCallData; - assembly { - userOpCallData.offset := add(calldataload(add(userOpEndOffset, 0x40)), userOpEndOffset) - userOpCallData.length := calldataload(sub(userOpCallData.offset, 0x20)) + } else { + // requires hook + if (vType != VALIDATION_TYPE_ROOT && !vs.allowedSelectors[vId][bytes4(userOp.callData[4:8])]) { + revert InvalidValidator(); } - ExecutionDetail storage detail = getKernelStorage().execution[bytes4(userOpCallData[0:4])]; - validator = detail.validator; - userOpSignature = userOpSignature[4:]; - validationData = packValidationData(detail.validAfter, detail.validUntil); - } else if (mode == 0x00000002) { - bytes calldata userOpCallData; - assembly { - userOpCallData.offset := add(calldataload(add(userOpEndOffset, 0x40)), userOpEndOffset) - userOpCallData.length := calldataload(sub(userOpCallData.offset, 0x20)) + if (bytes4(userOp.callData[0:4]) != this.executeUserOp.selector) { + revert OnlyExecuteUserOp(); } - // use given validator - // userOpSignature[4:10] = validAfter, - // userOpSignature[10:16] = validUntil, - // userOpSignature[16:36] = validator address, - (validator, validationData, userOpSignature) = - _approveValidator(bytes4(userOpCallData[0:4]), userOpSignature); - } else { - return SIG_VALIDATION_FAILED; } assembly { @@ -204,202 +221,273 @@ contract Kernel is EIP712, Compatibility, KernelStorage { //ignore failure (its EntryPoint's job to verify, not account.) } } + } - // Replicate the userOp from memory to calldata, to update it's signature (since with mode 1 & 2 the signatre can be updated) - UserOperation memory userOp = _userOp; - userOp.signature = userOpSignature; + // --- Execution --- + function executeUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash) + external + payable + override + onlyEntryPoint + { + bytes memory context; + IHook hook = executionHook[userOpHash]; + if (address(hook) != address(1)) { + // removed 4bytes selector + context = _doPreHook(hook, msg.value, userOp.callData[4:]); + } + (bool success, bytes memory ret) = ExecLib.executeDelegatecall(address(this), userOp.callData[4:]); + if (address(hook) != address(1)) { + _doPostHook(hook, context, success, ret); + } else if (!success) { + revert ExecutionReverted(); + } + } - // Get the validator data from the designated signer - validationData = - _intersectValidationData(validationData, validator.validateUserOp(userOp, userOpHash, missingAccountFunds)); - return validationData; + function executeFromExecutor(ExecMode execMode, bytes calldata executionCalldata) + external + payable + returns (bytes[] memory returnData) + { + // no modifier needed, checking if msg.sender is registered executor will replace the modifier + IHook hook = _executorConfig(IExecutor(msg.sender)).hook; + if (address(hook) == address(0)) { + revert InvalidExecutor(); + } + bytes memory context; + if (address(hook) != address(1)) { + context = _doPreHook(hook, msg.value, msg.data); + } + returnData = ExecLib.execute(execMode, executionCalldata); + if (address(hook) != address(1)) { + _doPostHook(hook, context, true, abi.encode(returnData)); + } } - /// @dev This function will approve a new validator for the current kernel - /// @param sig The signature of the userOp asking for a validator approval - /// @param signature The signature of the userOp asking for a validator approval - function _approveValidator(bytes4 sig, bytes calldata signature) - internal - returns (IKernelValidator validator, ValidationData validationData, bytes calldata validationSig) + function execute(ExecMode execMode, bytes calldata executionCalldata) external payable onlyEntryPointOrSelfOrRoot { + ExecLib.execute(execMode, executionCalldata); + } + + function isValidSignature(bytes32 hash, bytes calldata signature) external view override returns (bytes4) { + ValidationStorage storage vs = _validationStorage(); + (ValidationId vId, bytes calldata sig) = ValidatorLib.decodeSignature(signature); + if (ValidatorLib.getType(vId) == VALIDATION_TYPE_ROOT) { + vId = vs.rootValidator; + } + if (address(vs.validationConfig[vId].hook) == address(0)) { + revert InvalidValidator(); + } + if (ValidatorLib.getType(vId) == VALIDATION_TYPE_VALIDATOR) { + IValidator validator = ValidatorLib.getValidator(vId); + return validator.isValidSignatureWithSender(msg.sender, _toWrappedHash(hash), sig); + } else { + PermissionId pId = ValidatorLib.getPermissionId(vId); + PassFlag permissionFlag = vs.permissionConfig[pId].permissionFlag; + if (PassFlag.unwrap(permissionFlag) & PassFlag.unwrap(SKIP_SIGNATURE) != 0) { + revert PermissionNotAlllowedForSignature(); + } + return _checkPermissionSignature(pId, msg.sender, hash, sig); + } + } + + function installModule(uint256 moduleType, address module, bytes calldata initData) + external + payable + override + onlyEntryPointOrSelfOrRoot { - unchecked { - validator = IKernelValidator(address(bytes20(signature[16:36]))); - uint256 cursor = 88; - uint256 length = uint256(bytes32(signature[56:88])); // this is enableDataLength - bytes calldata enableData; + if (moduleType == MODULE_TYPE_VALIDATOR) { + ValidationStorage storage vs = _validationStorage(); + ValidationId vId = ValidatorLib.validatorToIdentifier(IValidator(module)); + ValidationConfig memory config = + ValidationConfig({nonce: vs.currentNonce, hook: IHook(address(bytes20(initData[0:20])))}); + bytes calldata validatorData; + bytes calldata hookData; assembly { - enableData.offset := add(signature.offset, cursor) - enableData.length := length - cursor := add(cursor, length) // 88 + enableDataLength + validatorData.offset := add(add(initData.offset, 52), calldataload(add(initData.offset, 20))) + validatorData.length := calldataload(sub(validatorData.offset, 32)) + hookData.offset := add(add(initData.offset, 52), calldataload(add(initData.offset, 52))) + hookData.length := calldataload(sub(hookData.offset, 32)) } - length = uint256(bytes32(signature[cursor:cursor + 32])); // this is enableSigLength + _installValidation(vId, config, validatorData, hookData); + //_installHook(config.hook, hookData); hook install is handled inside installvalidation + } else if (moduleType == MODULE_TYPE_EXECUTOR) { + bytes calldata executorData; + bytes calldata hookData; assembly { - cursor := add(cursor, 32) + executorData.offset := add(add(initData.offset, 52), calldataload(add(initData.offset, 20))) + executorData.length := calldataload(sub(executorData.offset, 32)) + hookData.offset := add(add(initData.offset, 52), calldataload(add(initData.offset, 52))) + hookData.length := calldataload(sub(hookData.offset, 32)) } - bytes32 enableDigest = _hashTypedData( - keccak256( - abi.encode( - VALIDATOR_APPROVED_STRUCT_HASH, - bytes4(sig), - uint256(bytes32(signature[4:36])), - address(bytes20(signature[36:56])), - keccak256(enableData) - ) - ) - ); - validationData = _intersectValidationData( - _validateSignature(address(this), enableDigest, enableDigest, signature[cursor:cursor + length]), - ValidationData.wrap( - uint256(bytes32(signature[4:36])) - & 0xffffffffffffffffffffffff0000000000000000000000000000000000000000 - ) - ); + IHook hook = IHook(address(bytes20(initData[0:20]))); + _installExecutor(IExecutor(module), executorData, hook); + _installHook(hook, hookData); + } else if (moduleType == MODULE_TYPE_FALLBACK) { + bytes calldata selectorData; + bytes calldata hookData; assembly { - cursor := add(cursor, length) - validationSig.offset := add(signature.offset, cursor) - validationSig.length := sub(signature.length, cursor) + selectorData.offset := add(add(initData.offset, 56), calldataload(add(initData.offset, 24))) + selectorData.length := calldataload(sub(selectorData.offset, 32)) + hookData.offset := add(add(initData.offset, 56), calldataload(add(initData.offset, 56))) + hookData.length := calldataload(sub(hookData.offset, 32)) } - getKernelStorage().execution[sig] = ExecutionDetail({ - validAfter: ValidAfter.wrap(uint48(bytes6(signature[4:10]))), - validUntil: ValidUntil.wrap(uint48(bytes6(signature[10:16]))), - executor: address(bytes20(signature[36:56])), - validator: IKernelValidator(address(bytes20(signature[16:36]))) - }); - validator.enable(enableData); + _installSelector(bytes4(initData[0:4]), module, IHook(address(bytes20(initData[4:24]))), selectorData); + _installHook(IHook(address(bytes20(initData[4:24]))), hookData); + } else if (moduleType == MODULE_TYPE_HOOK) { + // force call onInstall for hook + // NOTE: for hook, kernel does not support independant hook install, + // hook is expected to be paired with proper validator/executor/selector + IHook(module).onInstall(initData); + } else if (moduleType == MODULE_TYPE_POLICY) { + // force call onInstall for policy + // NOTE: for policy, kernel does not support independant policy install, + // policy is expected to be paired with proper permissionId + // to "ADD" permission, use "installValidations()" function + IPolicy(module).onInstall(initData); + } else if (moduleType == MODULE_TYPE_SIGNER) { + // force call onInstall for signer + // NOTE: for signer, kernel does not support independant signer install, + // signer is expected to be paired with proper permissionId + // to "ADD" permission, use "installValidations()" function + ISigner(module).onInstall(initData); + } else { + revert InvalidModuleType(); } } - /// @dev Validates a signature for the given kernel - /// @param hash The hash of the data that was signed - /// @param signature The signature to be validated - function validateSignature(bytes32 hash, bytes calldata signature) public view returns (ValidationData) { - return _validateSignature(msg.sender, hash, hash, signature); + function installValidations( + ValidationId[] calldata vIds, + ValidationConfig[] memory configs, + bytes[] calldata validationData, + bytes[] calldata hookData + ) external payable onlyEntryPointOrSelfOrRoot { + _installValidations(vIds, configs, validationData, hookData); } - /// @dev Get the current name & version of the kernel, used for the EIP-712 domain separator - function _domainNameAndVersion() internal pure override returns (string memory, string memory) { - return (name, version); + function uninstallValidation(ValidationId vId, bytes calldata deinitData, bytes calldata hookDeinitData) + external + payable + onlyEntryPointOrSelfOrRoot + { + IHook hook = _uninstallValidation(vId, deinitData); + _uninstallHook(hook, hookDeinitData); } - /// @dev Get an EIP-712 compliant domain separator - function _domainSeparator() internal view override returns (bytes32) { - // Obtain the name and version from the _domainNameAndVersion function. - (string memory _name, string memory _version) = _domainNameAndVersion(); - bytes32 nameHash = keccak256(bytes(_name)); - bytes32 versionHash = keccak256(bytes(_version)); - - // Use the proxy address for the EIP-712 domain separator. - address proxyAddress = address(this); - - // Construct the domain separator with name, version, chainId, and proxy address. - bytes32 typeHash = EIP712_DOMAIN_TYPEHASH; - return keccak256(abi.encode(typeHash, nameHash, versionHash, block.chainid, proxyAddress)); + function invalidateNonce(uint32 nonce) external payable onlyEntryPointOrSelfOrRoot { + _invalidateNonce(nonce); } - /// @notice Checks if a signature is valid - /// @dev This function checks if a signature is valid based on the hash of the data signed. - /// @param hash The hash of the data that was signed - /// @param signature The signature to be validated - /// @return The magic value 0x1626ba7e if the signature is valid, otherwise returns 0xffffffff. - function isValidSignature(bytes32 hash, bytes calldata signature) public view returns (bytes4) { - // Include the proxy address in the domain separator - bytes32 domainSeparator = _domainSeparator(); - - // Recreate the signed message hash with the correct domain separator - bytes32 signedMessageHash = keccak256(abi.encodePacked("\x19\x01", domainSeparator, hash)); - - ValidationData validationData = _validateSignature(msg.sender, signedMessageHash, hash, signature); - (ValidAfter validAfter, ValidUntil validUntil, address result) = parseValidationData(validationData); - - // Check if the signature is valid within the specified time frame and the result is successful - if ( - ValidAfter.unwrap(validAfter) <= block.timestamp && ValidUntil.unwrap(validUntil) >= block.timestamp - && result == address(0) - ) { - // If all checks pass, return the ERC1271 magic value for a valid signature - return 0x1626ba7e; + function uninstallModule(uint256 moduleType, address module, bytes calldata deInitData) + external + payable + override + onlyEntryPointOrSelfOrRoot + { + if (moduleType == 1) { + ValidationId vId = ValidatorLib.validatorToIdentifier(IValidator(module)); + _uninstallValidation(vId, deInitData); + } else if (moduleType == 2) { + _uninstallExecutor(IExecutor(module), deInitData); + } else if (moduleType == 3) { + bytes4 selector = bytes4(deInitData[0:4]); + _uninstallSelector(selector, deInitData[4:]); + } else if (moduleType == 4) { + ValidationId vId = _validationStorage().rootValidator; + if (_validationStorage().validationConfig[vId].hook == IHook(module)) { + // when root validator hook is being removed + // remove hook on root validator to prevent kernel from being locked + _validationStorage().validationConfig[vId].hook = IHook(address(1)); + } + // force call onInstall for hook + // NOTE: for hook, kernel does not support independant hook install, + // hook is expected to be paired with proper validator/executor/selector + ModuleLib.uninstallModule(module, deInitData); + } else if (moduleType == 5) { + ValidationId rootValidator = _validationStorage().rootValidator; + bytes32 permissionId = bytes32(deInitData[0:32]); + if (ValidatorLib.getType(rootValidator) == VALIDATION_TYPE_PERMISSION) { + if (permissionId == bytes32(PermissionId.unwrap(ValidatorLib.getPermissionId(rootValidator)))) { + revert RootValidatorCannotBeRemoved(); + } + } + // force call onInstall for policy + // NOTE: for policy, kernel does not support independant policy install, + // policy is expected to be paired with proper permissionId + // to "REMOVE" permission, use "uninstallValidation()" function + ModuleLib.uninstallModule(module, deInitData); + } else if (moduleType == 6) { + ValidationId rootValidator = _validationStorage().rootValidator; + bytes32 permissionId = bytes32(deInitData[0:32]); + if (ValidatorLib.getType(rootValidator) == VALIDATION_TYPE_PERMISSION) { + if (permissionId == bytes32(PermissionId.unwrap(ValidatorLib.getPermissionId(rootValidator)))) { + revert RootValidatorCannotBeRemoved(); + } + } + // force call onInstall for signer + // NOTE: for signer, kernel does not support independant signer install, + // signer is expected to be paired with proper permissionId + // to "REMOVE" permission, use "uninstallValidation()" function + ModuleLib.uninstallModule(module, deInitData); } else { - // If any check fails, return the failure magic value - return 0xffffffff; + revert InvalidModuleType(); } } - /// @dev Check if the current caller is authorized or no to perform the call - /// @return True if the caller is authorized, otherwise false - function _checkCaller() internal returns (bool) { - if (_validCaller(msg.sender, msg.data)) { + function supportsModule(uint256 moduleTypeId) external pure override returns (bool) { + if (moduleTypeId < 7) { return true; - } - bytes4 sig = msg.sig; - ExecutionDetail storage detail = getKernelStorage().execution[sig]; - if ( - address(detail.validator) == address(0) - || (ValidUntil.unwrap(detail.validUntil) != 0 && ValidUntil.unwrap(detail.validUntil) < block.timestamp) - || ValidAfter.unwrap(detail.validAfter) > block.timestamp - ) { - return false; } else { - return detail.validator.validCaller(msg.sender, msg.data); + return false; } } - /// @dev This function will validate user operation and be called by EntryPoint - /// @param _op The user operation to be validated - /// @param _opHash The hash of the user operation - /// @param _missingFunds The funds needed to be reimbursed - function _validateUserOp(UserOperation calldata _op, bytes32 _opHash, uint256 _missingFunds) - internal - virtual - returns (ValidationData) + function isModuleInstalled(uint256 moduleType, address module, bytes calldata additionalContext) + external + view + override + returns (bool) { - // Replace the user op in memory to update the signature - UserOperation memory op = _op; - // Remove the validation mode flag from the signature - op.signature = _op.signature[4:]; - - IKernelValidator validator; - assembly { - validator := shr(80, sload(KERNEL_STORAGE_SLOT_1)) + if (moduleType == MODULE_TYPE_VALIDATOR) { + return _validationStorage().validationConfig[ValidatorLib.validatorToIdentifier(IValidator(module))].hook + != IHook(address(0)); + } else if (moduleType == MODULE_TYPE_EXECUTOR) { + return address(_executorConfig(IExecutor(module)).hook) != address(0); + } else if (moduleType == MODULE_TYPE_FALLBACK) { + return _selectorConfig(bytes4(additionalContext[0:4])).target == module; + } else { + return false; } - return IKernelValidator(validator).validateUserOp(op, _opHash, _missingFunds); } - /// @dev This function will validate a signature for the given kernel - /// @param _hash The hash of the data that was signed - /// @param _signature The signature to be validated - /// @return The magic value 0x1626ba7e if the signature is valid, otherwise returns 0xffffffff. - function _validateSignature(address _requestor, bytes32 _hash, bytes32 _rawHash, bytes calldata _signature) - internal - view - virtual - returns (ValidationData) - { - address validator; - assembly { - validator := shr(80, sload(KERNEL_STORAGE_SLOT_1)) - } - // 20 bytes added at the end of the signature to store the address of the caller - (bool success, bytes memory res) = validator.staticcall( - abi.encodePacked( - abi.encodeWithSelector(IKernelValidator.validateSignature.selector, _hash, _signature), - _rawHash, - _requestor - ) - ); - require(success, "Kernel::_validateSignature: failed to validate signature"); - return abi.decode(res, (ValidationData)); + function accountId() external pure override returns (string memory accountImplementationId) { + return "kernel.advanced.v0.3.0-beta"; } - /// @dev Check if the given caller is valid for the given data - /// @param _caller The caller to be checked - /// @param _data The data to be checked - /// @return True if the caller is valid, otherwise false - function _validCaller(address _caller, bytes calldata _data) internal virtual returns (bool) { - address validator; - assembly { - // Load the validator from the storage slot - validator := shr(80, sload(KERNEL_STORAGE_SLOT_1)) + function supportsExecutionMode(ExecMode mode) external pure override returns (bool) { + (CallType callType, ExecType execType, ExecModeSelector selector, ExecModePayload payload) = + ExecLib.decode(mode); + if ( + callType != CALLTYPE_BATCH && callType != CALLTYPE_SINGLE && callType != CALLTYPE_DELEGATECALL + && callType != CALLTYPE_STATIC + ) { + return false; + } + + if ( + ExecType.unwrap(execType) != ExecType.unwrap(EXECTYPE_TRY) + && ExecType.unwrap(execType) != ExecType.unwrap(EXECTYPE_DEFAULT) + ) { + return false; + } + + if (ExecModeSelector.unwrap(selector) != ExecModeSelector.unwrap(EXEC_MODE_DEFAULT)) { + return false; + } + + if (ExecModePayload.unwrap(payload) != bytes22(0)) { + return false; } - return IKernelValidator(validator).validCaller(_caller, _data); + return true; } } diff --git a/src/abstract/Compatibility.sol b/src/abstract/Compatibility.sol deleted file mode 100644 index 0361d99c..00000000 --- a/src/abstract/Compatibility.sol +++ /dev/null @@ -1,26 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -abstract contract Compatibility { - event Received(address sender, uint256 amount); - - receive() external payable { - emit Received(msg.sender, msg.value); - } - - function onERC721Received(address, address, uint256, bytes calldata) external pure returns (bytes4) { - return this.onERC721Received.selector; - } - - function onERC1155Received(address, address, uint256, uint256, bytes calldata) external pure returns (bytes4) { - return this.onERC1155Received.selector; - } - - function onERC1155BatchReceived(address, address, uint256[] calldata, uint256[] calldata, bytes calldata) - external - pure - returns (bytes4) - { - return this.onERC1155BatchReceived.selector; - } -} diff --git a/src/abstract/KernelStorage.sol b/src/abstract/KernelStorage.sol deleted file mode 100644 index fb968ebf..00000000 --- a/src/abstract/KernelStorage.sol +++ /dev/null @@ -1,130 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -// Importing necessary interfaces -import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol"; -import {IKernelValidator} from "../interfaces/IKernelValidator.sol"; -import {IKernel} from "../interfaces/IKernel.sol"; -import {KERNEL_STORAGE_SLOT, KERNEL_STORAGE_SLOT_1, IMPLEMENTATION_SLOT} from "../common/Constants.sol"; -import {ExecutionDetail, WalletKernelStorage} from "../common/Structs.sol"; -import {ValidUntil, ValidAfter} from "../common/Types.sol"; - -/// @title Kernel Storage Contract -/// @author taek -/// @notice This contract serves as the storage module for the Kernel contract. -/// @dev This contract should only be used by the main Kernel contract. -abstract contract KernelStorage is IKernel { - IEntryPoint public immutable entryPoint; // The entry point of the contract - - // Modifier to check if the function is called by the entry point, the contract itself or the owner - modifier onlyFromEntryPointOrSelf() { - if (msg.sender != address(entryPoint) && msg.sender != address(this)) { - revert NotAuthorizedCaller(); - } - _; - } - - /// @param _entryPoint The address of the EntryPoint contract - /// @dev Sets up the EntryPoint contract address - constructor(IEntryPoint _entryPoint) { - entryPoint = _entryPoint; - getKernelStorage().defaultValidator = IKernelValidator(address(1)); - } - - // Function to initialize the wallet kernel - function initialize(IKernelValidator _defaultValidator, bytes calldata _data) external payable override { - _setInitialData(_defaultValidator, _data); - } - - // Function to get the wallet kernel storage - function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) { - assembly { - ws.slot := KERNEL_STORAGE_SLOT - } - } - - // Function to upgrade the contract to a new implementation - function upgradeTo(address _newImplementation) external payable override onlyFromEntryPointOrSelf { - assembly { - sstore(IMPLEMENTATION_SLOT, _newImplementation) - } - emit Upgraded(_newImplementation); - } - - // Functions to get the nonce from the entry point - function getNonce() external view virtual returns (uint256) { - return entryPoint.getNonce(address(this), 0); - } - - function getNonce(uint192 key) external view virtual returns (uint256) { - return entryPoint.getNonce(address(this), key); - } - - // query storage - function getDefaultValidator() external view override returns (IKernelValidator validator) { - assembly { - validator := shr(80, sload(KERNEL_STORAGE_SLOT_1)) - } - } - - function getDisabledMode() external view override returns (bytes4 disabled) { - assembly { - disabled := shl(224, sload(KERNEL_STORAGE_SLOT_1)) - } - } - - function getLastDisabledTime() external view override returns (uint48) { - return getKernelStorage().lastDisabledTime; - } - - function getExecution(bytes4 _selector) external view override returns (ExecutionDetail memory) { - return getKernelStorage().execution[_selector]; - } - - function setExecution( - bytes4 _selector, - address _executor, - IKernelValidator _validator, - ValidUntil _validUntil, - ValidAfter _validAfter, - bytes calldata _enableData - ) external payable override onlyFromEntryPointOrSelf { - getKernelStorage().execution[_selector] = ExecutionDetail({ - executor: _executor, - validator: _validator, - validUntil: _validUntil, - validAfter: _validAfter - }); - _validator.enable(_enableData); - emit ExecutionChanged(_selector, _executor, address(_validator)); - } - - function setDefaultValidator(IKernelValidator _defaultValidator, bytes calldata _data) - external - payable - virtual - onlyFromEntryPointOrSelf - { - IKernelValidator oldValidator = getKernelStorage().defaultValidator; - getKernelStorage().defaultValidator = _defaultValidator; - emit DefaultValidatorChanged(address(oldValidator), address(_defaultValidator)); - _defaultValidator.enable(_data); - } - - function disableMode(bytes4 _disableFlag) external payable override onlyFromEntryPointOrSelf { - getKernelStorage().disabledMode = _disableFlag; - getKernelStorage().lastDisabledTime = uint48(block.timestamp); - } - - function _setInitialData(IKernelValidator _defaultValidator, bytes calldata _data) internal virtual { - address validator; - assembly { - validator := shr(80, sload(KERNEL_STORAGE_SLOT_1)) - } - if (address(validator) != address(0)) { - revert AlreadyInitialized(); - } - getKernelStorage().defaultValidator = _defaultValidator; - _defaultValidator.enable(_data); - } -} diff --git a/src/common/Constants.sol b/src/common/Constants.sol deleted file mode 100644 index a8de9076..00000000 --- a/src/common/Constants.sol +++ /dev/null @@ -1,27 +0,0 @@ -pragma solidity ^0.8.0; - -import {ValidationData} from "./Types.sol"; - -// Constants for kernel metadata -string constant KERNEL_NAME = "Kernel"; -string constant KERNEL_VERSION = "0.2.4"; - -// ERC4337 constants -uint256 constant SIG_VALIDATION_FAILED_UINT = 1; -ValidationData constant SIG_VALIDATION_FAILED = ValidationData.wrap(SIG_VALIDATION_FAILED_UINT); - -// STRUCT_HASH - -/// @dev Struct hash for the ValidatorApproved struct -> keccak256("ValidatorApproved(bytes4 sig,uint256 validatorData,address executor,bytes enableData)") -bytes32 constant VALIDATOR_APPROVED_STRUCT_HASH = 0x3ce406685c1b3551d706d85a68afdaa49ac4e07b451ad9b8ff8b58c3ee964176; - -/* -------------------------------------------------------------------------- */ -/* Storage slots */ -/* -------------------------------------------------------------------------- */ - -/// @dev Storage slot for the kernel storage -bytes32 constant KERNEL_STORAGE_SLOT = 0x439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd8; -/// @dev Storage pointer inside the kernel storage, with 1 offset, to access directly disblaedMode, disabled date and default validator -bytes32 constant KERNEL_STORAGE_SLOT_1 = 0x439ffe7df606b78489639bc0b827913bd09e1246fa6802968a5b3694c53e0dd9; -/// @dev Storage slot for the logic implementation address -bytes32 constant IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; diff --git a/src/common/Enums.sol b/src/common/Enums.sol deleted file mode 100644 index 4a3668aa..00000000 --- a/src/common/Enums.sol +++ /dev/null @@ -1,15 +0,0 @@ -pragma solidity ^0.8.0; - -enum Operation { - Call, - DelegateCall -} - -enum ParamCondition { - EQUAL, - GREATER_THAN, - LESS_THAN, - GREATER_THAN_OR_EQUAL, - LESS_THAN_OR_EQUAL, - NOT_EQUAL -} diff --git a/src/common/Structs.sol b/src/common/Structs.sol deleted file mode 100644 index ab957155..00000000 --- a/src/common/Structs.sol +++ /dev/null @@ -1,69 +0,0 @@ -pragma solidity ^0.8.0; - -import {IKernelValidator} from "../interfaces/IKernelValidator.sol"; -import {ParamCondition, Operation} from "./Enums.sol"; -import {ValidAfter, ValidUntil} from "./Types.sol"; - -// Defining a struct for execution details -struct ExecutionDetail { - ValidAfter validAfter; // Until what time is this execution valid - ValidUntil validUntil; // After what time is this execution valid - address executor; // Who is the executor of this execution - IKernelValidator validator; // The validator for this execution -} - -struct Call { - address to; - uint256 value; - bytes data; -} - -// Defining a struct for wallet kernel storage -struct WalletKernelStorage { - bytes32 __deprecated; // A deprecated field - bytes4 disabledMode; // Mode which is currently disabled - uint48 lastDisabledTime; // Last time when a mode was disabled - IKernelValidator defaultValidator; // Default validator for the wallet - mapping(bytes4 => ExecutionDetail) execution; // Mapping of function selectors to execution details -} - -// Param Rule for session key -struct Nonces { - uint128 lastNonce; - uint128 invalidNonce; -} - -struct ParamRule { - uint256 offset; - ParamCondition condition; - bytes32 param; -} - -struct ExecutionRule { - ValidAfter validAfter; // 48 bits - uint48 interval; // 48 bits - uint48 runs; // 48 bits -} - -struct ExecutionStatus { - ValidAfter validAfter; // 48 bits - uint48 runs; // 48 bits -} - -struct Permission { - uint32 index; - address target; - bytes4 sig; - uint256 valueLimit; - ParamRule[] rules; - ExecutionRule executionRule; - Operation operation; -} - -struct SessionData { - bytes32 merkleRoot; - ValidAfter validAfter; - ValidUntil validUntil; - address paymaster; // address(0) means accept userOp without paymaster, address(1) means reject userOp with paymaster, other address means accept userOp with paymaster with the address - uint256 nonce; -} diff --git a/src/common/Types.sol b/src/common/Types.sol deleted file mode 100644 index 81ef36f4..00000000 --- a/src/common/Types.sol +++ /dev/null @@ -1,36 +0,0 @@ -pragma solidity ^0.8.9; - -type ValidAfter is uint48; - -type ValidUntil is uint48; - -type ValidationData is uint256; - -function packValidationData(ValidAfter validAfter, ValidUntil validUntil) pure returns (ValidationData) { - return ValidationData.wrap( - uint256(ValidAfter.unwrap(validAfter)) << 208 | uint256(ValidUntil.unwrap(validUntil)) << 160 - ); -} - -function packValidationData(address aggregator, ValidAfter validAfter, ValidUntil validUntil) - pure - returns (ValidationData) -{ - return ValidationData.wrap( - uint256(ValidAfter.unwrap(validAfter)) << 208 | uint256(ValidUntil.unwrap(validUntil)) << 160 - | uint160(aggregator) - ); -} - -function parseValidationData(ValidationData validationData) - pure - returns (ValidAfter validAfter, ValidUntil validUntil, address result) -{ - assembly { - result := validationData - validUntil := and(shr(160, validationData), 0xffffffffffff) - switch iszero(validUntil) - case 1 { validUntil := 0xffffffffffff } - validAfter := shr(208, validationData) - } -} diff --git a/src/core/ExecutorManager.sol b/src/core/ExecutorManager.sol new file mode 100644 index 00000000..074ec723 --- /dev/null +++ b/src/core/ExecutorManager.sol @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import {IHook, IExecutor} from "../interfaces/IERC7579Modules.sol"; +import {ModuleLib} from "../utils/ModuleLib.sol"; +import {EXECUTOR_MANAGER_STORAGE_SLOT} from "../types/Constants.sol"; + +abstract contract ExecutorManager { + struct ExecutorConfig { + IHook hook; // address(1) : hook not required, address(0) : validator not installed + } + + struct ExecutorStorage { + mapping(IExecutor => ExecutorConfig) executorConfig; + } + + function executorConfig(IExecutor executor) external view returns (ExecutorConfig memory) { + return _executorConfig(executor); + } + + function _executorConfig(IExecutor executor) internal view returns (ExecutorConfig storage config) { + ExecutorStorage storage es; + bytes32 slot = EXECUTOR_MANAGER_STORAGE_SLOT; + assembly { + es.slot := slot + } + config = es.executorConfig[executor]; + } + + function _installExecutor(IExecutor executor, bytes calldata executorData, IHook hook) internal { + if (address(hook) == address(0)) { + hook = IHook(address(1)); + } + ExecutorConfig storage config = _executorConfig(executor); + config.hook = hook; + executor.onInstall(executorData); + } + + function _installExecutorWithoutInit(IExecutor executor, IHook hook) internal { + if (address(hook) == address(0)) { + hook = IHook(address(1)); + } + ExecutorConfig storage config = _executorConfig(executor); + config.hook = hook; + } + + function _uninstallExecutor(IExecutor executor, bytes calldata executorData) internal returns (IHook hook) { + ExecutorConfig storage config = _executorConfig(executor); + hook = config.hook; + config.hook = IHook(address(0)); + ModuleLib.uninstallModule(address(executor), executorData); + } +} diff --git a/src/core/HookManager.sol b/src/core/HookManager.sol new file mode 100644 index 00000000..f622f515 --- /dev/null +++ b/src/core/HookManager.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import {IHook} from "../interfaces/IERC7579Modules.sol"; +import {ModuleLib} from "../utils/ModuleLib.sol"; + +abstract contract HookManager { + // NOTE: currently, all install/uninstall calls onInstall/onUninstall + // I assume this does not pose any security risks, but there should be a way to branch if hook needs call to onInstall/onUninstall + // --- Hook --- + // Hook is activated on these scenarios + // - on 4337 flow, userOp.calldata starts with executeUserOp.selector && validator requires hook + // - executeFromExecutor() is invoked and executor requires hook + // - when fallback function has been invoked and fallback requires hook => native functions will not invoke hook + function _doPreHook(IHook hook, uint256 value, bytes calldata callData) internal returns (bytes memory context) { + context = hook.preCheck(msg.sender, value, callData); + } + + function _doPostHook(IHook hook, bytes memory context, bool success, bytes memory result) internal { + // bool success, + // bytes memory result + hook.postCheck(context, success, result); + } + + // @notice if hook is not initialized before, kernel will call hook.onInstall no matter what flag it shows, with hookData[1:] + // @param hookData is encoded into (1bytes flag + actual hookdata) flag is for identifying if the hook has to be initialized or not + function _installHook(IHook hook, bytes calldata hookData) internal { + if (address(hook) == address(0) || address(hook) == address(1)) { + return; + } + if (!hook.isInitialized(address(this))) { + // if hook is not installed, it should call onInstall + hook.onInstall(hookData[1:]); + return; + } + if (bytes1(hookData[0]) == bytes1(0xff)) { + // 0xff means you want to explicitly call install hook + hook.onInstall(hookData[1:]); + } + } + + // @param hookData encoded as (1bytes flag + actual hookdata) flag is for identifying if the hook has to be initialized or not + function _uninstallHook(IHook hook, bytes calldata hookData) internal { + if (address(hook) == address(0) || address(hook) == address(1)) { + return; + } + if (bytes1(hookData[0]) == bytes1(0xff)) { + // 0xff means you want to call uninstall hook + ModuleLib.uninstallModule(address(hook), hookData[1:]); + } + } +} diff --git a/src/core/SelectorManager.sol b/src/core/SelectorManager.sol new file mode 100644 index 00000000..e5a09e92 --- /dev/null +++ b/src/core/SelectorManager.sol @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import {IHook, IFallback, IModule} from "../interfaces/IERC7579Modules.sol"; +import {CallType} from "../utils/ExecLib.sol"; +import {SELECTOR_MANAGER_STORAGE_SLOT, CALLTYPE_DELEGATECALL, CALLTYPE_SINGLE} from "../types/Constants.sol"; +import {ModuleLib} from "../utils/ModuleLib.sol"; + +abstract contract SelectorManager { + error NotSupportedCallType(); + + struct SelectorConfig { + IHook hook; // 20 bytes for hook address + address target; // 20 bytes target will be fallback module, called with call + CallType callType; + } + + struct SelectorStorage { + mapping(bytes4 => SelectorConfig) selectorConfig; + } + + function selectorConfig(bytes4 selector) external view returns (SelectorConfig memory) { + return _selectorConfig(selector); + } + + function _selectorConfig(bytes4 selector) internal view returns (SelectorConfig storage config) { + config = _selectorStorage().selectorConfig[selector]; + } + + function _selectorStorage() internal pure returns (SelectorStorage storage ss) { + bytes32 slot = SELECTOR_MANAGER_STORAGE_SLOT; + assembly { + ss.slot := slot + } + } + + function _installSelector(bytes4 selector, address target, IHook hook, bytes calldata selectorData) internal { + if (address(hook) == address(0)) { + hook = IHook(address(1)); + } + SelectorConfig storage ss = _selectorConfig(selector); + // we are going to install only through call/delegatecall + CallType callType = CallType.wrap(bytes1(selectorData[0])); + if (callType == CALLTYPE_SINGLE) { + IModule(target).onInstall(selectorData[1:]); + } else if (callType != CALLTYPE_DELEGATECALL) { + // NOTE : we are not going to call onInstall for delegatecall, and we support only CALL & DELEGATECALL + revert NotSupportedCallType(); + } + ss.hook = hook; + ss.target = target; + ss.callType = callType; + } + + function _uninstallSelector(bytes4 selector, bytes calldata selectorDeinitData) internal returns (IHook hook) { + SelectorConfig storage ss = _selectorConfig(selector); + hook = ss.hook; + ss.hook = IHook(address(0)); + ModuleLib.uninstallModule(ss.target, selectorDeinitData); + ss.target = address(0); + ss.callType = CallType.wrap(bytes1(0xff)); + } +} diff --git a/src/core/ValidationManager.sol b/src/core/ValidationManager.sol new file mode 100644 index 00000000..a00e1f08 --- /dev/null +++ b/src/core/ValidationManager.sol @@ -0,0 +1,585 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IValidator, IModule, IExecutor, IHook, IPolicy, ISigner, IFallback} from "../interfaces/IERC7579Modules.sol"; +import {PackedUserOperation} from "../interfaces/PackedUserOperation.sol"; +import {SelectorManager} from "./SelectorManager.sol"; +import {HookManager} from "./HookManager.sol"; +import {ExecutorManager} from "./ExecutorManager.sol"; +import {ValidationData, ValidAfter, ValidUntil, parseValidationData} from "../interfaces/IAccount.sol"; +import {IAccountExecute} from "../interfaces/IAccountExecute.sol"; +import {EIP712} from "solady/utils/EIP712.sol"; +import {ModuleLib} from "../utils/ModuleLib.sol"; +import { + ValidationId, + PolicyData, + ValidationMode, + ValidationType, + ValidatorLib, + PassFlag +} from "../utils/ValidationTypeLib.sol"; + +import {CallType} from "../utils/ExecLib.sol"; +import {CALLTYPE_SINGLE} from "../types/Constants.sol"; + +import {PermissionId, getValidationResult} from "../types/Types.sol"; +import {_intersectValidationData} from "../utils/KernelValidationResult.sol"; + +import { + VALIDATION_MODE_DEFAULT, + VALIDATION_MODE_ENABLE, + VALIDATION_TYPE_ROOT, + VALIDATION_TYPE_VALIDATOR, + VALIDATION_TYPE_PERMISSION, + SKIP_USEROP, + SKIP_SIGNATURE, + VALIDATION_MANAGER_STORAGE_SLOT, + MAX_NONCE_INCREMENT_SIZE, + ENABLE_TYPE_HASH, + KERNEL_WRAPPER_TYPE_HASH +} from "../types/Constants.sol"; + +abstract contract ValidationManager is EIP712, SelectorManager, HookManager, ExecutorManager { + event RootValidatorUpdated(ValidationId rootValidator); + event ValidatorInstalled(IValidator validator, uint32 nonce); + event PermissionInstalled(PermissionId permission, uint32 nonce); + event NonceInvalidated(uint32 nonce); + event ValidatorUninstalled(IValidator validator); + event PermissionUninstalled(PermissionId permission); + event SelectorSet(bytes4 selector, ValidationId vId, bool allowed); + + error InvalidMode(); + error InvalidValidator(); + error InvalidSignature(); + error EnableNotApproved(); + error PolicySignatureOrderError(); + error SignerPrefixNotPresent(); + error PolicyDataTooLarge(); + error InvalidValidationType(); + error InvalidNonce(); + error PolicyFailed(uint256 i); + error PermissionNotAlllowedForUserOp(); + error PermissionNotAlllowedForSignature(); + error PermissionDataLengthMismatch(); + error NonceInvalidationError(); + error RootValidatorCannotBeRemoved(); + + // erc7579 plugins + struct ValidationConfig { + uint32 nonce; // 4 bytes + IHook hook; // 20 bytes address(1) : hook not required, address(0) : validator not installed + } + + struct PermissionConfig { + PassFlag permissionFlag; + ISigner signer; + PolicyData[] policyData; + } + + struct ValidationStorage { + ValidationId rootValidator; + uint32 currentNonce; + uint32 validNonceFrom; + mapping(ValidationId => ValidationConfig) validationConfig; + mapping(ValidationId => mapping(bytes4 => bool)) allowedSelectors; + // validation = validator | permission + // validator == 1 validator + // permission == 1 signer + N policies + mapping(PermissionId => PermissionConfig) permissionConfig; + } + + function rootValidator() external view returns (ValidationId) { + return _validationStorage().rootValidator; + } + + function currentNonce() external view returns (uint32) { + return _validationStorage().currentNonce; + } + + function validNonceFrom() external view returns (uint32) { + return _validationStorage().validNonceFrom; + } + + function isAllowedSelector(ValidationId vId, bytes4 selector) external view returns (bool) { + return _validationStorage().allowedSelectors[vId][selector]; + } + + function validationConfig(ValidationId vId) external view returns (ValidationConfig memory) { + return _validationStorage().validationConfig[vId]; + } + + function permissionConfig(PermissionId pId) external view returns (PermissionConfig memory) { + return (_validationStorage().permissionConfig[pId]); + } + + function _validationStorage() internal pure returns (ValidationStorage storage state) { + assembly { + state.slot := VALIDATION_MANAGER_STORAGE_SLOT + } + } + + function _setRootValidator(ValidationId _rootValidator) internal { + ValidationStorage storage vs = _validationStorage(); + vs.rootValidator = _rootValidator; + emit RootValidatorUpdated(_rootValidator); + } + + function _invalidateNonce(uint32 nonce) internal { + ValidationStorage storage state = _validationStorage(); + if (state.currentNonce + MAX_NONCE_INCREMENT_SIZE < nonce) { + revert NonceInvalidationError(); + } + if (nonce <= state.validNonceFrom) { + revert InvalidNonce(); + } + state.validNonceFrom = nonce; + if (state.currentNonce < state.validNonceFrom) { + state.currentNonce = state.validNonceFrom; + } + } + + // allow installing multiple validators with same nonce + function _installValidations( + ValidationId[] calldata validators, + ValidationConfig[] memory configs, + bytes[] calldata validatorData, + bytes[] calldata hookData + ) internal { + unchecked { + for (uint256 i = 0; i < validators.length; i++) { + _installValidation(validators[i], configs[i], validatorData[i], hookData[i]); + } + } + } + + function _setSelector(ValidationId vId, bytes4 selector, bool allowed) internal { + ValidationStorage storage state = _validationStorage(); + state.allowedSelectors[vId][selector] = allowed; + emit SelectorSet(selector, vId, allowed); + } + + // for uninstall, we support uninstall for validator mode by calling onUninstall + // but for permission mode, we do it naively by setting hook to address(0). + // it is more recommended to use a nonce revoke to make sure the validator has been revoked + // also, we are not calling hook.onInstall here + function _uninstallValidation(ValidationId vId, bytes calldata validatorData) internal returns (IHook hook) { + ValidationStorage storage state = _validationStorage(); + if (vId == state.rootValidator) { + revert RootValidatorCannotBeRemoved(); + } + hook = state.validationConfig[vId].hook; + state.validationConfig[vId].hook = IHook(address(0)); + ValidationType vType = ValidatorLib.getType(vId); + if (vType == VALIDATION_TYPE_VALIDATOR) { + IValidator validator = ValidatorLib.getValidator(vId); + ModuleLib.uninstallModule(address(validator), validatorData); + } else if (vType == VALIDATION_TYPE_PERMISSION) { + PermissionId permission = ValidatorLib.getPermissionId(vId); + _uninstallPermission(permission, validatorData); + } else { + revert InvalidValidationType(); + } + } + + function _uninstallPermission(PermissionId pId, bytes calldata data) internal { + bytes[] calldata permissionDisableData; + assembly { + permissionDisableData.offset := add(add(data.offset, 32), calldataload(data.offset)) + permissionDisableData.length := calldataload(sub(permissionDisableData.offset, 32)) + } + PermissionConfig storage config = _validationStorage().permissionConfig[pId]; + unchecked { + if (permissionDisableData.length != config.policyData.length + 1) { + revert PermissionDataLengthMismatch(); + } + PolicyData[] storage policyData = config.policyData; + for (uint256 i = 0; i < policyData.length; i++) { + (, IPolicy policy) = ValidatorLib.decodePolicyData(policyData[i]); + ModuleLib.uninstallModule( + address(policy), abi.encodePacked(bytes32(PermissionId.unwrap(pId)), permissionDisableData[i]) + ); + } + delete _validationStorage().permissionConfig[pId].policyData; + ModuleLib.uninstallModule( + address(config.signer), + abi.encodePacked( + bytes32(PermissionId.unwrap(pId)), permissionDisableData[permissionDisableData.length - 1] + ) + ); + } + config.signer = ISigner(address(0)); + config.permissionFlag = PassFlag.wrap(bytes2(0)); + } + + function _installValidation( + ValidationId vId, + ValidationConfig memory config, + bytes calldata validatorData, + bytes calldata hookData + ) internal { + ValidationStorage storage state = _validationStorage(); + if (state.validationConfig[vId].nonce == state.currentNonce) { + // only increase currentNonce when vId's currentNonce is same + unchecked { + state.currentNonce++; + } + } + if (config.hook == IHook(address(0))) { + config.hook = IHook(address(1)); + } + if (state.currentNonce != config.nonce || state.validationConfig[vId].nonce >= config.nonce) { + revert InvalidNonce(); + } + state.validationConfig[vId] = config; + if (config.hook != IHook(address(1))) { + _installHook(config.hook, hookData); + } + ValidationType vType = ValidatorLib.getType(vId); + if (vType == VALIDATION_TYPE_VALIDATOR) { + IValidator validator = ValidatorLib.getValidator(vId); + validator.onInstall(validatorData); + } else if (vType == VALIDATION_TYPE_PERMISSION) { + PermissionId permission = ValidatorLib.getPermissionId(vId); + _installPermission(permission, validatorData); + } else { + revert InvalidValidationType(); + } + } + + function _installPermission(PermissionId permission, bytes calldata data) internal { + ValidationStorage storage state = _validationStorage(); + bytes[] calldata permissionEnableData; + assembly { + permissionEnableData.offset := add(add(data.offset, 32), calldataload(data.offset)) + permissionEnableData.length := calldataload(sub(permissionEnableData.offset, 32)) + } + // allow up to 0xfe, 0xff is dedicated for signer + if (permissionEnableData.length > 254 || permissionEnableData.length == 0) { + revert PolicyDataTooLarge(); + } + + // clean up the policyData + if (state.permissionConfig[permission].policyData.length > 0) { + delete state.permissionConfig[permission].policyData; + } + unchecked { + for (uint256 i = 0; i < permissionEnableData.length - 1; i++) { + state.permissionConfig[permission].policyData.push( + PolicyData.wrap(bytes22(permissionEnableData[i][0:22])) + ); + IPolicy(address(bytes20(permissionEnableData[i][2:22]))).onInstall( + abi.encodePacked(bytes32(PermissionId.unwrap(permission)), permissionEnableData[i][22:]) + ); + } + // last permission data will be signer + ISigner signer = ISigner(address(bytes20(permissionEnableData[permissionEnableData.length - 1][2:22]))); + state.permissionConfig[permission].signer = signer; + state.permissionConfig[permission].permissionFlag = + PassFlag.wrap(bytes2(permissionEnableData[permissionEnableData.length - 1][0:2])); + signer.onInstall( + abi.encodePacked( + bytes32(PermissionId.unwrap(permission)), permissionEnableData[permissionEnableData.length - 1][22:] + ) + ); + } + } + + function _doValidation(ValidationMode vMode, ValidationId vId, PackedUserOperation calldata op, bytes32 userOpHash) + internal + returns (ValidationData validationData) + { + ValidationStorage storage state = _validationStorage(); + PackedUserOperation memory userOp = op; + bytes calldata userOpSig = op.signature; + unchecked { + if (vMode == VALIDATION_MODE_ENABLE) { + (validationData, userOpSig) = _enableMode(vId, op.signature); + userOp.signature = userOpSig; + } + + ValidationType vType = ValidatorLib.getType(vId); + if (vType == VALIDATION_TYPE_VALIDATOR) { + validationData = _intersectValidationData( + validationData, + ValidationData.wrap(ValidatorLib.getValidator(vId).validateUserOp(userOp, userOpHash)) + ); + } else { + PermissionId pId = ValidatorLib.getPermissionId(vId); + if (PassFlag.unwrap(state.permissionConfig[pId].permissionFlag) & PassFlag.unwrap(SKIP_USEROP) != 0) { + revert PermissionNotAlllowedForUserOp(); + } + (ValidationData policyCheck, ISigner signer) = _checkUserOpPolicy(pId, userOp, userOpSig); + validationData = _intersectValidationData(validationData, policyCheck); + validationData = _intersectValidationData( + validationData, + ValidationData.wrap( + signer.checkUserOpSignature(bytes32(PermissionId.unwrap(pId)), userOp, userOpHash) + ) + ); + } + } + } + + function _enableMode(ValidationId vId, bytes calldata packedData) + internal + returns (ValidationData validationData, bytes calldata userOpSig) + { + validationData = _enableValidationWithSig(vId, packedData); + + assembly { + userOpSig.offset := add(add(packedData.offset, 52), calldataload(add(packedData.offset, 148))) + userOpSig.length := calldataload(sub(userOpSig.offset, 32)) + } + + return (validationData, userOpSig); + } + + function _enableValidationWithSig(ValidationId vId, bytes calldata packedData) + internal + returns (ValidationData validationData) + { + bytes calldata enableSig; + ( + ValidationConfig memory config, + bytes calldata validatorData, + bytes calldata hookData, + bytes calldata selectorData, + bytes32 digest + ) = _enableDigest(vId, packedData); + assembly { + enableSig.offset := add(add(packedData.offset, 52), calldataload(add(packedData.offset, 116))) + enableSig.length := calldataload(sub(enableSig.offset, 32)) + } + validationData = _checkEnableSig(digest, enableSig); + _installValidation(vId, config, validatorData, hookData); + _configureSelector(selectorData); + _setSelector(vId, bytes4(selectorData[0:4]), true); + } + + function _checkEnableSig(bytes32 digest, bytes calldata enableSig) + internal + view + returns (ValidationData validationData) + { + ValidationStorage storage state = _validationStorage(); + ValidationType vType = ValidatorLib.getType(state.rootValidator); + bytes4 result; + if (vType == VALIDATION_TYPE_VALIDATOR) { + IValidator validator = ValidatorLib.getValidator(state.rootValidator); + result = validator.isValidSignatureWithSender(address(this), digest, enableSig); + } else if (vType == VALIDATION_TYPE_PERMISSION) { + PermissionId pId = ValidatorLib.getPermissionId(state.rootValidator); + ISigner signer; + (signer, validationData, enableSig) = _checkSignaturePolicy(pId, address(this), digest, enableSig); + result = signer.checkSignature(bytes32(PermissionId.unwrap(pId)), address(this), digest, enableSig); + } else { + revert InvalidValidationType(); + } + if (result != 0x1626ba7e) { + revert EnableNotApproved(); + } + } + + function _configureSelector(bytes calldata selectorData) internal { + bytes4 selector = bytes4(selectorData[0:4]); + if (selectorData.length >= 4) { + if (selectorData.length >= 44) { + // install selector with hook and target contract + bytes calldata selectorInitData; + bytes calldata hookInitData; + IModule selectorModule = IModule(address(bytes20(selectorData[4:24]))); + assembly { + selectorInitData.offset := + add(add(selectorData.offset, 76), calldataload(add(selectorData.offset, 44))) + selectorInitData.length := calldataload(sub(selectorInitData.offset, 32)) + hookInitData.offset := add(add(selectorData.offset, 76), calldataload(add(selectorData.offset, 76))) + hookInitData.length := calldataload(sub(hookInitData.offset, 32)) + } + if (CallType.wrap(bytes1(selectorInitData[0])) == CALLTYPE_SINGLE && selectorModule.isModuleType(2)) { + // also adds as executor when fallback module is also a executor + bytes calldata executorHookData; + assembly { + executorHookData.offset := + add(add(selectorData.offset, 76), calldataload(add(selectorData.offset, 108))) + executorHookData.length := calldataload(sub(executorHookData.offset, 32)) + } + IHook executorHook = IHook(address(bytes20(executorHookData[0:20]))); + // if module is also executor, install as executor + _installExecutorWithoutInit(IExecutor(address(selectorModule)), executorHook); + _installHook(executorHook, executorHookData[20:]); + } + _installSelector( + selector, address(selectorModule), IHook(address(bytes20(selectorData[24:44]))), selectorInitData + ); + _installHook(IHook(address(bytes20(selectorData[24:44]))), hookInitData); + } else { + // set without install + require(selectorData.length == 4, "Invalid selectorData"); + } + } + } + + function _enableDigest(ValidationId vId, bytes calldata packedData) + internal + view + returns ( + ValidationConfig memory config, + bytes calldata validatorData, + bytes calldata hookData, + bytes calldata selectorData, + bytes32 digest + ) + { + ValidationStorage storage state = _validationStorage(); + config.hook = IHook(address(bytes20(packedData[0:20]))); + config.nonce = state.currentNonce; + + assembly { + validatorData.offset := add(add(packedData.offset, 52), calldataload(add(packedData.offset, 20))) + validatorData.length := calldataload(sub(validatorData.offset, 32)) + hookData.offset := add(add(packedData.offset, 52), calldataload(add(packedData.offset, 52))) + hookData.length := calldataload(sub(hookData.offset, 32)) + selectorData.offset := add(add(packedData.offset, 52), calldataload(add(packedData.offset, 84))) + selectorData.length := calldataload(sub(selectorData.offset, 32)) + } + digest = _hashTypedData( + keccak256( + abi.encode( + ENABLE_TYPE_HASH, + ValidationId.unwrap(vId), + state.currentNonce, + config.hook, + keccak256(validatorData), + keccak256(hookData), + keccak256(selectorData) + ) + ) + ); + } + + struct PermissionSigMemory { + uint8 idx; + uint256 length; + ValidationData validationData; + PermissionId permission; + PassFlag flag; + IPolicy policy; + bytes permSig; + address caller; + bytes32 digest; + } + + function _checkUserOpPolicy(PermissionId pId, PackedUserOperation memory userOp, bytes calldata userOpSig) + internal + returns (ValidationData validationData, ISigner signer) + { + ValidationStorage storage state = _validationStorage(); + PolicyData[] storage policyData = state.permissionConfig[pId].policyData; + unchecked { + for (uint256 i = 0; i < policyData.length; i++) { + (PassFlag flag, IPolicy policy) = ValidatorLib.decodePolicyData(policyData[i]); + uint8 idx = uint8(bytes1(userOpSig[0])); + if (idx == i) { + // we are using uint64 length + uint256 length = uint64(bytes8(userOpSig[1:9])); + userOp.signature = userOpSig[9:9 + length]; + userOpSig = userOpSig[9 + length:]; + } else if (idx < i) { + // signature is not in order + revert PolicySignatureOrderError(); + } else { + userOp.signature = ""; + } + if (PassFlag.unwrap(flag) & PassFlag.unwrap(SKIP_USEROP) == 0) { + ValidationData vd = + ValidationData.wrap(policy.checkUserOpPolicy(bytes32(PermissionId.unwrap(pId)), userOp)); + address result = getValidationResult(vd); + if (result != address(0)) { + revert PolicyFailed(i); + } + validationData = _intersectValidationData(validationData, vd); + } + } + if (uint8(bytes1(userOpSig[0])) != 255) { + revert SignerPrefixNotPresent(); + } + userOp.signature = userOpSig[1:]; + return (validationData, state.permissionConfig[pId].signer); + } + } + + function _checkSignaturePolicy(PermissionId pId, address caller, bytes32 digest, bytes calldata sig) + internal + view + returns (ISigner, ValidationData, bytes calldata) + { + ValidationStorage storage state = _validationStorage(); + PermissionSigMemory memory mSig; + mSig.permission = pId; + mSig.caller = caller; + mSig.digest = digest; + _checkPermissionPolicy(mSig, state, sig); + if (uint8(bytes1(sig[0])) != 255) { + revert SignerPrefixNotPresent(); + } + sig = sig[1:]; + return (state.permissionConfig[mSig.permission].signer, mSig.validationData, sig); + } + + function _checkPermissionPolicy( + PermissionSigMemory memory mSig, + ValidationStorage storage state, + bytes calldata sig + ) internal view { + PolicyData[] storage policyData = state.permissionConfig[mSig.permission].policyData; + unchecked { + for (uint256 i = 0; i < policyData.length; i++) { + (mSig.flag, mSig.policy) = ValidatorLib.decodePolicyData(policyData[i]); + mSig.idx = uint8(bytes1(sig[0])); + if (mSig.idx == i) { + // we are using uint64 length + mSig.length = uint64(bytes8(sig[1:9])); + mSig.permSig = sig[9:9 + mSig.length]; + sig = sig[9 + mSig.length:]; + } else if (mSig.idx < i) { + // signature is not in order + revert PolicySignatureOrderError(); + } else { + mSig.permSig = sig[0:0]; + } + + if (PassFlag.unwrap(mSig.flag) & PassFlag.unwrap(SKIP_SIGNATURE) == 0) { + ValidationData vd = ValidationData.wrap( + mSig.policy.checkSignaturePolicy( + bytes32(PermissionId.unwrap(mSig.permission)), mSig.caller, mSig.digest, mSig.permSig + ) + ); + address result = getValidationResult(vd); + if (result != address(0)) { + revert PolicyFailed(i); + } + + mSig.validationData = _intersectValidationData(mSig.validationData, vd); + } + } + } + } + + function _checkPermissionSignature(PermissionId pId, address caller, bytes32 hash, bytes calldata sig) + internal + view + returns (bytes4) + { + (ISigner signer, ValidationData valdiationData, bytes calldata validatorSig) = + _checkSignaturePolicy(pId, caller, hash, sig); + (ValidAfter validAfter, ValidUntil validUntil,) = parseValidationData(ValidationData.unwrap(valdiationData)); + if (block.timestamp < ValidAfter.unwrap(validAfter) || block.timestamp > ValidUntil.unwrap(validUntil)) { + return 0xffffffff; + } + return signer.checkSignature(bytes32(PermissionId.unwrap(pId)), caller, _toWrappedHash(hash), validatorSig); + } + + function _toWrappedHash(bytes32 hash) internal view returns (bytes32) { + return _hashTypedData(keccak256(abi.encode(KERNEL_WRAPPER_TYPE_HASH, hash))); + } +} diff --git a/src/executor/KillSwitchAction.sol b/src/executor/KillSwitchAction.sol deleted file mode 100644 index 3273dec5..00000000 --- a/src/executor/KillSwitchAction.sol +++ /dev/null @@ -1,38 +0,0 @@ -pragma solidity ^0.8.18; - -import {IKernelValidator} from "../interfaces/IKernelValidator.sol"; -import {KillSwitchValidator} from "../validator/KillSwitchValidator.sol"; -import {WalletKernelStorage} from "../common/Structs.sol"; - -contract KillSwitchAction { - KillSwitchValidator public immutable killSwitchValidator; - - constructor(KillSwitchValidator _killswitchValidator) { - killSwitchValidator = _killswitchValidator; - } - - // Function to get the wallet kernel storage - function getKernelStorage() internal pure returns (WalletKernelStorage storage ws) { - bytes32 storagePosition = bytes32(uint256(keccak256("zerodev.kernel")) - 1); - assembly { - ws.slot := storagePosition - } - } - - function toggleKillSwitch() external { - WalletKernelStorage storage ws = getKernelStorage(); - if (address(ws.defaultValidator) != address(killSwitchValidator)) { - // this means it is not activated - ws.defaultValidator = killSwitchValidator; - getKernelStorage().disabledMode = bytes4(0xffffffff); - getKernelStorage().lastDisabledTime = uint48(block.timestamp); - } else { - (, IKernelValidator prevValidator,, bytes4 prevDisableMode) = - killSwitchValidator.killSwitchValidatorStorage(address(this)); - // this means it is activated - ws.defaultValidator = prevValidator; - getKernelStorage().disabledMode = prevDisableMode; - killSwitchValidator.disable(bytes("")); - } - } -} diff --git a/src/executor/RecoveryAction.sol b/src/executor/RecoveryAction.sol deleted file mode 100644 index cc043117..00000000 --- a/src/executor/RecoveryAction.sol +++ /dev/null @@ -1,9 +0,0 @@ -pragma solidity ^0.8.0; - -import "src/interfaces/IKernelValidator.sol"; - -contract RecoveryAction { - function doRecovery(address _validator, bytes calldata _data) external { - IKernelValidator(_validator).enable(_data); - } -} diff --git a/src/executor/TokenActions.sol b/src/executor/TokenActions.sol deleted file mode 100644 index f4956355..00000000 --- a/src/executor/TokenActions.sol +++ /dev/null @@ -1,21 +0,0 @@ -pragma solidity ^0.8.0; - -import {ERC20} from "solady/tokens/ERC20.sol"; -import {ERC721} from "solady/tokens/ERC721.sol"; -import {ERC1155} from "solady/tokens/ERC1155.sol"; - -contract TokenActions { - function transferERC20Action(address _token, uint256 _amount, address _to) external { - ERC20(_token).transfer(_to, _amount); - } - - function transferERC721Action(address _token, uint256 _id, address _to) external { - ERC721(_token).transferFrom(address(this), _to, _id); - } - - function transferERC1155Action(address _token, uint256 _id, address _to, uint256 amount, bytes calldata data) - external - { - ERC1155(_token).safeTransferFrom(address(this), _to, _id, amount, data); - } -} diff --git a/src/factory/FactoryStaker.sol b/src/factory/FactoryStaker.sol new file mode 100644 index 00000000..9df7fac7 --- /dev/null +++ b/src/factory/FactoryStaker.sol @@ -0,0 +1,44 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "./KernelFactory.sol"; +import "../interfaces/IEntryPoint.sol"; +import "solady/auth/Ownable.sol"; + +contract FactoryStaker is Ownable { + mapping(KernelFactory => bool) public approved; + + error NotApprovedFactory(); + + constructor(address _owner) { + _initializeOwner(_owner); + } + + function deployWithFactory(KernelFactory factory, bytes calldata createData, bytes32 salt) + external + payable + returns (address) + { + if (!approved[factory]) { + revert NotApprovedFactory(); + } + return factory.createAccount(createData, salt); + } + + function approveFactory(KernelFactory factory, bool approval) external payable onlyOwner { + approved[factory] = approval; + } + + function stake(IEntryPoint entryPoint, uint32 unstakeDelay) external payable onlyOwner { + entryPoint.addStake{value: msg.value}(unstakeDelay); + } + + function unlockStake(IEntryPoint entryPoint) external payable onlyOwner { + entryPoint.unlockStake(); + } + + function withdrawStake(IEntryPoint entryPoint, address payable recipient) external payable onlyOwner { + entryPoint.withdrawStake(recipient); + } +} diff --git a/src/factory/KernelFactory.sol b/src/factory/KernelFactory.sol index a88dd775..d0ee899c 100644 --- a/src/factory/KernelFactory.sol +++ b/src/factory/KernelFactory.sol @@ -1,61 +1,33 @@ // SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {AdminLessERC1967Factory} from "./AdminLessERC1967Factory.sol"; -import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol"; -import {Ownable} from "solady/auth/Ownable.sol"; - -contract KernelFactory is AdminLessERC1967Factory, Ownable { - /// Error throwned when an implementation isn't allowed - error ImplementationNotAllowed(); - - /// @dev The entry point contract. - IEntryPoint public entryPoint; - - /// @dev Check if an implementation is allowed. - mapping(address implementation => bool isAllowed) public isAllowedImplementation; - - constructor(address _owner, IEntryPoint _entryPoint) { - _initializeOwner(_owner); - entryPoint = _entryPoint; - } - function setImplementation(address _implementation, bool _allow) external onlyOwner { - isAllowedImplementation[_implementation] = _allow; - } +pragma solidity ^0.8.0; - function setEntryPoint(IEntryPoint _entryPoint) external onlyOwner { - entryPoint = _entryPoint; - } +import {LibClone} from "solady/utils/LibClone.sol"; - function createAccount(address _implementation, bytes calldata _data, uint256 _index) - external - payable - returns (address proxy) - { - // Ensure that the implementation contract is allowed - if (!isAllowedImplementation[_implementation]) revert ImplementationNotAllowed(); - // Create the salt for the account - bytes32 salt = bytes32(uint256(keccak256(abi.encodePacked(_data, _index))) & type(uint96).max); - // Deploy the proxy and return it's address - proxy = deployDeterministicAndCall(_implementation, salt, _data); - } +contract KernelFactory { + error InitializeError(); - function getAccountAddress(bytes calldata _data, uint256 _index) public view returns (address) { - bytes32 salt = bytes32(uint256(keccak256(abi.encodePacked(_data, _index))) & type(uint96).max); - return predictDeterministicAddress(salt); - } + address public immutable implementation; - // stake functions - function addStake(uint32 unstakeDelaySec) external payable onlyOwner { - entryPoint.addStake{value: msg.value}(unstakeDelaySec); + constructor(address _impl) { + implementation = _impl; } - function unlockStake() external onlyOwner { - entryPoint.unlockStake(); + function createAccount(bytes calldata data, bytes32 salt) public payable returns (address) { + bytes32 actualSalt = keccak256(abi.encodePacked(data, salt)); + (bool alreadyDeployed, address account) = + LibClone.createDeterministicERC1967(msg.value, implementation, actualSalt); + if (!alreadyDeployed) { + (bool success,) = account.call(data); + if (!success) { + revert InitializeError(); + } + } + return account; } - function withdrawStake(address payable withdrawAddress) external onlyOwner { - entryPoint.withdrawStake(withdrawAddress); + function getAddress(bytes calldata data, bytes32 salt) public view virtual returns (address) { + bytes32 actualSalt = keccak256(abi.encodePacked(data, salt)); + return LibClone.predictDeterministicAddressERC1967(implementation, actualSalt, address(this)); } } diff --git a/src/interfaces/IAccount.sol b/src/interfaces/IAccount.sol new file mode 100644 index 00000000..44662e6e --- /dev/null +++ b/src/interfaces/IAccount.sol @@ -0,0 +1,39 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity >=0.7.5; + +import "./PackedUserOperation.sol"; +import "../types/Types.sol"; + +interface IAccount { + /** + * Validate user's signature and nonce + * the entryPoint will make the call to the recipient only if this validation call returns successfully. + * signature failure should be reported by returning SIG_VALIDATION_FAILED (1). + * This allows making a "simulation call" without a valid signature + * Other failures (e.g. nonce mismatch, or invalid signature format) should still revert to signal failure. + * + * @dev Must validate caller is the entryPoint. + * Must validate the signature and nonce + * @param userOp - The operation that is about to be executed. + * @param userOpHash - Hash of the user's request data. can be used as the basis for signature. + * @param missingAccountFunds - Missing funds on the account's deposit in the entrypoint. + * This is the minimum amount to transfer to the sender(entryPoint) to be + * able to make the call. The excess is left as a deposit in the entrypoint + * for future calls. Can be withdrawn anytime using "entryPoint.withdrawTo()". + * In case there is a paymaster in the request (or the current deposit is high + * enough), this value will be zero. + * @return validationData - Packaged ValidationData structure. use `_packValidationData` and + * `_unpackValidationData` to encode and decode. + * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure, + * otherwise, an address of an "authorizer" contract. + * <6-byte> validUntil - Last timestamp this operation is valid. 0 for "indefinite" + * <6-byte> validAfter - First timestamp this operation is valid + * If an account doesn't use time-range, it is enough to + * return SIG_VALIDATION_FAILED value (1) for signature failure. + * Note that the validation code cannot use block.timestamp (or block.number) directly. + */ + function validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, uint256 missingAccountFunds) + external + payable + returns (ValidationData validationData); +} diff --git a/src/interfaces/IAccountExecute.sol b/src/interfaces/IAccountExecute.sol new file mode 100644 index 00000000..40e3c48e --- /dev/null +++ b/src/interfaces/IAccountExecute.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity >=0.7.5; + +import "./PackedUserOperation.sol"; + +interface IAccountExecute { + /** + * Account may implement this execute method. + * passing this methodSig at the beginning of callData will cause the entryPoint to pass the full UserOp (and hash) + * to the account. + * The account should skip the methodSig, and use the callData (and optionally, other UserOp fields) + * + * @param userOp - The operation that was just validated. + * @param userOpHash - Hash of the user's request data. + */ + function executeUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash) external payable; +} diff --git a/src/interfaces/IAggregator.sol b/src/interfaces/IAggregator.sol new file mode 100644 index 00000000..66ca5f35 --- /dev/null +++ b/src/interfaces/IAggregator.sol @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity >=0.7.5; + +import "./PackedUserOperation.sol"; + +/** + * Aggregated Signatures validator. + */ +interface IAggregator { + /** + * Validate aggregated signature. + * Revert if the aggregated signature does not match the given list of operations. + * @param userOps - Array of UserOperations to validate the signature for. + * @param signature - The aggregated signature. + */ + function validateSignatures(PackedUserOperation[] calldata userOps, bytes calldata signature) external view; + + /** + * Validate signature of a single userOp. + * This method should be called by bundler after EntryPointSimulation.simulateValidation() returns + * the aggregator this account uses. + * First it validates the signature over the userOp. Then it returns data to be used when creating the handleOps. + * @param userOp - The userOperation received from the user. + * @return sigForUserOp - The value to put into the signature field of the userOp when calling handleOps. + * (usually empty, unless account and aggregator support some kind of "multisig". + */ + function validateUserOpSignature(PackedUserOperation calldata userOp) + external + view + returns (bytes memory sigForUserOp); + + /** + * Aggregate multiple signatures into a single value. + * This method is called off-chain to calculate the signature to pass with handleOps() + * bundler MAY use optimized custom code perform this aggregation. + * @param userOps - Array of UserOperations to collect the signatures from. + * @return aggregatedSignature - The aggregated signature. + */ + function aggregateSignatures(PackedUserOperation[] calldata userOps) + external + view + returns (bytes memory aggregatedSignature); +} diff --git a/src/interfaces/IERC7579Account.sol b/src/interfaces/IERC7579Account.sol new file mode 100644 index 00000000..2b409949 --- /dev/null +++ b/src/interfaces/IERC7579Account.sol @@ -0,0 +1,109 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.21; + +import {CallType, ExecType, ExecMode} from "../utils/ExecLib.sol"; +import {PackedUserOperation} from "./PackedUserOperation.sol"; + +struct Execution { + address target; + uint256 value; + bytes callData; +} + +interface IERC7579Account { + event ModuleInstalled(uint256 moduleTypeId, address module); + event ModuleUninstalled(uint256 moduleTypeId, address module); + + /** + * @dev Executes a transaction on behalf of the account. + * This function is intended to be called by ERC-4337 EntryPoint.sol + * @dev Ensure adequate authorization control: i.e. onlyEntryPointOrSelf + * + * @dev MSA MUST implement this function signature. + * If a mode is requested that is not supported by the Account, it MUST revert + * @param mode The encoded execution mode of the transaction. See ModeLib.sol for details + * @param executionCalldata The encoded execution call data + */ + function execute(ExecMode mode, bytes calldata executionCalldata) external payable; + + /** + * @dev Executes a transaction on behalf of the account. + * This function is intended to be called by Executor Modules + * @dev Ensure adequate authorization control: i.e. onlyExecutorModule + * + * @dev MSA MUST implement this function signature. + * If a mode is requested that is not supported by the Account, it MUST revert + * @param mode The encoded execution mode of the transaction. See ModeLib.sol for details + * @param executionCalldata The encoded execution call data + */ + function executeFromExecutor(ExecMode mode, bytes calldata executionCalldata) + external + payable + returns (bytes[] memory returnData); + + /** + * @dev ERC-1271 isValidSignature + * This function is intended to be used to validate a smart account signature + * and may forward the call to a validator module + * + * @param hash The hash of the data that is signed + * @param data The data that is signed + */ + function isValidSignature(bytes32 hash, bytes calldata data) external view returns (bytes4); + + /** + * @dev installs a Module of a certain type on the smart account + * @dev Implement Authorization control of your chosing + * @param moduleTypeId the module type ID according the ERC-7579 spec + * @param module the module address + * @param initData arbitrary data that may be required on the module during `onInstall` + * initialization. + */ + function installModule(uint256 moduleTypeId, address module, bytes calldata initData) external payable; + + /** + * @dev uninstalls a Module of a certain type on the smart account + * @dev Implement Authorization control of your chosing + * @param moduleTypeId the module type ID according the ERC-7579 spec + * @param module the module address + * @param deInitData arbitrary data that may be required on the module during `onUninstall` + * de-initialization. + */ + function uninstallModule(uint256 moduleTypeId, address module, bytes calldata deInitData) external payable; + + /** + * Function to check if the account supports a certain CallType or ExecType (see ModeLib.sol) + * @param encodedMode the encoded mode + */ + function supportsExecutionMode(ExecMode encodedMode) external view returns (bool); + + /** + * Function to check if the account supports installation of a certain module type Id + * @param moduleTypeId the module type ID according the ERC-7579 spec + */ + function supportsModule(uint256 moduleTypeId) external view returns (bool); + + /** + * Function to check if the account has a certain module installed + * @param moduleTypeId the module type ID according the ERC-7579 spec + * Note: keep in mind that some contracts can be multiple module types at the same time. It + * thus may be necessary to query multiple module types + * @param module the module address + * @param additionalContext additional context data that the smart account may interpret to + * identifiy conditions under which the module is installed. + * usually this is not necessary, but for some special hooks that + * are stored in mappings, this param might be needed + */ + function isModuleInstalled(uint256 moduleTypeId, address module, bytes calldata additionalContext) + external + view + returns (bool); + + /** + * @dev Returns the account id of the smart account + * @return accountImplementationId the account id of the smart account + * the accountId should be structured like so: + * "vendorname.accountname.semver" + */ + function accountId() external view returns (string memory accountImplementationId); +} diff --git a/src/interfaces/IERC7579Modules.sol b/src/interfaces/IERC7579Modules.sol new file mode 100644 index 00000000..58c1fda2 --- /dev/null +++ b/src/interfaces/IERC7579Modules.sol @@ -0,0 +1,117 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.21; + +import {PackedUserOperation} from "./PackedUserOperation.sol"; + +interface IModule { + error AlreadyInitialized(address smartAccount); + error NotInitialized(address smartAccount); + + /** + * @dev This function is called by the smart account during installation of the module + * @param data arbitrary data that may be required on the module during `onInstall` + * initialization + * + * MUST revert on error (i.e. if module is already enabled) + */ + function onInstall(bytes calldata data) external payable; + + /** + * @dev This function is called by the smart account during uninstallation of the module + * @param data arbitrary data that may be required on the module during `onUninstall` + * de-initialization + * + * MUST revert on error + */ + function onUninstall(bytes calldata data) external payable; + + /** + * @dev Returns boolean value if module is a certain type + * @param moduleTypeId the module type ID according the ERC-7579 spec + * + * MUST return true if the module is of the given type and false otherwise + */ + function isModuleType(uint256 moduleTypeId) external view returns (bool); + + /** + * @dev Returns if the module was already initialized for a provided smartaccount + */ + function isInitialized(address smartAccount) external view returns (bool); +} + +interface IValidator is IModule { + error InvalidTargetAddress(address target); + + /** + * @dev Validates a transaction on behalf of the account. + * This function is intended to be called by the MSA during the ERC-4337 validaton phase + * Note: solely relying on bytes32 hash and signature is not suffcient for some + * validation implementations (i.e. SessionKeys often need access to userOp.calldata) + * @param userOp The user operation to be validated. The userOp MUST NOT contain any metadata. + * The MSA MUST clean up the userOp before sending it to the validator. + * @param userOpHash The hash of the user operation to be validated + * @return return value according to ERC-4337 + */ + function validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash) + external + payable + returns (uint256); + + /** + * Validator can be used for ERC-1271 validation + */ + function isValidSignatureWithSender(address sender, bytes32 hash, bytes calldata data) + external + view + returns (bytes4); +} + +interface IExecutor is IModule {} + +interface IHook is IModule { + /** + * @dev Called by the smart account before execution + * @param msgSender the address that called the smart account + * @param value the value that was sent to the smart account + * @param msgData the data that was sent to the smart account + * + * MAY return arbitrary data in the `hookData` return value + */ + function preCheck(address msgSender, uint256 value, bytes calldata msgData) + external + payable + returns (bytes memory hookData); + + /** + * @dev Called by the smart account after execution + * @param hookData the data that was returned by the `preCheck` function + * @param executionSuccess whether the execution(s) was (were) successful + * @param executionReturn the return/revert data of the execution(s) + * + * MAY validate the `hookData` to validate transaction context of the `preCheck` function + */ + function postCheck(bytes calldata hookData, bool executionSuccess, bytes calldata executionReturn) + external + payable; +} + +interface IFallback is IModule {} + +interface IPolicy is IModule { + function checkUserOpPolicy(bytes32 id, PackedUserOperation calldata userOp) external payable returns (uint256); + function checkSignaturePolicy(bytes32 id, address sender, bytes32 hash, bytes calldata sig) + external + view + returns (uint256); +} + +interface ISigner is IModule { + function checkUserOpSignature(bytes32 id, PackedUserOperation calldata userOp, bytes32 userOpHash) + external + payable + returns (uint256); + function checkSignature(bytes32 id, address sender, bytes32 hash, bytes calldata sig) + external + view + returns (bytes4); +} diff --git a/src/interfaces/IEntryPoint.sol b/src/interfaces/IEntryPoint.sol new file mode 100644 index 00000000..ccc5b965 --- /dev/null +++ b/src/interfaces/IEntryPoint.sol @@ -0,0 +1,193 @@ +// SPDX-License-Identifier: GPL-3.0 +/** + * Account-Abstraction (EIP-4337) singleton EntryPoint implementation. + * Only one instance required on each chain. + * + */ +pragma solidity >=0.7.5; + +/* solhint-disable avoid-low-level-calls */ +/* solhint-disable no-inline-assembly */ +/* solhint-disable reason-string */ + +import "./PackedUserOperation.sol"; +import "./IStakeManager.sol"; +import "./IAggregator.sol"; +import "./INonceManager.sol"; + +interface IEntryPoint is IStakeManager, INonceManager { + /** + * + * An event emitted after each successful request. + * @param userOpHash - Unique identifier for the request (hash its entire content, except signature). + * @param sender - The account that generates this request. + * @param paymaster - If non-null, the paymaster that pays for this request. + * @param nonce - The nonce value from the request. + * @param success - True if the sender transaction succeeded, false if reverted. + * @param actualGasCost - Actual amount paid (by account or paymaster) for this UserOperation. + * @param actualGasUsed - Total gas used by this UserOperation (including preVerification, creation, + * validation and execution). + */ + event UserOperationEvent( + bytes32 indexed userOpHash, + address indexed sender, + address indexed paymaster, + uint256 nonce, + bool success, + uint256 actualGasCost, + uint256 actualGasUsed + ); + + /** + * Account "sender" was deployed. + * @param userOpHash - The userOp that deployed this account. UserOperationEvent will follow. + * @param sender - The account that is deployed + * @param factory - The factory used to deploy this account (in the initCode) + * @param paymaster - The paymaster used by this UserOp + */ + event AccountDeployed(bytes32 indexed userOpHash, address indexed sender, address factory, address paymaster); + + /** + * An event emitted if the UserOperation "callData" reverted with non-zero length. + * @param userOpHash - The request unique identifier. + * @param sender - The sender of this request. + * @param nonce - The nonce used in the request. + * @param revertReason - The return bytes from the (reverted) call to "callData". + */ + event UserOperationRevertReason( + bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason + ); + + /** + * An event emitted if the UserOperation Paymaster's "postOp" call reverted with non-zero length. + * @param userOpHash - The request unique identifier. + * @param sender - The sender of this request. + * @param nonce - The nonce used in the request. + * @param revertReason - The return bytes from the (reverted) call to "callData". + */ + event PostOpRevertReason(bytes32 indexed userOpHash, address indexed sender, uint256 nonce, bytes revertReason); + + /** + * An event emitted by handleOps(), before starting the execution loop. + * Any event emitted before this event, is part of the validation. + */ + event BeforeExecution(); + + /** + * Signature aggregator used by the following UserOperationEvents within this bundle. + * @param aggregator - The aggregator used for the following UserOperationEvents. + */ + event SignatureAggregatorChanged(address indexed aggregator); + + /** + * A custom revert error of handleOps, to identify the offending op. + * Should be caught in off-chain handleOps simulation and not happen on-chain. + * Useful for mitigating DoS attempts against batchers or for troubleshooting of factory/account/paymaster reverts. + * NOTE: If simulateValidation passes successfully, there should be no reason for handleOps to fail on it. + * @param opIndex - Index into the array of ops to the failed one (in simulateValidation, this is always zero). + * @param reason - Revert reason. The string starts with a unique code "AAmn", + * where "m" is "1" for factory, "2" for account and "3" for paymaster issues, + * so a failure can be attributed to the correct entity. + */ + error FailedOp(uint256 opIndex, string reason); + + /** + * A custom revert error of handleOps, to report a revert by account or paymaster. + * @param opIndex - Index into the array of ops to the failed one (in simulateValidation, this is always zero). + * @param reason - Revert reason. see FailedOp(uint256,string), above + * @param inner - data from inner cought revert reason + * @dev note that inner is truncated to 2048 bytes + */ + error FailedOpWithRevert(uint256 opIndex, string reason, bytes inner); + + error PostOpReverted(bytes returnData); + + /** + * Error case when a signature aggregator fails to verify the aggregated signature it had created. + * @param aggregator The aggregator that failed to verify the signature + */ + error SignatureValidationFailed(address aggregator); + + // Return value of getSenderAddress. + error SenderAddressResult(address sender); + + // UserOps handled, per aggregator. + struct UserOpsPerAggregator { + PackedUserOperation[] userOps; + // Aggregator address + IAggregator aggregator; + // Aggregated signature + bytes signature; + } + + /** + * Execute a batch of UserOperations. + * No signature aggregator is used. + * If any account requires an aggregator (that is, it returned an aggregator when + * performing simulateValidation), then handleAggregatedOps() must be used instead. + * @param ops - The operations to execute. + * @param beneficiary - The address to receive the fees. + */ + function handleOps(PackedUserOperation[] calldata ops, address payable beneficiary) external; + + /** + * Execute a batch of UserOperation with Aggregators + * @param opsPerAggregator - The operations to execute, grouped by aggregator (or address(0) for no-aggregator accounts). + * @param beneficiary - The address to receive the fees. + */ + function handleAggregatedOps(UserOpsPerAggregator[] calldata opsPerAggregator, address payable beneficiary) + external; + + /** + * Generate a request Id - unique identifier for this request. + * The request ID is a hash over the content of the userOp (except the signature), the entrypoint and the chainid. + * @param userOp - The user operation to generate the request ID for. + * @return hash the hash of this UserOperation + */ + function getUserOpHash(PackedUserOperation calldata userOp) external view returns (bytes32); + + /** + * Gas and return values during simulation. + * @param preOpGas - The gas used for validation (including preValidationGas) + * @param prefund - The required prefund for this operation + * @param accountValidationData - returned validationData from account. + * @param paymasterValidationData - return validationData from paymaster. + * @param paymasterContext - Returned by validatePaymasterUserOp (to be passed into postOp) + */ + struct ReturnInfo { + uint256 preOpGas; + uint256 prefund; + uint256 accountValidationData; + uint256 paymasterValidationData; + bytes paymasterContext; + } + + /** + * Returned aggregated signature info: + * The aggregator returned by the account, and its current stake. + */ + struct AggregatorStakeInfo { + address aggregator; + StakeInfo stakeInfo; + } + + /** + * Get counterfactual sender address. + * Calculate the sender contract address that will be generated by the initCode and salt in the UserOperation. + * This method always revert, and returns the address in SenderAddressResult error + * @param initCode - The constructor code to be passed into the UserOperation. + */ + function getSenderAddress(bytes memory initCode) external; + + error DelegateAndRevert(bool success, bytes ret); + + /** + * Helper method for dry-run testing. + * @dev calling this method, the EntryPoint will make a delegatecall to the given data, and report (via revert) the result. + * The method always revert, so is only useful off-chain for dry run calls, in cases where state-override to replace + * actual EntryPoint code is less convenient. + * @param target a target contract to make a delegatecall from entrypoint + * @param data data to pass to target in a delegatecall + */ + function delegateAndRevert(address target, bytes calldata data) external; +} diff --git a/src/interfaces/IEntryPointSimulations.sol b/src/interfaces/IEntryPointSimulations.sol new file mode 100644 index 00000000..282011e9 --- /dev/null +++ b/src/interfaces/IEntryPointSimulations.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity >=0.7.5; + +import "./PackedUserOperation.sol"; +import "./IEntryPoint.sol"; + +interface IEntryPointSimulations is IEntryPoint { + // Return value of simulateHandleOp. + struct ExecutionResult { + uint256 preOpGas; + uint256 paid; + uint256 accountValidationData; + uint256 paymasterValidationData; + bool targetSuccess; + bytes targetResult; + } + + /** + * Successful result from simulateValidation. + * If the account returns a signature aggregator the "aggregatorInfo" struct is filled in as well. + * @param returnInfo Gas and time-range returned values + * @param senderInfo Stake information about the sender + * @param factoryInfo Stake information about the factory (if any) + * @param paymasterInfo Stake information about the paymaster (if any) + * @param aggregatorInfo Signature aggregation info (if the account requires signature aggregator) + * Bundler MUST use it to verify the signature, or reject the UserOperation. + */ + struct ValidationResult { + ReturnInfo returnInfo; + StakeInfo senderInfo; + StakeInfo factoryInfo; + StakeInfo paymasterInfo; + AggregatorStakeInfo aggregatorInfo; + } + + /** + * Simulate a call to account.validateUserOp and paymaster.validatePaymasterUserOp. + * @dev The node must also verify it doesn't use banned opcodes, and that it doesn't reference storage + * outside the account's data. + * @param userOp - The user operation to validate. + * @return the validation result structure + */ + function simulateValidation(PackedUserOperation calldata userOp) external returns (ValidationResult memory); + + /** + * Simulate full execution of a UserOperation (including both validation and target execution) + * It performs full validation of the UserOperation, but ignores signature error. + * An optional target address is called after the userop succeeds, + * and its value is returned (before the entire call is reverted). + * Note that in order to collect the the success/failure of the target call, it must be executed + * with trace enabled to track the emitted events. + * @param op The UserOperation to simulate. + * @param target - If nonzero, a target address to call after userop simulation. If called, + * the targetSuccess and targetResult are set to the return from that call. + * @param targetCallData - CallData to pass to target address. + * @return the execution result structure + */ + function simulateHandleOp(PackedUserOperation calldata op, address target, bytes calldata targetCallData) + external + returns (ExecutionResult memory); +} diff --git a/src/interfaces/IKernel.sol b/src/interfaces/IKernel.sol deleted file mode 100644 index ec0b98d6..00000000 --- a/src/interfaces/IKernel.sol +++ /dev/null @@ -1,95 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -import {IKernelValidator} from "./IKernelValidator.sol"; -import {ExecutionDetail, Call} from "../common/Structs.sol"; -import {ValidationData, ValidUntil, ValidAfter} from "../common/Types.sol"; -import {Operation} from "../common/Enums.sol"; -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; - -interface IKernel { - // Event declarations - event Upgraded(address indexed newImplementation); - - event DefaultValidatorChanged(address indexed oldValidator, address indexed newValidator); - - event ExecutionChanged(bytes4 indexed selector, address indexed executor, address indexed validator); - - // Error declarations - error NotAuthorizedCaller(); - - error AlreadyInitialized(); - - error NotEntryPoint(); - - error DisabledMode(); - - error DeprecatedOperation(); - - function initialize(IKernelValidator _validator, bytes calldata _data) external payable; - - function upgradeTo(address _newImplementation) external payable; - - function getNonce() external view returns (uint256); - - function getNonce(uint192 key) external view returns (uint256); - - function getDefaultValidator() external view returns (IKernelValidator); - - function getDisabledMode() external view returns (bytes4 disabled); - - function getLastDisabledTime() external view returns (uint48); - - /// @notice Returns the execution details for a specific function signature - /// @dev This function can be used to get execution details for a specific function signature - /// @param _selector The function signature - /// @return ExecutionDetail struct containing the execution details - function getExecution(bytes4 _selector) external view returns (ExecutionDetail memory); - - /// @notice Changes the execution details for a specific function selector - /// @dev This function can only be called from the EntryPoint contract, the contract owner, or itself - /// @param _selector The selector of the function for which execution details are being set - /// @param _executor The executor to be associated with the function selector - /// @param _validator The validator contract that will be responsible for validating operations associated with this function selector - /// @param _validUntil The timestamp until which the execution details are valid - /// @param _validAfter The timestamp after which the execution details are valid - function setExecution( - bytes4 _selector, - address _executor, - IKernelValidator _validator, - ValidUntil _validUntil, - ValidAfter _validAfter, - bytes calldata _enableData - ) external payable; - - function setDefaultValidator(IKernelValidator _defaultValidator, bytes calldata _data) external payable; - - /// @notice Updates the disabled mode - /// @dev This function can be used to update the disabled mode - /// @param _disableFlag The new disabled mode - function disableMode(bytes4 _disableFlag) external payable; - - /// @notice Executes a function call to an external contract - /// @dev The type of operation (call or delegatecall) is specified as an argument. - /// @param to The address of the target contract - /// @param value The amount of Ether to send - /// @param data The call data to be sent - /// operation deprecated operation type, usere executeBatch for batch operation - function execute(address to, uint256 value, bytes memory data, Operation) external payable; - - function executeBatch(Call[] memory calls) external payable; - - function executeDelegateCall(address to, bytes memory data) external payable; - - /// @notice Validates a user operation based on its mode - /// @dev This function will validate user operation and be called by EntryPoint - /// @param userOp The user operation to be validated - /// @param userOpHash The hash of the user operation - /// @param missingAccountFunds The funds needed to be reimbursed - /// @return validationData The data used for validation - function validateUserOp(UserOperation memory userOp, bytes32 userOpHash, uint256 missingAccountFunds) - external - payable - returns (ValidationData validationData); -} diff --git a/src/interfaces/IKernelValidator.sol b/src/interfaces/IKernelValidator.sol deleted file mode 100644 index 4544c92b..00000000 --- a/src/interfaces/IKernelValidator.sol +++ /dev/null @@ -1,27 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; -import "../common/Types.sol"; - -interface IKernelValidator { - error NotImplemented(); - - function enable(bytes calldata _data) external payable; - - function disable(bytes calldata _data) external payable; - - function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256 missingFunds) - external - payable - returns (ValidationData); - - function validateSignature(bytes32 hash, bytes calldata signature) external view returns (ValidationData); - - function validCaller(address caller, bytes calldata data) external view returns (bool); -} - -// 3 modes -// 1. default mode, use preset validator for the kernel -// 2. enable mode, enable a new validator for given action and use it for current userOp -// 3. sudo mode, use default plugin for current userOp diff --git a/src/interfaces/INonceManager.sol b/src/interfaces/INonceManager.sol new file mode 100644 index 00000000..2a5a2725 --- /dev/null +++ b/src/interfaces/INonceManager.sol @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity >=0.7.5; + +interface INonceManager { + /** + * Return the next nonce for this sender. + * Within a given key, the nonce values are sequenced (starting with zero, and incremented by one on each userop) + * But UserOp with different keys can come with arbitrary order. + * + * @param sender the account address + * @param key the high 192 bit of the nonce + * @return nonce a full nonce to pass for next UserOp with this sender. + */ + function getNonce(address sender, uint192 key) external view returns (uint256 nonce); + + /** + * Manually increment the nonce of the sender. + * This method is exposed just for completeness.. + * Account does NOT need to call it, neither during validation, nor elsewhere, + * as the EntryPoint will update the nonce regardless. + * Possible use-case is call it with various keys to "initialize" their nonces to one, so that future + * UserOperations will not pay extra for the first transaction with a given key. + */ + function incrementNonce(uint192 key) external; +} diff --git a/src/interfaces/IPaymaster.sol b/src/interfaces/IPaymaster.sol new file mode 100644 index 00000000..04a91685 --- /dev/null +++ b/src/interfaces/IPaymaster.sol @@ -0,0 +1,57 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity >=0.7.5; + +import "./PackedUserOperation.sol"; + +/** + * The interface exposed by a paymaster contract, who agrees to pay the gas for user's operations. + * A paymaster must hold a stake to cover the required entrypoint stake and also the gas for the transaction. + */ +interface IPaymaster { + enum PostOpMode { + // User op succeeded. + opSucceeded, + // User op reverted. Still has to pay for gas. + opReverted, + // Only used internally in the EntryPoint (cleanup after postOp reverts). Never calling paymaster with this value + postOpReverted + } + + /** + * Payment validation: check if paymaster agrees to pay. + * Must verify sender is the entryPoint. + * Revert to reject this request. + * Note that bundlers will reject this method if it changes the state, unless the paymaster is trusted (whitelisted). + * The paymaster pre-pays using its deposit, and receive back a refund after the postOp method returns. + * @param userOp - The user operation. + * @param userOpHash - Hash of the user's request data. + * @param maxCost - The maximum cost of this transaction (based on maximum gas and gas price from userOp). + * @return context - Value to send to a postOp. Zero length to signify postOp is not required. + * @return validationData - Signature and time-range of this operation, encoded the same as the return + * value of validateUserOperation. + * <20-byte> sigAuthorizer - 0 for valid signature, 1 to mark signature failure, + * other values are invalid for paymaster. + * <6-byte> validUntil - last timestamp this operation is valid. 0 for "indefinite" + * <6-byte> validAfter - first timestamp this operation is valid + * Note that the validation code cannot use block.timestamp (or block.number) directly. + */ + function validatePaymasterUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash, uint256 maxCost) + external + returns (bytes memory context, uint256 validationData); + + /** + * Post-operation handler. + * Must verify sender is the entryPoint. + * @param mode - Enum with the following options: + * opSucceeded - User operation succeeded. + * opReverted - User op reverted. The paymaster still has to pay for gas. + * postOpReverted - never passed in a call to postOp(). + * @param context - The context value returned by validatePaymasterUserOp + * @param actualGasCost - Actual gas used so far (without this postOp call). + * @param actualUserOpFeePerGas - the gas price this UserOp pays. This value is based on the UserOp's maxFeePerGas + * and maxPriorityFee (and basefee) + * It is not the same as tx.gasprice, which is what the bundler pays. + */ + function postOp(PostOpMode mode, bytes calldata context, uint256 actualGasCost, uint256 actualUserOpFeePerGas) + external; +} diff --git a/src/interfaces/IStakeManager.sol b/src/interfaces/IStakeManager.sol new file mode 100644 index 00000000..01612d9c --- /dev/null +++ b/src/interfaces/IStakeManager.sol @@ -0,0 +1,94 @@ +// SPDX-License-Identifier: GPL-3.0-only +pragma solidity >=0.7.5; + +/** + * Manage deposits and stakes. + * Deposit is just a balance used to pay for UserOperations (either by a paymaster or an account). + * Stake is value locked for at least "unstakeDelay" by the staked entity. + */ +interface IStakeManager { + event Deposited(address indexed account, uint256 totalDeposit); + + event Withdrawn(address indexed account, address withdrawAddress, uint256 amount); + + // Emitted when stake or unstake delay are modified. + event StakeLocked(address indexed account, uint256 totalStaked, uint256 unstakeDelaySec); + + // Emitted once a stake is scheduled for withdrawal. + event StakeUnlocked(address indexed account, uint256 withdrawTime); + + event StakeWithdrawn(address indexed account, address withdrawAddress, uint256 amount); + + /** + * @param deposit - The entity's deposit. + * @param staked - True if this entity is staked. + * @param stake - Actual amount of ether staked for this entity. + * @param unstakeDelaySec - Minimum delay to withdraw the stake. + * @param withdrawTime - First block timestamp where 'withdrawStake' will be callable, or zero if already locked. + * @dev Sizes were chosen so that deposit fits into one cell (used during handleOp) + * and the rest fit into a 2nd cell (used during stake/unstake) + * - 112 bit allows for 10^15 eth + * - 48 bit for full timestamp + * - 32 bit allows 150 years for unstake delay + */ + struct DepositInfo { + uint256 deposit; + bool staked; + uint112 stake; + uint32 unstakeDelaySec; + uint48 withdrawTime; + } + + // API struct used by getStakeInfo and simulateValidation. + struct StakeInfo { + uint256 stake; + uint256 unstakeDelaySec; + } + + /** + * Get deposit info. + * @param account - The account to query. + * @return info - Full deposit information of given account. + */ + function getDepositInfo(address account) external view returns (DepositInfo memory info); + + /** + * Get account balance. + * @param account - The account to query. + * @return - The deposit (for gas payment) of the account. + */ + function balanceOf(address account) external view returns (uint256); + + /** + * Add to the deposit of the given account. + * @param account - The account to add to. + */ + function depositTo(address account) external payable; + + /** + * Add to the account's stake - amount and delay + * any pending unstake is first cancelled. + * @param _unstakeDelaySec - The new lock duration before the deposit can be withdrawn. + */ + function addStake(uint32 _unstakeDelaySec) external payable; + + /** + * Attempt to unlock the stake. + * The value can be withdrawn (using withdrawStake) after the unstake delay. + */ + function unlockStake() external; + + /** + * Withdraw from the (unlocked) stake. + * Must first call unlockStake and wait for the unstakeDelay to pass. + * @param withdrawAddress - The address to send withdrawn value. + */ + function withdrawStake(address payable withdrawAddress) external; + + /** + * Withdraw from the deposit. + * @param withdrawAddress - The address to send withdrawn value. + * @param withdrawAmount - The amount to withdraw. + */ + function withdrawTo(address payable withdrawAddress, uint256 withdrawAmount) external; +} diff --git a/src/interfaces/PackedUserOperation.sol b/src/interfaces/PackedUserOperation.sol new file mode 100644 index 00000000..7d455b27 --- /dev/null +++ b/src/interfaces/PackedUserOperation.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-3.0 +pragma solidity >=0.7.5; + +/** + * User Operation struct + * @param sender - The sender account of this request. + * @param nonce - Unique value the sender uses to verify it is not a replay. + * @param initCode - If set, the account contract will be created by this constructor/ + * @param callData - The method call to execute on this account. + * @param accountGasLimits - Packed gas limits for validateUserOp and gas limit passed to the callData method call. + * @param preVerificationGas - Gas not calculated by the handleOps method, but added to the gas paid. + * Covers batch overhead. + * @param gasFees - packed gas fields maxFeePerGas and maxPriorityFeePerGas - Same as EIP-1559 gas parameter. + * @param paymasterAndData - If set, this field holds the paymaster address, verification gas limit, postOp gas limit and paymaster-specific extra data + * The paymaster will pay for the transaction instead of the sender. + * @param signature - Sender-verified signature over the entire request, the EntryPoint address and the chain ID. + */ +struct PackedUserOperation { + address sender; + uint256 nonce; + bytes initCode; + bytes callData; + bytes32 accountGasLimits; + uint256 preVerificationGas; + bytes32 gasFees; //maxPriorityFee and maxFeePerGas; + bytes paymasterAndData; + bytes signature; +} diff --git a/src/lite/KernelLiteECDSA.sol b/src/lite/KernelLiteECDSA.sol deleted file mode 100644 index ee42efe1..00000000 --- a/src/lite/KernelLiteECDSA.sol +++ /dev/null @@ -1,94 +0,0 @@ -pragma solidity ^0.8.0; - -import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol"; -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; -import {ECDSA} from "solady/utils/ECDSA.sol"; -import {Kernel} from "../Kernel.sol"; -import {IKernelValidator} from "../interfaces/IKernelValidator.sol"; -import {ValidationData} from "../common/Types.sol"; -import {SIG_VALIDATION_FAILED, KERNEL_STORAGE_SLOT_1} from "../common/Constants.sol"; -import {ExecutionDetail} from "../common/Structs.sol"; -import {packValidationData} from "../common/Types.sol"; -import {_intersectValidationData} from "../utils/KernelHelper.sol"; - -struct KernelLiteECDSAStorage { - address owner; -} - -/// @title KernelLiteECDSA Contract -/// @dev A lite version of the Kernel contract which only uses ECDSA signatures for validation -contract KernelLiteECDSA is Kernel { - error InvalidAccess(); - error InvalidValidator(); - - address public immutable KERNEL_ECDSA_VALIDATOR; - - /// @dev The storage slot for this contract - bytes32 private constant KERNEL_LITE_ECDSA_STORAGE_SLOT = - 0xdea7fea882fba743201b2aeb1babf326b8944488db560784858525d123ee7e97; // keccak256(abi.encodePacked("zerodev.kernel.lite.ecdsa")) - 1 - - constructor(IEntryPoint _entryPoint, IKernelValidator _ecdsaValidator) Kernel(_entryPoint) { - KERNEL_ECDSA_VALIDATOR = address(_ecdsaValidator); - getKernelLiteECDSAStorage().owner = address(1); // set owner to non-zero address to prevent initialization - } - - /// @dev Transfer the ownership of this current kernel - function transferOwnership(address _newOwner) external payable onlyFromEntryPointOrSelf { - getKernelLiteECDSAStorage().owner = _newOwner; - } - - // FOR KERNEL USAGE - function getKernelLiteECDSAStorage() internal pure returns (KernelLiteECDSAStorage storage s) { - assembly { - s.slot := KERNEL_LITE_ECDSA_STORAGE_SLOT - } - } - - /// @dev Set the initial data for this kernel (setup ecdsa signer address) - function _setInitialData(IKernelValidator _validator, bytes calldata _data) internal override { - // Ensure the validator is valid - if (address(_validator) != KERNEL_ECDSA_VALIDATOR) revert InvalidValidator(); - // Ensure the account isn't already initialized - if (getKernelLiteECDSAStorage().owner != address(0)) revert AlreadyInitialized(); - - address owner = address(bytes20(_data[0:20])); - getKernelLiteECDSAStorage().owner = owner; - } - - /// @dev Validate a user operation - function _validateUserOp(UserOperation calldata _op, bytes32 _opHash, uint256) - internal - view - override - returns (ValidationData) - { - address signed = ECDSA.recover(ECDSA.toEthSignedMessageHash(_opHash), _op.signature[4:]); // note that first 4 bytes are for modes - if (signed != getKernelLiteECDSAStorage().owner) { - return SIG_VALIDATION_FAILED; - } - return ValidationData.wrap(0); - } - - /// @dev Validate a signature - function _validateSignature(address, /*_requestor*/ bytes32 _hash, bytes32, /*_rawHash*/ bytes calldata _signature) - internal - view - override - returns (ValidationData) - { - address signed = ECDSA.recover(ECDSA.toEthSignedMessageHash(_hash), _signature); - if (signed == getKernelLiteECDSAStorage().owner) { - return ValidationData.wrap(0); - } - return SIG_VALIDATION_FAILED; - } - - /// @dev Check if the caller is valid - function _validCaller(address _caller, bytes calldata) internal view override returns (bool) { - return _caller == getKernelLiteECDSAStorage().owner; - } - - function setDefaultValidator(IKernelValidator, bytes calldata) external payable override onlyFromEntryPointOrSelf { - revert("not implemented"); - } -} diff --git a/src/mock/MockAction.sol b/src/mock/MockAction.sol new file mode 100644 index 00000000..dd31e1dc --- /dev/null +++ b/src/mock/MockAction.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +contract MockAction { + event MockActionEvent(address here); + + function onInstall(bytes calldata data) external payable {} + + function onUninstall(bytes calldata data) external payable {} + + function isModuleType(uint256 moduleTypeId) external view returns (bool) {} + + function isInitialized(address smartAccount) external view returns (bool) {} + + function doSomething() external { + emit MockActionEvent(address(this)); + } +} diff --git a/src/mock/MockExecutor.sol b/src/mock/MockExecutor.sol new file mode 100644 index 00000000..7f286e37 --- /dev/null +++ b/src/mock/MockExecutor.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IExecutor} from "../interfaces/IERC7579Modules.sol"; +import {IERC7579Account, ExecMode} from "../interfaces/IERC7579Account.sol"; + +contract MockExecutor is IExecutor { + mapping(address => bytes) public data; + + function onInstall(bytes calldata _data) external payable override { + data[msg.sender] = _data; + } + + function onUninstall(bytes calldata) external payable override { + delete data[msg.sender]; + } + + function isModuleType(uint256 moduleTypeId) external pure override returns (bool) { + return moduleTypeId == 2; + } + + function isInitialized(address smartAccount) external view override returns (bool) { + return data[smartAccount].length > 0; + } + + function sudoDoExec(IERC7579Account account, ExecMode mode, bytes calldata executionCalldata) external payable { + account.executeFromExecutor(mode, executionCalldata); + } +} diff --git a/src/mock/MockFallback.sol b/src/mock/MockFallback.sol new file mode 100644 index 00000000..f8fc4231 --- /dev/null +++ b/src/mock/MockFallback.sol @@ -0,0 +1,71 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IERC7579Account} from "../interfaces/IERC7579Account.sol"; +import {IFallback} from "../interfaces/IERC7579Modules.sol"; +import {CallType, ExecType, ExecMode, ExecLib} from "../utils/ExecLib.sol"; +import {EXEC_MODE_DEFAULT} from "../types/Constants.sol"; + +contract Callee { + address public lastCaller; + + function calleeTest() external { + lastCaller = msg.sender; + } +} + +contract MockFallback is IFallback { + mapping(address => bytes) public data; + + uint256 public valueStored; + + bool isExecutor; + + Callee public callee; + + constructor() { + callee = new Callee(); + } + + function setExecutorMode(bool _isExecutor) external payable { + isExecutor = _isExecutor; + } + + function onInstall(bytes calldata _data) external payable override { + data[msg.sender] = _data; + } + + function onUninstall(bytes calldata) external payable override { + delete data[msg.sender]; + } + + function isModuleType(uint256 moduleTypeId) external view override returns (bool) { + return moduleTypeId == 3 || (isExecutor && moduleTypeId == 2); + } + + function isInitialized(address smartAccount) external view override returns (bool) { + return data[smartAccount].length > 0; + } + + function fallbackFunction(uint256 v) external pure returns (uint256) { + return v * v; + } + + function getData() external view returns (bytes memory) { + return data[msg.sender]; + } + + function getCaller() external pure returns (address) { + return address(bytes20(msg.data[msg.data.length - 20:])); + } + + function setData(uint256 value) external { + valueStored = value; + if (isExecutor) { + IERC7579Account(msg.sender).executeFromExecutor( + ExecLib.encodeSimpleSingle(), + ExecLib.encodeSingle(address(callee), 0, abi.encodeWithSelector(Callee.calleeTest.selector)) + ); + } + } +} diff --git a/src/mock/MockHook.sol b/src/mock/MockHook.sol new file mode 100644 index 00000000..7acaadac --- /dev/null +++ b/src/mock/MockHook.sol @@ -0,0 +1,40 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IHook} from "../interfaces/IERC7579Modules.sol"; + +contract MockHook is IHook { + mapping(address => bytes) public data; + mapping(address => bytes) public preHookData; + mapping(address => bytes) public postHookData; + + function onInstall(bytes calldata _data) external payable override { + data[msg.sender] = _data; + } + + function onUninstall(bytes calldata) external payable override { + delete data[msg.sender]; + } + + function isModuleType(uint256 moduleTypeId) external pure override returns (bool) { + return moduleTypeId == 1; + } + + function isInitialized(address smartAccount) external view override returns (bool) { + return data[smartAccount].length > 0; + } + + function preCheck(address msgSender, uint256 value, bytes calldata msgData) + external + payable + override + returns (bytes memory hookData) + { + preHookData[msg.sender] = abi.encodePacked(msgSender, msgData); + return data[msg.sender]; + } + + function postCheck(bytes calldata hookData, bool success, bytes memory res) external payable override { + postHookData[msg.sender] = hookData; + } +} diff --git a/src/mock/MockPolicy.sol b/src/mock/MockPolicy.sol new file mode 100644 index 00000000..a4a9fdd8 --- /dev/null +++ b/src/mock/MockPolicy.sol @@ -0,0 +1,53 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import {IPolicy} from "../interfaces/IERC7579Modules.sol"; +import {PackedUserOperation} from "../interfaces/PackedUserOperation.sol"; +import "forge-std/console.sol"; + +contract MockPolicy is IPolicy { + mapping(address => mapping(bytes32 => bool)) public pass; + mapping(address => bytes) public installData; + mapping(address => mapping(bytes32 => bytes)) public sig; + + function onInstall(bytes calldata data) external payable override { + installData[msg.sender] = data; + } + + function onUninstall(bytes calldata) external payable override {} + + function sudoSetValidSig(address _wallet, bytes32 _id, bytes calldata _sig) external payable { + sig[_wallet][_id] = _sig; + } + + function sudoSetPass(address _wallet, bytes32 _id, bool _pass) external payable { + pass[_wallet][_id] = _pass; + } + + function isModuleType(uint256 moduleTypeId) external pure override returns (bool) { + return moduleTypeId == 5; + } + + function isInitialized(address smartAccount) external view override returns (bool) { + return installData[smartAccount].length > 0; + } + + function checkUserOpPolicy(bytes32 id, PackedUserOperation calldata userOp) + external + payable + override + returns (uint256) + { + return keccak256(userOp.signature) == keccak256(sig[msg.sender][id]) ? 0 : 1; + } + + function checkSignaturePolicy(bytes32 id, address, bytes32, bytes calldata) + external + view + override + returns (uint256) + { + return pass[msg.sender][id] ? 0 : 1; + } +} diff --git a/src/mock/MockSigner.sol b/src/mock/MockSigner.sol new file mode 100644 index 00000000..f082a330 --- /dev/null +++ b/src/mock/MockSigner.sol @@ -0,0 +1,54 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "../interfaces/IERC7579Modules.sol"; + +contract MockSigner is ISigner { + mapping(address wallet => bytes) public data; + mapping(address => mapping(bytes32 => bytes)) public sig; + mapping(address => mapping(bytes32 => bool)) public pass; + + function sudoSetValidSig(address _wallet, bytes32 _id, bytes calldata _sig) external payable { + sig[_wallet][_id] = _sig; + } + + function sudoSetPass(address _wallet, bytes32 _id, bool _flag) external payable { + pass[_wallet][_id] = _flag; + } + + function onInstall(bytes calldata _data) external payable override { + data[msg.sender] = _data; + } + + function onUninstall(bytes calldata) external payable override {} + + function isModuleType(uint256 moduleTypeId) external pure override returns (bool) { + if (moduleTypeId == 7) { + return true; + } else { + return false; + } + } + + function isInitialized(address smartAccount) external view override returns (bool) { + return data[smartAccount].length > 0; + } + + function checkUserOpSignature(bytes32 id, PackedUserOperation calldata userOp, bytes32) + external + payable + override + returns (uint256) + { + return keccak256(userOp.signature) == keccak256(sig[msg.sender][id]) ? 0 : 1; + } + + function checkSignature(bytes32 id, address, bytes32, bytes calldata) external view override returns (bytes4) { + if (pass[msg.sender][id] == true) { + return 0x1626ba7e; + } else { + return 0xffffffff; + } + } +} diff --git a/src/mock/MockValidator.sol b/src/mock/MockValidator.sol new file mode 100644 index 00000000..7e221212 --- /dev/null +++ b/src/mock/MockValidator.sol @@ -0,0 +1,82 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import "../interfaces/IERC7579Modules.sol"; + +contract MockValidator is IValidator, IHook { + mapping(address => bool) public initialized; + bool public success; + uint256 public count; + + mapping(address => bytes) public validatorData; + mapping(bytes32 => bool) public validSig; + + bool public isHook; + + function setHook(bool _isHook) external { + isHook = _isHook; + } + + function sudoSetSuccess(bool _success) external { + success = _success; + } + + function sudoSetValidSig(bytes calldata sig) external { + validSig[keccak256(sig)] = true; + } + + function onInstall(bytes calldata data) external payable { + initialized[msg.sender] = true; + validatorData[msg.sender] = data; + } + + function onUninstall(bytes calldata data) external payable { + initialized[msg.sender] = false; + validatorData[msg.sender] = data; + } + + function isModuleType(uint256 typeID) external pure returns (bool) { + return typeID == 1; + } + + /** + * @dev Returns if the module was already initialized for a provided smartaccount + */ + function isInitialized(address smartAccount) external view returns (bool) { + return initialized[smartAccount]; + } + + function validateUserOp(PackedUserOperation calldata, bytes32) external payable returns (uint256) { + count++; + + if (success) { + return 0; + } else { + return 1; + } + } + + function isValidSignatureWithSender(address, bytes32, bytes calldata sig) external view returns (bytes4) { + if (validSig[keccak256(sig)] == true) { + return 0x1626ba7e; + } else { + return 0xffffffff; + } + } + + function preCheck(address msgSender, uint256 value, bytes calldata msgData) + external + payable + returns (bytes memory hookData) + { + return hex""; + } + + function postCheck(bytes calldata hookData, bool executionSuccess, bytes calldata executionReturn) + external + payable + { + return; + } +} diff --git a/src/mock/TestCallee.sol b/src/mock/TestCallee.sol deleted file mode 100644 index d23830f2..00000000 --- a/src/mock/TestCallee.sol +++ /dev/null @@ -1,39 +0,0 @@ -pragma solidity ^0.8.0; - -contract TestCallee { - uint256 public result; - address public caller; - uint256 public sent; - bytes public message; - - receive() external payable {} - - fallback() external payable { - message = msg.data; - sent = msg.value; - caller = msg.sender; - } - - function test_ignore() external {} - - function addTester(uint256 a, uint256 b) external payable { - result = a + b + msg.value; - } - - function transferErc20Tester(address token, address to, uint256 amount) external { - (bool success, bytes memory data) = token.call(abi.encodeWithSignature("transfer(address,uint256)", to, amount)); - require(success, string(data)); - } - - function returnLong() external payable returns (string memory) { - return - "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Praesent nec nunc sed nisi sollicitudin suscipit at at nulla. Aenean porttitor tellus felis, dapibus lacinia elit ullamcorper id. Ut dapibus efficitur neque posuere varius. Aenean in sem ac dolor accumsan egestas ut sit amet arcu. Vestibulum nunc urna, imperdiet ut enim eu, venenatis placerat mi. Aliquam a nibh a augue sollicitudin rutrum. Donec eleifend semper elit eu facilisis."; - } - - function returnLongBytes() external payable returns (bytes memory) { - return - hex"0000000000000000000000000000000000000000000000000de0b6b3a76400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000"; - } - - function notThis() external {} -} diff --git a/src/mock/TestCounter.sol b/src/mock/TestCounter.sol deleted file mode 100644 index 9288084a..00000000 --- a/src/mock/TestCounter.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -contract TestCounter { - uint256 public counter; - - function test_ignore() public {} - - function increment() public { - counter += 1; - } -} diff --git a/src/mock/TestERC1155.sol b/src/mock/TestERC1155.sol deleted file mode 100644 index 3646fe69..00000000 --- a/src/mock/TestERC1155.sol +++ /dev/null @@ -1,20 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "solady/tokens/ERC1155.sol"; - -contract TestERC1155 is ERC1155 { - function test_ignore() public {} - - function uri(uint256) public pure override returns (string memory) { - return "https://example.com"; - } - - function mint(address to, uint256 id, uint256 amount, bytes memory data) public { - _mint(to, id, amount, data); - } - - function batchMint(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public { - _batchMint(to, ids, amounts, data); - } -} diff --git a/src/mock/TestERC20.sol b/src/mock/TestERC20.sol deleted file mode 100644 index 7390bd79..00000000 --- a/src/mock/TestERC20.sol +++ /dev/null @@ -1,22 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "solady/tokens/ERC20.sol"; - -contract TestERC20 is ERC20 { - constructor() ERC20() {} - - function test_ignore() public {} - - function name() public pure override returns (string memory) { - return "TestERC20"; - } - - function symbol() public pure override returns (string memory) { - return "TST"; - } - - function mint(address _to, uint256 _amount) external { - _mint(_to, _amount); - } -} diff --git a/src/mock/TestERC721.sol b/src/mock/TestERC721.sol deleted file mode 100644 index 703433f8..00000000 --- a/src/mock/TestERC721.sol +++ /dev/null @@ -1,30 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "solady/tokens/ERC721.sol"; - -contract TestERC721 is ERC721 { - constructor() ERC721() {} - - function test_ignore() public {} - - function name() public pure override returns (string memory) { - return "TestERC721"; - } - - function symbol() public pure override returns (string memory) { - return "TEST"; - } - - function tokenURI(uint256) public pure override returns (string memory) { - return ""; - } - - function mint(address _to, uint256 _id) external { - _mint(_to, _id); - } - - function safeMint(address _to, uint256 _id) external { - _safeMint(_to, _id); - } -} diff --git a/src/mock/TestExecutor.sol b/src/mock/TestExecutor.sol deleted file mode 100644 index 72650740..00000000 --- a/src/mock/TestExecutor.sol +++ /dev/null @@ -1,13 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -contract TestExecutor { - event TestExecutorDoNothing(); - - function test_ignore() public {} - - function doNothing() external { - // do nothing - emit TestExecutorDoNothing(); - } -} diff --git a/src/mock/TestKernel.sol b/src/mock/TestKernel.sol deleted file mode 100644 index 48a04ad1..00000000 --- a/src/mock/TestKernel.sol +++ /dev/null @@ -1,16 +0,0 @@ -pragma solidity ^0.8.0; - -import "../Kernel.sol"; - -contract TestKernel is Kernel { - constructor(IEntryPoint _entryPoint) Kernel(_entryPoint) {} - - function test_ignore() public {} - - function sudoInitialize(IKernelValidator _defaultValidator, bytes calldata _data) external payable { - WalletKernelStorage storage ws = getKernelStorage(); - ws.defaultValidator = _defaultValidator; - emit DefaultValidatorChanged(address(0), address(_defaultValidator)); - _defaultValidator.enable(_data); - } -} diff --git a/src/mock/TestPaymaster.sol b/src/mock/TestPaymaster.sol deleted file mode 100644 index 672335d4..00000000 --- a/src/mock/TestPaymaster.sol +++ /dev/null @@ -1,20 +0,0 @@ -pragma solidity ^0.8.0; - -import "I4337/interfaces/IPaymaster.sol"; - -contract TestPaymaster is IPaymaster { - function test_ignore() external {} - - function validatePaymasterUserOp(UserOperation calldata, bytes32, uint256) - external - pure - override - returns (bytes memory context, uint256 validationData) - { - return ("", 0); - } - - function postOp(PostOpMode, bytes calldata, uint256) external pure { - revert(""); - } -} diff --git a/src/mock/TestValidator.sol b/src/mock/TestValidator.sol deleted file mode 100644 index dad5d27e..00000000 --- a/src/mock/TestValidator.sol +++ /dev/null @@ -1,55 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "../interfaces/IKernelValidator.sol"; -import "../common/Types.sol"; -import "../utils/KernelHelper.sol"; -import "../common/Constants.sol"; - -contract TestValidator is IKernelValidator { - event TestValidateUserOp(bytes32 indexed opHash); - event TestEnable(bytes data); - event TestDisable(bytes data); - - mapping(address kernel => address) public caller; - - ValidationData public data; - - function test_ignore() public {} - - function sudoSetCaller(address _kernel, address _caller) external { - caller[_kernel] = _caller; - } - - function setData(bool success, uint48 validAfter, uint48 validUntil) external { - data = success - ? packValidationData(ValidAfter.wrap(validAfter), ValidUntil.wrap(validUntil)) - : SIG_VALIDATION_FAILED; - } - - function validateSignature(bytes32, bytes calldata) external view override returns (ValidationData) { - return data; - } - - function validateUserOp(UserOperation calldata, bytes32 userOpHash, uint256) - external - payable - override - returns (ValidationData) - { - emit TestValidateUserOp(userOpHash); - return ValidationData.wrap(0); - } - - function enable(bytes calldata _data) external payable override { - emit TestEnable(_data); - } - - function disable(bytes calldata _data) external payable override { - emit TestDisable(_data); - } - - function validCaller(address _caller, bytes calldata) external view override returns (bool) { - return _caller == caller[msg.sender]; - } -} diff --git a/src/sdk/ModuleStorageLib.sol b/src/sdk/ModuleStorageLib.sol new file mode 100644 index 00000000..15a8c0d1 --- /dev/null +++ b/src/sdk/ModuleStorageLib.sol @@ -0,0 +1,2 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; diff --git a/src/sdk/TestBase/ActionTestBase.sol b/src/sdk/TestBase/ActionTestBase.sol new file mode 100644 index 00000000..15a8c0d1 --- /dev/null +++ b/src/sdk/TestBase/ActionTestBase.sol @@ -0,0 +1,2 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; diff --git a/src/sdk/TestBase/ExecutorTestBase.sol b/src/sdk/TestBase/ExecutorTestBase.sol new file mode 100644 index 00000000..15a8c0d1 --- /dev/null +++ b/src/sdk/TestBase/ExecutorTestBase.sol @@ -0,0 +1,2 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; diff --git a/src/sdk/TestBase/FallbackTestBase.sol b/src/sdk/TestBase/FallbackTestBase.sol new file mode 100644 index 00000000..15a8c0d1 --- /dev/null +++ b/src/sdk/TestBase/FallbackTestBase.sol @@ -0,0 +1,2 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; diff --git a/src/sdk/TestBase/HookTestBase.sol b/src/sdk/TestBase/HookTestBase.sol new file mode 100644 index 00000000..15a8c0d1 --- /dev/null +++ b/src/sdk/TestBase/HookTestBase.sol @@ -0,0 +1,2 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; diff --git a/src/sdk/TestBase/KernelTestBase.sol b/src/sdk/TestBase/KernelTestBase.sol new file mode 100644 index 00000000..6c0d334d --- /dev/null +++ b/src/sdk/TestBase/KernelTestBase.sol @@ -0,0 +1,877 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "src/Kernel.sol"; +import "src/factory/KernelFactory.sol"; +import "src/factory/FactoryStaker.sol"; +import "forge-std/Test.sol"; +import "src/mock/MockValidator.sol"; +import "src/mock/MockPolicy.sol"; +import "src/mock/MockSigner.sol"; +import "src/mock/MockAction.sol"; +import "src/mock/MockHook.sol"; +import "src/mock/MockExecutor.sol"; +import "src/mock/MockFallback.sol"; +import "src/core/ValidationManager.sol"; +import "./erc4337Util.sol"; + +contract MockCallee { + uint256 public value; + + function setValue(uint256 _value) public { + value = _value; + } +} + +abstract contract KernelTestBase is Test { + address stakerOwner; + Kernel kernel; + KernelFactory factory; + FactoryStaker staker; + IEntryPoint entrypoint; + ValidationId rootValidation; + + struct RootValidationConfig { + IHook hook; + bytes validatorData; + bytes hookData; + } + + RootValidationConfig rootValidationConfig; + MockValidator mockValidator; + MockCallee callee; + MockHook mockHook; + MockFallback mockFallback; + MockExecutor mockExecutor; + + IValidator enabledValidator; + EnableValidatorConfig validationConfig; + + struct EnableValidatorConfig { + IHook hook; + bytes hookData; + bytes validatorData; + } + + PermissionId enabledPermission; + EnablePermissionConfig permissionConfig; + + struct EnablePermissionConfig { + IHook hook; + bytes hookData; + IPolicy[] policies; + bytes[] policyData; + ISigner signer; + bytes signerData; + } + + modifier whenInitialized() { + address deployed = factory.createAccount(initData(), bytes32(0)); + assertEq(deployed, address(kernel)); + assertEq(kernel.currentNonce(), 1); + assertEq(ValidationId.unwrap(kernel.rootValidator()), ValidationId.unwrap(rootValidation)); + _; + } + + modifier whenValidatorEnabled(bool useFallback, bool isExecutor) { + PackedUserOperation[] memory ops = new PackedUserOperation[](1); + ops[0] = _prepareUserOp( + VALIDATION_TYPE_VALIDATOR, + useFallback, + isExecutor, + encodeExecute(address(callee), 0, abi.encodeWithSelector(callee.setValue.selector, 123)), + true, + true + ); + entrypoint.handleOps(ops, payable(address(0xdeadbeef))); + _; + } + + modifier whenPermissionEnabled(bool useFallback, bool isExecutor) { + _; + } + + function needEnable(ValidationType vType) internal view returns (bool) { + if (vType == VALIDATION_TYPE_VALIDATOR) { + if ( + address(kernel.validationConfig(ValidatorLib.validatorToIdentifier(enabledValidator)).hook) + == address(0) + ) { + return true; + } + return false; + } else if (vType == VALIDATION_TYPE_PERMISSION) { + return address(kernel.validationConfig(ValidatorLib.permissionToIdentifier(enabledPermission)).hook) + == address(0); + } else if (vType == VALIDATION_TYPE_ROOT) { + return false; + } else { + revert("Invalid validation type"); + } + } + + function encodeNonce(ValidationType vType, bool enable) internal view returns (uint256 nonce) { + uint192 nonceKey = 0; + if (vType == VALIDATION_TYPE_ROOT) { + nonceKey = 0; + } else if (vType == VALIDATION_TYPE_VALIDATOR) { + ValidationMode mode = VALIDATION_MODE_DEFAULT; + if (enable) { + mode = VALIDATION_MODE_ENABLE; + } + nonceKey = ValidatorLib.encodeAsNonceKey( + ValidationMode.unwrap(mode), + ValidationType.unwrap(vType), + bytes20(address(enabledValidator)), + 0 // parallel key + ); + } else if (vType == VALIDATION_TYPE_PERMISSION) { + ValidationMode mode = VALIDATION_MODE_DEFAULT; + if (enable) { + mode = VALIDATION_MODE_ENABLE; + } + nonceKey = ValidatorLib.encodeAsNonceKey( + ValidationMode.unwrap(VALIDATION_MODE_ENABLE), + ValidationType.unwrap(vType), + bytes20(PermissionId.unwrap(enabledPermission)), // permission id + 0 + ); + } else { + revert("Invalid validation type"); + } + return entrypoint.getNonce(address(kernel), nonceKey); + } + + function getEnableDigest(ValidationType vType, bool overrideValidation, bytes memory selectorData) + internal + view + returns (bytes32) + { + uint32 nonce = kernel.currentNonce(); + if (overrideValidation) { + nonce = nonce + 1; + } + ValidationId vId; + IHook hook; + bytes memory validatorData; + bytes memory hookData; + if (vType == VALIDATION_TYPE_VALIDATOR) { + vId = ValidatorLib.validatorToIdentifier(enabledValidator); + hook = validationConfig.hook; + validatorData = validationConfig.validatorData; + hookData = validationConfig.hookData; + } else if (vType == VALIDATION_TYPE_PERMISSION) { + vId = ValidatorLib.permissionToIdentifier(enabledPermission); + hook = permissionConfig.hook; + validatorData = encodePermissionsEnableData(); + hookData = permissionConfig.hookData; + } else { + revert("Invalid validation type"); + } + + bytes32 hash = keccak256( + abi.encode( + keccak256( + "Enable(bytes21 validationId,uint32 nonce,address hook,bytes validatorData,bytes hookData,bytes selectorData)" + ), + ValidationId.unwrap(vId), + uint256(nonce), + hook, + keccak256(validatorData), + keccak256(abi.encodePacked(hex"ff", hookData)), + keccak256(selectorData) + ) + ); + + bytes32 digest = keccak256( + abi.encodePacked("\x19\x01", _buildDomainSeparator("Kernel", "0.3.0-beta", address(kernel)), hash) + ); + + return digest; + } + + function encodeSelectorData(bool isFallback, bool isExecutor) internal view returns (bytes memory) { + if (isFallback && isExecutor) { + return abi.encodePacked( + MockFallback.setData.selector, + address(mockFallback), + address(1), + abi.encode(abi.encodePacked(hex"00", "MockFallbackInit"), hex"", abi.encodePacked(address(0))) // TODO add executor hook test + ); + } else if (isFallback) { + return abi.encodePacked( + MockFallback.setData.selector, + address(mockFallback), + address(1), + abi.encode(abi.encodePacked(hex"00", "MockFallbackInit"), hex"") + ); + } else if (!isFallback && !isExecutor) { + return abi.encodePacked(Kernel.execute.selector); + } else { + revert("Invalid selector data"); + } + } + + function getValidationId(ValidationType vType) internal view returns (ValidationId) { + if (vType == VALIDATION_TYPE_VALIDATOR) { + return ValidatorLib.validatorToIdentifier(enabledValidator); + } else if (vType == VALIDATION_TYPE_PERMISSION) { + return ValidatorLib.permissionToIdentifier(enabledPermission); + } else { + revert("Invalid validation type"); + } + } + + function getEnableSignature( + ValidationType vType, + bytes32 digest, + bytes memory selectorData, + PackedUserOperation memory op, + bool successEnable, + bool successUserOp + ) internal returns (bytes memory) { + bytes memory enableSig = _rootSignDigest(digest, successEnable); + bytes memory userOpSig = _signUserOp(vType, op, successUserOp); + IHook hook; + bytes memory validatorData; + bytes memory hookData; + if (vType == VALIDATION_TYPE_VALIDATOR) { + hook = validationConfig.hook; + validatorData = validationConfig.validatorData; + hookData = validationConfig.hookData; + } else if (vType == VALIDATION_TYPE_PERMISSION) { + hook = permissionConfig.hook; + validatorData = encodePermissionsEnableData(); + hookData = permissionConfig.hookData; + } else { + revert("Invalid validation type"); + } + return encodeEnableSignature( + hook, validatorData, abi.encodePacked(hex"ff", hookData), selectorData, enableSig, userOpSig + ); + } + + function _prepareUserOp( + ValidationType vType, + bool isFallback, + bool isExecutor, + bytes memory callData, + bool successEnable, + bool successUserOp + ) internal returns (PackedUserOperation memory op) { + if (isFallback && isExecutor) { + mockFallback.setExecutorMode(true); + } + bool enable = needEnable(vType); + op = PackedUserOperation({ + sender: address(kernel), + nonce: encodeNonce(vType, enable), + initCode: address(kernel).code.length == 0 + ? abi.encodePacked( + address(staker), abi.encodeWithSelector(staker.deployWithFactory.selector, factory, initData(), bytes32(0)) + ) + : abi.encodePacked(hex""), + callData: callData, + accountGasLimits: bytes32(abi.encodePacked(uint128(1000000), uint128(1000000))), // TODO make this dynamic + preVerificationGas: 1000000, + gasFees: bytes32(abi.encodePacked(uint128(1), uint128(1))), + paymasterAndData: hex"", // TODO have paymaster test cases + signature: hex"" + }); + if (enable) { + bytes memory selectorData = encodeSelectorData(isFallback, isExecutor); + bytes32 digest = getEnableDigest(vType, false, selectorData); + op.signature = getEnableSignature(vType, digest, selectorData, op, successEnable, successUserOp); + } else { + op.signature = _signUserOp(vType, op, successUserOp); + } + } + + function setUp() public { + enabledPermission = PermissionId.wrap(bytes4(0xdeadbeef)); + entrypoint = IEntryPoint(EntryPointLib.deploy()); + Kernel impl = new Kernel(entrypoint); + factory = new KernelFactory(address(impl)); + callee = new MockCallee(); + mockHook = new MockHook(); + mockFallback = new MockFallback(); + mockExecutor = new MockExecutor(); + _setRootValidationConfig(); + _setEnableValidatorConfig(); + _setEnablePermissionConfig(); + kernel = Kernel(payable(factory.getAddress(initData(), bytes32(0)))); + stakerOwner = makeAddr("StakerOwner"); + staker = new FactoryStaker(stakerOwner); + vm.startPrank(stakerOwner); + staker.approveFactory(factory, true); + vm.stopPrank(); + } + + function testDeployWithFactory() external { + vm.deal(address(kernel), 1e18); + PackedUserOperation[] memory ops = new PackedUserOperation[](1); + ops[0] = _prepareUserOp(VALIDATION_TYPE_ROOT, false, false, hex"", true, true); + // _prepareRootUserOp(hex"", true); + entrypoint.handleOps(ops, payable(address(0xdeadbeef))); + } + + function initData() internal view returns (bytes memory) { + return abi.encodeWithSelector( + Kernel.initialize.selector, + rootValidation, + rootValidationConfig.hook, + rootValidationConfig.validatorData, + rootValidationConfig.hookData + ); + } + + function encodeEnableSignature( + IHook hook, + bytes memory validatorData, + bytes memory hookData, + bytes memory selectorData, + bytes memory enableSig, + bytes memory userOpSig + ) internal pure returns (bytes memory) { + return abi.encodePacked( + abi.encodePacked(hook), abi.encode(validatorData, hookData, selectorData, enableSig, userOpSig) + ); + } + + // things to override on test + function _setRootValidationConfig() internal virtual { + mockValidator = new MockValidator(); + rootValidation = ValidatorLib.validatorToIdentifier(mockValidator); + } + + function _setEnableValidatorConfig() internal virtual { + enabledValidator = new MockValidator(); + } + + function _setEnablePermissionConfig() internal virtual { + IPolicy[] memory policies = new IPolicy[](2); + MockPolicy mockPolicy = new MockPolicy(); + MockPolicy mockPolicy2 = new MockPolicy(); + policies[0] = mockPolicy; + policies[1] = mockPolicy2; + bytes[] memory policyData = new bytes[](2); + policyData[0] = "policy1"; + policyData[1] = "policy2"; + MockSigner mockSigner = new MockSigner(); + + permissionConfig.policies = policies; + permissionConfig.signer = mockSigner; + permissionConfig.policyData = policyData; + permissionConfig.signerData = "signer"; + } + + // root validator cases + function _rootValidatorSuccessCheck() internal virtual { + assertEq(123, callee.value()); + } + + function _rootValidatorFailureCheck() internal virtual { + assertEq(0, callee.value()); + } + + function _rootSignDigest(bytes32 digest, bool success) internal virtual returns (bytes memory data) { + if (success) { + data = "enableSig"; + mockValidator.sudoSetValidSig(data); + } else { + data = "failEnableSig"; + } + } + + function _signUserOp(ValidationType vType, PackedUserOperation memory op, bool success) + internal + virtual + returns (bytes memory data) + { + if (vType == VALIDATION_TYPE_VALIDATOR) { + return _validatorSignUserOp(op, success); + } else if (vType == VALIDATION_TYPE_PERMISSION) { + return _permissionSignUserOp(op, success); + } else if (vType == VALIDATION_TYPE_ROOT) { + return _rootSignUserOp(op, success); + } + revert("Invalid validation type"); + } + + function _rootSignUserOp(PackedUserOperation memory op, bool success) internal virtual returns (bytes memory) { + mockValidator.sudoSetSuccess(success); + return success ? abi.encodePacked("success") : abi.encodePacked("failure"); + } + + function _validatorSignUserOp(PackedUserOperation memory, bool success) + internal + virtual + returns (bytes memory data) + { + MockValidator(address(enabledValidator)).sudoSetSuccess(success); + if (success) { + return "userOpSig"; + } else { + return "failUserOpSig"; + } + } + + function _validatorSignDigest(bytes32 digest, bool success) internal virtual returns (bytes memory data) { + if (success) { + data = "enableSig"; + MockValidator(address(enabledValidator)).sudoSetValidSig(data); + } else { + data = "failEnableSig"; + } + } + + function _permissionSignUserOp(PackedUserOperation memory op, bool success) + internal + virtual + returns (bytes memory data) + { + MockPolicy(address(permissionConfig.policies[0])).sudoSetValidSig( + address(kernel), bytes32(PermissionId.unwrap(enabledPermission)), "policy1" + ); + MockPolicy(address(permissionConfig.policies[1])).sudoSetValidSig( + address(kernel), bytes32(PermissionId.unwrap(enabledPermission)), "policy2" + ); + MockSigner(address(permissionConfig.signer)).sudoSetValidSig( + address(kernel), + bytes32(PermissionId.unwrap(enabledPermission)), + success ? abi.encodePacked("userOpSig") : abi.encodePacked("NO") + ); + bytes[] memory sigs = _getPolicyAndSignerSig(op, success); + for (uint8 i = 0; i < sigs.length - 1; i++) { + if (sigs[i].length > 0) { + data = abi.encodePacked(data, bytes1(i), bytes8(uint64(sigs[i].length)), sigs[i]); + } + } + data = abi.encodePacked(data, bytes1(0xff), sigs[sigs.length - 1]); + } + + function _permissionSignDigest(bytes32 digest, bool success) internal virtual returns (bytes memory data) { + MockPolicy(address(permissionConfig.policies[0])).sudoSetPass( + address(kernel), bytes32(PermissionId.unwrap(enabledPermission)), true + ); + MockPolicy(address(permissionConfig.policies[1])).sudoSetPass( + address(kernel), bytes32(PermissionId.unwrap(enabledPermission)), true + ); + MockSigner(address(permissionConfig.signer)).sudoSetPass( + address(kernel), bytes32(PermissionId.unwrap(enabledPermission)), success + ); + return "hello world"; + } + + function _getPolicyAndSignerSig(PackedUserOperation memory op, bool success) + internal + returns (bytes[] memory data) + { + data = new bytes[](3); + data[0] = "policy1"; + data[1] = "policy2"; + data[2] = "userOpSig"; + } + + // --- Root validator cases, no need to enable --- + function testRootValidateUser(bool success) external whenInitialized { + vm.deal(address(kernel), 1e18); + PackedUserOperation[] memory ops = new PackedUserOperation[](1); + ops[0] = _prepareUserOp( + VALIDATION_TYPE_ROOT, + false, + false, + encodeExecute(address(callee), 0, abi.encodeWithSelector(callee.setValue.selector, 123)), + true, + success + ); + if (!success) { + vm.expectRevert(abi.encodeWithSelector(IEntryPoint.FailedOp.selector, 0, "AA24 signature error")); + } + entrypoint.handleOps(ops, payable(address(0xdeadbeef))); + if (success) { + _rootValidatorSuccessCheck(); + } + } + + function _buildDomainSeparator(string memory name, string memory version, address verifyingContract) + internal + view + returns (bytes32) + { + bytes32 hashedName = keccak256(bytes(name)); + bytes32 hashedVersion = keccak256(bytes(version)); + bytes32 typeHash = + keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"); + + return keccak256(abi.encode(typeHash, hashedName, hashedVersion, block.chainid, address(verifyingContract))); + } + + function encodeExecute(address _to, uint256 _amount, bytes memory _data) internal view returns (bytes memory) { + return abi.encodeWithSelector( + kernel.execute.selector, ExecLib.encodeSimpleSingle(), ExecLib.encodeSingle(_to, _amount, _data) + ); + } + + function testInvalidateNonce(uint32 nonce) external whenInitialized { + uint32 kernelNonce = kernel.currentNonce(); + bytes memory errorMsg; + if (nonce < kernelNonce) { + errorMsg = abi.encodeWithSelector(ValidationManager.InvalidNonce.selector); + } else if (nonce > kernelNonce + MAX_NONCE_INCREMENT_SIZE) { + errorMsg = abi.encodeWithSelector(ValidationManager.NonceInvalidationError.selector); + } + if (errorMsg.length > 0) { + vm.expectRevert(errorMsg); + } + vm.prank(address(kernel)); + kernel.invalidateNonce(nonce); + if (errorMsg.length > 0) { + assertEq(kernel.currentNonce(), kernelNonce); + } else { + assertEq(kernel.currentNonce(), nonce); + assertEq(kernel.validNonceFrom(), nonce); + } + } + + function testValidateUserOpWithEnable( + ValidationType vType, + bool useFallback, + bool isExecutor, + bool enableSuccess, + bool userOpSuccess + ) external whenInitialized { + vm.assume(vType == VALIDATION_TYPE_VALIDATOR || vType == VALIDATION_TYPE_PERMISSION); + if (useFallback == false && isExecutor == true) { + isExecutor = false; + } + vm.deal(address(kernel), 1e18); + PackedUserOperation[] memory ops = new PackedUserOperation[](1); + ops[0] = _prepareUserOp( + vType, + useFallback, + isExecutor, + useFallback + ? abi.encodeWithSelector(MockFallback.setData.selector, 123456) + : encodeExecute(address(callee), 0, abi.encodeWithSelector(callee.setValue.selector, 123)), + enableSuccess, + userOpSuccess + ); + if (!enableSuccess) { + vm.expectRevert( + abi.encodeWithSelector( + IEntryPoint.FailedOpWithRevert.selector, + 0, + "AA23 reverted", + abi.encodePacked(ValidationManager.EnableNotApproved.selector) + ) + ); + } else if (!userOpSuccess) { + vm.expectRevert(abi.encodeWithSelector(IEntryPoint.FailedOp.selector, 0, "AA24 signature error")); + } + entrypoint.handleOps(ops, payable(address(0xdeadbeef))); + if (enableSuccess && userOpSuccess) { + ValidationManager.ValidationConfig memory config = kernel.validationConfig(getValidationId(vType)); + assertEq(config.nonce, 1); + assertEq(address(config.hook), address(1)); + assertEq(kernel.currentNonce(), 1); + if (vType == VALIDATION_TYPE_PERMISSION) { + ValidationManager.PermissionConfig memory pConfig = kernel.permissionConfig(enabledPermission); + pConfig.signer = permissionConfig.signer; + } + if (useFallback) { + assertEq(kernel.isAllowedSelector(getValidationId(vType), MockFallback.setData.selector), true); + assertEq(mockFallback.valueStored(), 123456); + Callee callee1 = mockFallback.callee(); + if (isExecutor) { + assertEq(callee1.lastCaller(), address(kernel)); + } else { + assertEq(callee1.lastCaller(), address(0)); + } + } else { + assertEq(kernel.isAllowedSelector(getValidationId(vType), Kernel.execute.selector), true); + assertEq(callee.value(), 123); + } + } + } + + function encodePermissionsEnableData() internal view returns (bytes memory) { + bytes[] memory permissions = new bytes[](permissionConfig.policies.length + 1); + for (uint256 i = 0; i < permissions.length - 1; i++) { + permissions[i] = abi.encodePacked( + PolicyData.unwrap(ValidatorLib.encodePolicyData(false, false, address(permissionConfig.policies[i]))), + permissionConfig.policyData[i] + ); + } + permissions[permissions.length - 1] = abi.encodePacked( + PolicyData.unwrap(ValidatorLib.encodePolicyData(false, false, address(permissionConfig.signer))), + permissionConfig.signerData + ); + return abi.encode(permissions); + } + + function _installAction(bool withHook) internal { + vm.deal(address(kernel), 1e18); + MockAction mockAction = new MockAction(); + PackedUserOperation[] memory ops = new PackedUserOperation[](1); + ops[0] = _prepareUserOp( + VALIDATION_TYPE_ROOT, + false, + false, + abi.encodeWithSelector( + kernel.installModule.selector, + 3, + address(mockAction), + abi.encodePacked( + MockAction.doSomething.selector, + withHook ? address(mockHook) : address(0), + withHook + ? abi.encode(hex"ff", abi.encodePacked(bytes1(0xff), "hookData")) + : abi.encode(hex"ff", hex"") + ) + ), + true, + true + ); + entrypoint.handleOps(ops, payable(address(0xdeadbeef))); + } + + function testActionInstall(bool withHook) external whenInitialized { + _installAction(withHook); + SelectorManager.SelectorConfig memory config = kernel.selectorConfig(MockAction.doSomething.selector); + assertEq(address(config.hook), withHook ? address(mockHook) : address(1)); + vm.expectEmit(address(kernel)); + emit MockAction.MockActionEvent(address(kernel)); + MockAction(address(kernel)).doSomething(); + if (withHook) { + assertEq(mockHook.data(address(kernel)), abi.encodePacked("hookData")); + assertEq( + mockHook.preHookData(address(kernel)), abi.encodePacked(address(this), MockAction.doSomething.selector) + ); + assertEq(mockHook.postHookData(address(kernel)), abi.encodePacked("hookData")); + } + } + + function testActionUninstall(bool withHook) external whenInitialized { + _installAction(withHook); + PackedUserOperation[] memory ops = new PackedUserOperation[](1); + ops[0] = _prepareUserOp( + VALIDATION_TYPE_ROOT, + false, + false, + abi.encodeWithSelector( + kernel.uninstallModule.selector, + 3, + address(mockFallback), + abi.encodePacked(MockAction.doSomething.selector) + ), + true, + true + ); + entrypoint.handleOps(ops, payable(address(0xdeadbeef))); + + SelectorManager.SelectorConfig memory config = kernel.selectorConfig(MockAction.doSomething.selector); + assertEq(address(config.hook), address(0)); + assertEq(address(config.target), address(0)); + } + + function _installFallback(bool withHook) internal { + vm.deal(address(kernel), 1e18); + PackedUserOperation[] memory ops = new PackedUserOperation[](1); + ops[0] = _prepareUserOp( + VALIDATION_TYPE_ROOT, + false, + false, + abi.encodeWithSelector( + kernel.installModule.selector, + 3, + address(mockFallback), + abi.encodePacked( + MockFallback.fallbackFunction.selector, + withHook ? address(mockHook) : address(0), + withHook + ? abi.encode(abi.encodePacked(hex"00", "fallbackData"), abi.encodePacked(bytes1(0xff), "hookData")) + : abi.encode(abi.encodePacked(hex"00", "fallbackData"), abi.encodePacked("")) + ) + ), + true, + true + ); + entrypoint.handleOps(ops, payable(address(0xdeadbeef))); + } + + function testFallbackInstall(bool withHook) external whenInitialized { + _installFallback(withHook); + assertEq(mockFallback.data(address(kernel)), abi.encodePacked("fallbackData")); + + SelectorManager.SelectorConfig memory config = kernel.selectorConfig(MockFallback.fallbackFunction.selector); + assertEq(address(config.hook), withHook ? address(mockHook) : address(1)); + assertEq(address(config.target), address(mockFallback)); + + (bool success, bytes memory result) = + address(kernel).call(abi.encodeWithSelector(MockFallback.fallbackFunction.selector, uint256(10))); + assertTrue(success); + (uint256 res) = abi.decode(result, (uint256)); + assertEq(res, 100); + if (withHook) { + assertEq(mockHook.data(address(kernel)), abi.encodePacked("hookData")); + assertEq( + mockHook.preHookData(address(kernel)), + abi.encodePacked(address(this), MockFallback.fallbackFunction.selector, uint256(10)) + ); + assertEq(mockHook.postHookData(address(kernel)), abi.encodePacked("hookData")); + } + } + + function testFallbackUninstall(bool withHook) external whenInitialized { + _installFallback(withHook); + PackedUserOperation[] memory ops = new PackedUserOperation[](1); + ops[0] = _prepareUserOp( + VALIDATION_TYPE_ROOT, + false, + false, + abi.encodeWithSelector( + kernel.uninstallModule.selector, + 3, + address(mockFallback), + abi.encodePacked(MockFallback.fallbackFunction.selector) + ), + true, + true + ); + entrypoint.handleOps(ops, payable(address(0xdeadbeef))); + SelectorManager.SelectorConfig memory config = kernel.selectorConfig(MockFallback.fallbackFunction.selector); + assertEq(address(config.hook), address(0)); + assertEq(address(config.target), address(0)); + } + + function _installExecutor(bool withHook) internal { + vm.deal(address(kernel), 1e18); + PackedUserOperation[] memory ops = new PackedUserOperation[](1); + ops[0] = _prepareUserOp( + VALIDATION_TYPE_ROOT, + false, + false, + abi.encodeWithSelector( + kernel.installModule.selector, + 2, + address(mockExecutor), + abi.encodePacked( + withHook ? address(mockHook) : address(0), + withHook + ? abi.encode(abi.encodePacked("executorData"), abi.encodePacked(bytes1(0xff), "hookData")) + : abi.encode(abi.encodePacked("executorData"), abi.encodePacked("")) + ) + ), + true, + true + ); + entrypoint.handleOps(ops, payable(address(0xdeadbeef))); + } + + function testExecutorInstall(bool withHook) external whenInitialized { + _installExecutor(withHook); + assertEq(mockExecutor.data(address(kernel)), abi.encodePacked("executorData")); + ExecutorManager.ExecutorConfig memory config = kernel.executorConfig(mockExecutor); + assertEq(address(config.hook), withHook ? address(mockHook) : address(1)); + + ExecMode mode = ExecLib.encodeSimpleSingle(); + bytes memory data = + ExecLib.encodeSingle(address(callee), 0, abi.encodeWithSelector(MockCallee.setValue.selector, 123)); + mockExecutor.sudoDoExec(IERC7579Account(kernel), mode, data); + assertEq(callee.value(), 123); + if (withHook) { + assertEq(mockHook.data(address(kernel)), abi.encodePacked("hookData")); + assertEq(mockHook.data(address(kernel)), abi.encodePacked("hookData")); + } + } + + function testExecutorUninstall(bool withHook) external whenInitialized { + _installExecutor(withHook); + PackedUserOperation[] memory ops = new PackedUserOperation[](1); + ops[0] = _prepareUserOp( + VALIDATION_TYPE_ROOT, + false, + false, + abi.encodeWithSelector(kernel.uninstallModule.selector, 2, address(mockExecutor), hex""), + true, + true + ); + entrypoint.handleOps(ops, payable(address(0xdeadbeef))); + ExecutorManager.ExecutorConfig memory config = kernel.executorConfig(mockExecutor); + assertEq(address(config.hook), address(0)); + vm.expectRevert(abi.encodeWithSelector(Kernel.InvalidExecutor.selector)); + vm.startPrank(address(mockExecutor)); + kernel.executeFromExecutor( + ExecLib.encodeSimpleSingle(), + ExecLib.encodeSingle(address(callee), 0, abi.encodeWithSelector(MockCallee.setValue.selector, 123)) + ); + vm.stopPrank(); + } + + function testSignatureRoot(bytes32 hash) external whenInitialized { + bytes32 wrappedHash = keccak256(abi.encode(keccak256("Kernel(bytes32 hash)"), hash)); + bytes32 digest = keccak256( + abi.encodePacked("\x19\x01", _buildDomainSeparator("Kernel", "0.3.0-beta", address(kernel)), wrappedHash) + ); + bytes memory sig = _rootSignDigest(digest, true); + sig = abi.encodePacked(hex"00", sig); + bytes4 res = kernel.isValidSignature(hash, sig); + assertEq(res, bytes4(0x1626ba7e)); + } + + function testSignatureValidator(bytes32 hash) external whenInitialized { + vm.deal(address(kernel), 1e18); + PackedUserOperation[] memory ops = new PackedUserOperation[](1); + ops[0] = _prepareUserOp( + VALIDATION_TYPE_VALIDATOR, + false, + false, + encodeExecute(address(callee), 0, abi.encodeWithSelector(callee.setValue.selector, 123)), + true, + true + ); + entrypoint.handleOps(ops, payable(address(0xdeadbeef))); + ValidationManager.ValidationConfig memory config = + kernel.validationConfig(ValidatorLib.validatorToIdentifier(enabledValidator)); + assertEq(config.nonce, 1); + assertEq(address(config.hook), address(1)); + assertEq(kernel.currentNonce(), 1); + + bytes32 wrappedHash = keccak256(abi.encode(keccak256("Kernel(bytes32 hash)"), hash)); + bytes32 digest = keccak256( + abi.encodePacked("\x19\x01", _buildDomainSeparator("Kernel", "0.3.0-beta", address(kernel)), wrappedHash) + ); + bytes memory sig = _validatorSignDigest(digest, true); + sig = abi.encodePacked(hex"01", address(enabledValidator), sig); + bytes4 res = kernel.isValidSignature(hash, sig); + assertEq(res, bytes4(0x1626ba7e)); + } + + function testSignaturePermission(bytes32 hash) external whenInitialized { + vm.deal(address(kernel), 1e18); + PackedUserOperation[] memory ops = new PackedUserOperation[](1); + ops[0] = _prepareUserOp( + VALIDATION_TYPE_PERMISSION, + false, + false, + encodeExecute(address(callee), 0, abi.encodeWithSelector(callee.setValue.selector, 123)), + true, + true + ); + entrypoint.handleOps(ops, payable(address(0xdeadbeef))); + assertEq(kernel.currentNonce(), 1); + assertEq( + MockSigner(address(permissionConfig.signer)).data(address(kernel)), + abi.encodePacked(bytes32(bytes4(0xdeadbeef)), "signer") + ); + bytes32 wrappedHash = keccak256(abi.encode(keccak256("Kernel(bytes32 hash)"), hash)); + bytes32 digest = keccak256( + abi.encodePacked("\x19\x01", _buildDomainSeparator("Kernel", "0.3.0-beta", address(kernel)), wrappedHash) + ); + bytes memory sig = _permissionSignDigest(digest, true); + sig = abi.encodePacked(hex"02", PermissionId.unwrap(enabledPermission), hex"ff", sig); + bytes4 res = kernel.isValidSignature(hash, sig); + assertEq(res, bytes4(0x1626ba7e)); + } +} diff --git a/src/sdk/TestBase/PolicyTestBase.sol b/src/sdk/TestBase/PolicyTestBase.sol new file mode 100644 index 00000000..15a8c0d1 --- /dev/null +++ b/src/sdk/TestBase/PolicyTestBase.sol @@ -0,0 +1,2 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; diff --git a/src/sdk/TestBase/SignerTestBase.sol b/src/sdk/TestBase/SignerTestBase.sol new file mode 100644 index 00000000..15a8c0d1 --- /dev/null +++ b/src/sdk/TestBase/SignerTestBase.sol @@ -0,0 +1,2 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; diff --git a/src/sdk/TestBase/ValidatorTestBase.sol b/src/sdk/TestBase/ValidatorTestBase.sol new file mode 100644 index 00000000..15a8c0d1 --- /dev/null +++ b/src/sdk/TestBase/ValidatorTestBase.sol @@ -0,0 +1,2 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; diff --git a/src/sdk/TestBase/erc4337Util.sol b/src/sdk/TestBase/erc4337Util.sol new file mode 100644 index 00000000..cb829f07 --- /dev/null +++ b/src/sdk/TestBase/erc4337Util.sol @@ -0,0 +1,16 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +library EntryPointLib { + function deploy() internal returns (address) { + (bool success,) = DEPLOY_PROXY.call(ENTRYPOINT_0_7_BYTECODE); + require(success || ENTRYPOINT_0_7_ADDR.code.length > 0, "entrypoint not deployed"); + return ENTRYPOINT_0_7_ADDR; + } +} + +address constant ENTRYPOINT_0_7_ADDR = 0x0000000071727De22E5E9d8BAf0edAc6f37da032; +address constant DEPLOY_PROXY = 0x4e59b44847b379578588920cA78FbF26c0B4956C; +bytes constant ENTRYPOINT_0_7_BYTECODE = + hex"90d8084deab30c2a37c45e8d47f49f2f7965183cb6990a98943ef94940681de360a08060405234620000825760016002556101df8181016001600160401b038111838210176200006c57829162003f2b833903906000f080156200006057608052604051613ea39081620000888239608051818181610d22015261324b0152f35b6040513d6000823e3d90fd5b634e487b7160e01b600052604160045260246000fd5b600080fdfe60806040526004361015610024575b361561001957600080fd5b61002233612748565b005b60003560e01c806242dc5314611b0057806301ffc9a7146119ae5780630396cb60146116765780630bd28e3b146115fa5780631b2e01b814611566578063205c2878146113d157806322cdde4c1461136b57806335567e1a146112b35780635287ce12146111a557806370a0823114611140578063765e827f14610e82578063850aaf6214610dc35780639b249f6914610c74578063b760faf914610c3a578063bb9fe6bf14610a68578063c23a5cea146107c4578063dbed18e0146101a15763fc7e286d0361000e573461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61013a61229f565b16600052600060205260a0604060002065ffffffffffff6001825492015460405192835260ff8116151560208401526dffffffffffffffffffffffffffff8160081c16604084015263ffffffff8160781c16606084015260981c166080820152f35b600080fd5b3461019c576101af36612317565b906101b86129bd565b60009160005b82811061056f57506101d08493612588565b6000805b8481106102fc5750507fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000809360005b81811061024757610240868660007f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d8180a2613ba7565b6001600255005b6102a261025582848a612796565b73ffffffffffffffffffffffffffffffffffffffff6102766020830161282a565b167f575ff3acadd5ab348fe1855e217e0f3678f8d767d7494c9f9fefbee2e17cca4d600080a2806127d6565b906000915b8083106102b957505050600101610209565b909194976102f36102ed6001926102e78c8b6102e0826102da8e8b8d61269d565b9261265a565b5191613597565b90612409565b99612416565b950191906102a7565b6020610309828789612796565b61031f61031682806127d6565b9390920161282a565b9160009273ffffffffffffffffffffffffffffffffffffffff8091165b8285106103505750505050506001016101d4565b909192939561037f83610378610366848c61265a565b516103728b898b61269d565b856129f6565b9290613dd7565b9116840361050a576104a5576103958491613dd7565b9116610440576103b5576103aa600191612416565b96019392919061033c565b60a487604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608488604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608489604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b61057a818487612796565b9361058585806127d6565b919095602073ffffffffffffffffffffffffffffffffffffffff6105aa82840161282a565b1697600192838a1461076657896105da575b5050505060019293949550906105d191612409565b939291016101be565b8060406105e892019061284b565b918a3b1561019c57929391906040519485937f2dd8113300000000000000000000000000000000000000000000000000000000855288604486016040600488015252606490818601918a60051b8701019680936000915b8c83106106e657505050505050838392610684927ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8560009803016024860152612709565b03818a5afa90816106d7575b506106c657602486604051907f86a9f7500000000000000000000000000000000000000000000000000000000082526004820152fd5b93945084936105d1600189806105bc565b6106e0906121bd565b88610690565b91939596977fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c908a9294969a0301865288357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18336030181121561019c57836107538793858394016128ec565b9a0196019301909189979695949261063f565b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393620696e76616c69642061676772656761746f720000000000000000006044820152fd5b3461019c576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576107fc61229f565b33600052600082526001604060002001908154916dffffffffffffffffffffffffffff8360081c16928315610a0a5765ffffffffffff8160981c1680156109ac57421061094e5760009373ffffffffffffffffffffffffffffffffffffffff859485947fffffffffffffff000000000000000000000000000000000000000000000000ff86951690556040517fb7c918e0e249f999e965cafeb6c664271b3f4317d296461500e71da39f0cbda33391806108da8786836020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b0390a2165af16108e8612450565b50156108f057005b606490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601860248201527f6661696c656420746f207769746864726177207374616b6500000000000000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601b60248201527f5374616b65207769746864726177616c206973206e6f742064756500000000006044820152fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601d60248201527f6d7573742063616c6c20756e6c6f636b5374616b6528292066697273740000006044820152fd5b606485604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601460248201527f4e6f207374616b6520746f2077697468647261770000000000000000000000006044820152fd5b3461019c5760007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c573360005260006020526001604060002001805463ffffffff8160781c16908115610bdc5760ff1615610b7e5765ffffffffffff908142160191818311610b4f5780547fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffff001678ffffffffffff00000000000000000000000000000000000000609885901b161790556040519116815233907ffa9b3c14cc825c412c9ed81b3ba365a5b459439403f18829e572ed53a4180f0a90602090a2005b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f616c726561647920756e7374616b696e670000000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600a60248201527f6e6f74207374616b6564000000000000000000000000000000000000000000006044820152fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610022610c6f61229f565b612748565b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043567ffffffffffffffff811161019c576020610cc8610d1b9236906004016122c2565b919073ffffffffffffffffffffffffffffffffffffffff9260405194859283927f570e1a360000000000000000000000000000000000000000000000000000000084528560048501526024840191612709565b03816000857f0000000000000000000000000000000000000000000000000000000000000000165af1908115610db757602492600092610d86575b50604051917f6ca7b806000000000000000000000000000000000000000000000000000000008352166004820152fd5b610da991925060203d602011610db0575b610da181836121ed565b8101906126dd565b9083610d56565b503d610d97565b6040513d6000823e3d90fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c57610dfa61229f565b60243567ffffffffffffffff811161019c57600091610e1e839236906004016122c2565b90816040519283928337810184815203915af4610e39612450565b90610e7e6040519283927f99410554000000000000000000000000000000000000000000000000000000008452151560048401526040602484015260448301906123c6565b0390fd5b3461019c57610e9036612317565b610e9b9291926129bd565b610ea483612588565b60005b848110610f1c57506000927fbb47ee3e183a558b1a2ff0874b079f3fc5478b7454eacf2bfc5af2ff5878f972600080a16000915b858310610eec576102408585613ba7565b909193600190610f12610f0087898761269d565b610f0a888661265a565b519088613597565b0194019190610edb565b610f47610f40610f2e8385979561265a565b51610f3a84898761269d565b846129f6565b9190613dd7565b73ffffffffffffffffffffffffffffffffffffffff929183166110db5761107657610f7190613dd7565b911661101157610f8657600101929092610ea7565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602160448201527f41413332207061796d61737465722065787069726564206f72206e6f7420647560648201527f65000000000000000000000000000000000000000000000000000000000000006084820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413334207369676e6174757265206572726f720000000000000000000000006064820152fd5b608483604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f414132322065787069726564206f72206e6f74206475650000000000000000006064820152fd5b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601460448201527f41413234207369676e6174757265206572726f720000000000000000000000006064820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff61118c61229f565b1660005260006020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5773ffffffffffffffffffffffffffffffffffffffff6111f161229f565b6000608060405161120181612155565b828152826020820152826040820152826060820152015216600052600060205260a06040600020608060405161123681612155565b6001835493848352015490602081019060ff8316151582526dffffffffffffffffffffffffffff60408201818560081c16815263ffffffff936060840193858760781c16855265ffffffffffff978891019660981c1686526040519788525115156020880152511660408601525116606084015251166080820152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760206112ec61229f565b73ffffffffffffffffffffffffffffffffffffffff6113096122f0565b911660005260018252604060002077ffffffffffffffffffffffffffffffffffffffffffffffff821660005282526040600020547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000006040519260401b16178152f35b3461019c577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc60208136011261019c576004359067ffffffffffffffff821161019c5761012090823603011261019c576113c9602091600401612480565b604051908152f35b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761140861229f565b60243590336000526000602052604060002090815491828411611508576000808573ffffffffffffffffffffffffffffffffffffffff8295839561144c848a612443565b90556040805173ffffffffffffffffffffffffffffffffffffffff831681526020810185905233917fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb91a2165af16114a2612450565b50156114aa57005b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601260248201527f6661696c656420746f20776974686472617700000000000000000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f576974686472617720616d6f756e7420746f6f206c61726765000000000000006044820152fd5b3461019c5760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5761159d61229f565b73ffffffffffffffffffffffffffffffffffffffff6115ba6122f0565b9116600052600160205277ffffffffffffffffffffffffffffffffffffffffffffffff604060002091166000526020526020604060002054604051908152f35b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043577ffffffffffffffffffffffffffffffffffffffffffffffff811680910361019c5733600052600160205260406000209060005260205260406000206116728154612416565b9055005b6020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5760043563ffffffff9182821680920361019c5733600052600081526040600020928215611950576001840154908160781c1683106118f2576116f86dffffffffffffffffffffffffffff9182349160081c16612409565b93841561189457818511611836579065ffffffffffff61180592546040519061172082612155565b8152848101926001845260408201908816815260608201878152600160808401936000855233600052600089526040600020905181550194511515917fffffffffffffffffffffffffff0000000000000000000000000000000000000060ff72ffffffff0000000000000000000000000000006effffffffffffffffffffffffffff008954945160081b16945160781b1694169116171717835551167fffffffffffffff000000000000ffffffffffffffffffffffffffffffffffffff78ffffffffffff0000000000000000000000000000000000000083549260981b169116179055565b6040519283528201527fa5ae833d0bb1dcd632d98a8b70973e8516812898e19bf27b70071ebc8dc52c0160403392a2005b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600e60248201527f7374616b65206f766572666c6f770000000000000000000000000000000000006044820152fd5b606483604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601260248201527f6e6f207374616b652073706563696669656400000000000000000000000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601c60248201527f63616e6e6f7420646563726561736520756e7374616b652074696d65000000006044820152fd5b606482604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601a60248201527f6d757374207370656369667920756e7374616b652064656c61790000000000006044820152fd5b3461019c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c576004357fffffffff00000000000000000000000000000000000000000000000000000000811680910361019c57807f60fc6b6e0000000000000000000000000000000000000000000000000000000060209214908115611ad6575b8115611aac575b8115611a82575b8115611a58575b506040519015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501482611a4d565b7f3e84f0210000000000000000000000000000000000000000000000000000000081149150611a46565b7fcf28ef970000000000000000000000000000000000000000000000000000000081149150611a3f565b7f915074d80000000000000000000000000000000000000000000000000000000081149150611a38565b3461019c576102007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261019c5767ffffffffffffffff60043581811161019c573660238201121561019c57611b62903690602481600401359101612268565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc36016101c0811261019c5761014060405191611b9e83612155565b1261019c5760405192611bb0846121a0565b60243573ffffffffffffffffffffffffffffffffffffffff8116810361019c578452602093604435858201526064356040820152608435606082015260a435608082015260c43560a082015260e43560c08201526101043573ffffffffffffffffffffffffffffffffffffffff8116810361019c5760e08201526101243561010082015261014435610120820152825261016435848301526101843560408301526101a43560608301526101c43560808301526101e43590811161019c57611c7c9036906004016122c2565b905a3033036120f7578351606081015195603f5a0260061c61271060a0840151890101116120ce5760009681519182611ff0575b5050505090611cca915a9003608085015101923691612268565b925a90600094845193611cdc85613ccc565b9173ffffffffffffffffffffffffffffffffffffffff60e0870151168015600014611ea957505073ffffffffffffffffffffffffffffffffffffffff855116935b5a9003019360a06060820151910151016080860151850390818111611e95575b50508302604085015192818410600014611dce5750506003811015611da157600203611d79576113c99293508093611d7481613d65565b613cf6565b5050507fdeadaa51000000000000000000000000000000000000000000000000000000008152fd5b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526021600452fd5b81611dde92979396940390613c98565b506003841015611e6857507f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f60808683015192519473ffffffffffffffffffffffffffffffffffffffff865116948873ffffffffffffffffffffffffffffffffffffffff60e0890151169701519160405192835215898301528760408301526060820152a46113c9565b807f4e487b7100000000000000000000000000000000000000000000000000000000602492526021600452fd5b6064919003600a0204909301928780611d3d565b8095918051611eba575b5050611d1d565b6003861015611fc1576002860315611eb35760a088015190823b1561019c57600091611f2491836040519586809581947f7c627b210000000000000000000000000000000000000000000000000000000083528d60048401526080602484015260848301906123c6565b8b8b0260448301528b60648301520393f19081611fad575b50611fa65787893d610800808211611f9e575b506040519282828501016040528184528284013e610e7e6040519283927fad7954bc000000000000000000000000000000000000000000000000000000008452600484015260248301906123c6565b905083611f4f565b8980611eb3565b611fb89199506121bd565b6000978a611f3c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b91600092918380938c73ffffffffffffffffffffffffffffffffffffffff885116910192f115612023575b808080611cb0565b611cca929195503d6108008082116120c6575b5060405190888183010160405280825260008983013e805161205f575b5050600194909161201b565b7f1c4fada7374c0a9ee8841fc38afe82932dc0f8e69012e927f061a8bae611a20188870151918973ffffffffffffffffffffffffffffffffffffffff8551169401516120bc604051928392835260408d84015260408301906123c6565b0390a38680612053565b905088612036565b877fdeaddead000000000000000000000000000000000000000000000000000000006000526000fd5b606486604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152601760248201527f4141393220696e7465726e616c2063616c6c206f6e6c790000000000000000006044820152fd5b60a0810190811067ffffffffffffffff82111761217157604052565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b610140810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157604052565b6060810190811067ffffffffffffffff82111761217157604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761217157604052565b67ffffffffffffffff811161217157601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926122748261222e565b9161228260405193846121ed565b82948184528183011161019c578281602093846000960137010152565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9181601f8401121561019c5782359167ffffffffffffffff831161019c576020838186019501011161019c57565b6024359077ffffffffffffffffffffffffffffffffffffffffffffffff8216820361019c57565b9060407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83011261019c5760043567ffffffffffffffff9283821161019c578060238301121561019c57816004013593841161019c5760248460051b8301011161019c57602401919060243573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b60005b8381106123b65750506000910152565b81810151838201526020016123a6565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602093612402815180928187528780880191016123a3565b0116010190565b91908201809211610b4f57565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8114610b4f5760010190565b91908203918211610b4f57565b3d1561247b573d906124618261222e565b9161246f60405193846121ed565b82523d6000602084013e565b606090565b604061248e8183018361284b565b90818351918237206124a3606084018461284b565b90818451918237209260c06124bb60e083018361284b565b908186519182372091845195602087019473ffffffffffffffffffffffffffffffffffffffff833516865260208301358789015260608801526080870152608081013560a087015260a081013582870152013560e08501526101009081850152835261012083019167ffffffffffffffff918484108385111761217157838252845190206101408501908152306101608601524661018086015260608452936101a00191821183831017612171575251902090565b67ffffffffffffffff81116121715760051b60200190565b9061259282612570565b6040906125a260405191826121ed565b8381527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06125d08295612570565b019160005b8381106125e25750505050565b60209082516125f081612155565b83516125fb816121a0565b600081526000849181838201528187820152816060818184015260809282848201528260a08201528260c08201528260e082015282610100820152826101208201528652818587015281898701528501528301528286010152016125d5565b805182101561266e5760209160051b010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b919081101561266e5760051b810135907ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee18136030182121561019c570190565b9081602091031261019c575173ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0938186528686013760008582860101520116010190565b7f2da466a7b24304f47e87fa2e1e5a81b9831ce54fec19055ce277ca2f39ba42c4602073ffffffffffffffffffffffffffffffffffffffff61278a3485613c98565b936040519485521692a2565b919081101561266e5760051b810135907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa18136030182121561019c570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c57602001918160051b3603831361019c57565b3573ffffffffffffffffffffffffffffffffffffffff8116810361019c5790565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18136030182121561019c570180359067ffffffffffffffff821161019c5760200191813603831361019c57565b90357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18236030181121561019c57016020813591019167ffffffffffffffff821161019c57813603831361019c57565b61012091813573ffffffffffffffffffffffffffffffffffffffff811680910361019c576129626129476129ba9561299b93855260208601356020860152612937604087018761289c565b9091806040880152860191612709565b612954606086018661289c565b908583036060870152612709565b6080840135608084015260a084013560a084015260c084013560c084015261298d60e085018561289c565b9084830360e0860152612709565b916129ac610100918281019061289c565b929091818503910152612709565b90565b60028054146129cc5760028055565b60046040517f3ee5aeb5000000000000000000000000000000000000000000000000000000008152fd5b926000905a93805194843573ffffffffffffffffffffffffffffffffffffffff811680910361019c5786526020850135602087015260808501356fffffffffffffffffffffffffffffffff90818116606089015260801c604088015260a086013560c088015260c086013590811661010088015260801c610120870152612a8060e086018661284b565b801561357b576034811061351d578060141161019c578060241161019c5760341161019c57602481013560801c60a0880152601481013560801c60808801523560601c60e08701525b612ad285612480565b60208301526040860151946effffffffffffffffffffffffffffff8660c08901511760608901511760808901511760a0890151176101008901511761012089015117116134bf57604087015160608801510160808801510160a08801510160c0880151016101008801510296835173ffffffffffffffffffffffffffffffffffffffff81511690612b66604085018561284b565b806131e4575b505060e0015173ffffffffffffffffffffffffffffffffffffffff1690600082156131ac575b6020612bd7918b828a01516000868a604051978896879586937f19822f7c00000000000000000000000000000000000000000000000000000000855260048501613db5565b0393f160009181613178575b50612c8b573d8c610800808311612c83575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141323320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612bf5565b9a92939495969798999a91156130f2575b509773ffffffffffffffffffffffffffffffffffffffff835116602084015190600052600160205260406000208160401c60005260205267ffffffffffffffff604060002091825492612cee84612416565b9055160361308d575a8503116130285773ffffffffffffffffffffffffffffffffffffffff60e0606093015116612d42575b509060a09184959697986040608096015260608601520135905a900301910152565b969550505a9683519773ffffffffffffffffffffffffffffffffffffffff60e08a01511680600052600060205260406000208054848110612fc3576080612dcd9a9b9c600093878094039055015192602089015183604051809d819582947f52b7512c0000000000000000000000000000000000000000000000000000000084528c60048501613db5565b039286f1978860009160009a612f36575b50612e86573d8b610800808311612e7e575b50604051916020818401016040528083526000602084013e610e7e6040519283927f65c8fd4d000000000000000000000000000000000000000000000000000000008452600484015260606024840152600d60648401527f4141333320726576657274656400000000000000000000000000000000000000608484015260a0604484015260a48301906123c6565b915082612df0565b9991929394959697989998925a900311612eab57509096959094939291906080612d20565b60a490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602760448201527f41413336206f766572207061796d6173746572566572696669636174696f6e4760648201527f61734c696d6974000000000000000000000000000000000000000000000000006084820152fd5b915098503d90816000823e612f4b82826121ed565b604081838101031261019c5780519067ffffffffffffffff821161019c57828101601f83830101121561019c578181015191612f868361222e565b93612f9460405195866121ed565b838552820160208483850101011161019c57602092612fba9184808701918501016123a3565b01519838612dde565b60848b604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413331207061796d6173746572206465706f73697420746f6f206c6f7700006064820152fd5b608490604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601e60448201527f41413236206f76657220766572696669636174696f6e4761734c696d697400006064820152fd5b608482604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601a60448201527f4141323520696e76616c6964206163636f756e74206e6f6e63650000000000006064820152fd5b600052600060205260406000208054808c11613113578b9003905538612c9c565b608484604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601760448201527f41413231206469646e2774207061792070726566756e640000000000000000006064820152fd5b9091506020813d6020116131a4575b81613194602093836121ed565b8101031261019c57519038612be3565b3d9150613187565b508060005260006020526040600020548a81116000146131d75750612bd7602060005b915050612b92565b6020612bd7918c036131cf565b833b61345a57604088510151602060405180927f570e1a360000000000000000000000000000000000000000000000000000000082528260048301528160008161323260248201898b612709565b039273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690f1908115610db75760009161343b575b5073ffffffffffffffffffffffffffffffffffffffff811680156133d6578503613371573b1561330c5760141161019c5773ffffffffffffffffffffffffffffffffffffffff9183887fd51a9c61267aa6196961883ecf5ff2da6619c37dac0fa92122513fb32c032d2d604060e0958787602086015195510151168251913560601c82526020820152a391612b6c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313520696e6974436f6465206d757374206372656174652073656e6465726064820152fd5b60848e604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152602060448201527f4141313420696e6974436f6465206d7573742072657475726e2073656e6465726064820152fd5b60848f604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601b60448201527f4141313320696e6974436f6465206661696c6564206f72204f4f4700000000006064820152fd5b613454915060203d602011610db057610da181836121ed565b3861327c565b60848d604051907f220266b6000000000000000000000000000000000000000000000000000000008252600482015260406024820152601f60448201527f414131302073656e64657220616c726561647920636f6e7374727563746564006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f41413934206761732076616c756573206f766572666c6f7700000000000000006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f4141393320696e76616c6964207061796d6173746572416e64446174610000006044820152fd5b5050600060e087015260006080870152600060a0870152612ac9565b9092915a906060810151916040928351967fffffffff00000000000000000000000000000000000000000000000000000000886135d7606084018461284b565b600060038211613b9f575b7f8dd7712f0000000000000000000000000000000000000000000000000000000094168403613a445750505061379d6000926136b292602088015161363a8a5193849360208501528b602485015260648401906128ec565b90604483015203906136727fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0928381018352826121ed565b61379189519485927e42dc5300000000000000000000000000000000000000000000000000000000602085015261020060248501526102248401906123c6565b613760604484018b60806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152876123c6565b039081018352826121ed565b6020918183809351910182305af1600051988652156137bf575b505050505050565b909192939495965060003d8214613a3a575b7fdeaddead00000000000000000000000000000000000000000000000000000000810361385b57608487878051917f220266b600000000000000000000000000000000000000000000000000000000835260048301526024820152600f60448201527f41413935206f7574206f662067617300000000000000000000000000000000006064820152fd5b7fdeadaa510000000000000000000000000000000000000000000000000000000091929395949650146000146138c55750506138a961389e6138b8935a90612443565b608085015190612409565b9083015183611d748295613d65565b905b3880808080806137b7565b909261395290828601518651907ff62676f440ff169a3a9afdbf812e89e7f95975ee8e5c31214ffdef631c5f479273ffffffffffffffffffffffffffffffffffffffff9580878551169401516139483d610800808211613a32575b508a519084818301018c5280825260008583013e8a805194859485528401528a8301906123c6565b0390a35a90612443565b916139636080860193845190612409565b926000905a94829488519761397789613ccc565b948260e08b0151168015600014613a1857505050875116955b5a9003019560a06060820151910151019051860390818111613a04575b5050840290850151928184106000146139de57505080611e68575090816139d89293611d7481613d65565b906138ba565b6139ee9082849397950390613c98565b50611e68575090826139ff92613cf6565b6139d8565b6064919003600a02049094019338806139ad565b90919892509751613a2a575b50613990565b955038613a24565b905038613920565b8181803e516137d1565b613b97945082935090613a8c917e42dc53000000000000000000000000000000000000000000000000000000006020613b6b9501526102006024860152610224850191612709565b613b3a604484018860806101a091805173ffffffffffffffffffffffffffffffffffffffff808251168652602082015160208701526040820151604087015260608201516060870152838201518487015260a082015160a087015260c082015160c087015260e08201511660e0860152610100808201519086015261012080910151908501526020810151610140850152604081015161016085015260608101516101808501520151910152565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdc83820301610204840152846123c6565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081018952886121ed565b60008761379d565b5081356135e2565b73ffffffffffffffffffffffffffffffffffffffff168015613c3a57600080809381935af1613bd4612450565b5015613bdc57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f41413931206661696c65642073656e6420746f2062656e6566696369617279006044820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4141393020696e76616c69642062656e656669636961727900000000000000006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff166000526000602052613cc66040600020918254612409565b80915590565b610120610100820151910151808214613cf257480180821015613ced575090565b905090565b5090565b9190917f49628fd1471006c1482da88028e9ce4dbb080b815c9b0344d39e5a8e6ec1419f6080602083015192519473ffffffffffffffffffffffffffffffffffffffff946020868851169660e089015116970151916040519283526000602084015260408301526060820152a4565b60208101519051907f67b4fa9642f42120bf031f3051d1824b0fe25627945b27b8a6a65d5761d5482e60208073ffffffffffffffffffffffffffffffffffffffff855116940151604051908152a3565b613dcd604092959493956060835260608301906128ec565b9460208201520152565b8015613e6457600060408051613dec816121d1565b828152826020820152015273ffffffffffffffffffffffffffffffffffffffff811690604065ffffffffffff91828160a01c16908115613e5c575b60d01c92825191613e37836121d1565b8583528460208401521691829101524211908115613e5457509091565b905042109091565b839150613e27565b5060009060009056fea2646970667358221220b094fd69f04977ae9458e5ba422d01cd2d20dbcfca0992ff37f19aa07deec25464736f6c6343000817003360808060405234610016576101c3908161001c8239f35b600080fdfe6080600436101561000f57600080fd5b6000803560e01c63570e1a361461002557600080fd5b3461018a5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261018a576004359167ffffffffffffffff9081841161018657366023850112156101865783600401358281116101825736602482870101116101825780601411610182577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec810192808411610155577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f81600b8501160116830190838210908211176101555792846024819482600c60209a968b9960405286845289840196603889018837830101525193013560601c5af1908051911561014d575b5073ffffffffffffffffffffffffffffffffffffffff60405191168152f35b90503861012e565b6024857f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b8380fd5b8280fd5b80fdfea26469706673582212207adef8895ad3393b02fab10a111d85ea80ff35366aa43995f4ea20e67f29200664736f6c63430008170033"; diff --git a/src/sdk/moduleBase/PolicyBase.sol b/src/sdk/moduleBase/PolicyBase.sol new file mode 100644 index 00000000..d57e034f --- /dev/null +++ b/src/sdk/moduleBase/PolicyBase.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {IPolicy} from "../../interfaces/IERC7579Modules.sol"; +import {PackedUserOperation} from "../../interfaces/PackedUserOperation.sol"; + +abstract contract PolicyBase is IPolicy { + function onInstall(bytes calldata data) external payable { + bytes32 id = bytes32(data[0:32]); + bytes calldata _data = data[32:]; + _policyOninstall(id, _data); + } + + function onUninstall(bytes calldata data) external payable { + bytes32 id = bytes32(data[0:32]); + bytes calldata _data = data[32:]; + _policyOnUninstall(id, _data); + } + + function isModuleType(uint256 id) external pure returns (bool) { + return id == 5; + } + + function isInitialized(address) external view virtual returns (bool); // TODO : not sure if this is the right way to do it + function checkUserOpPolicy(bytes32 id, PackedUserOperation calldata userOp) + external + payable + virtual + returns (uint256); + function checkSignaturePolicy(bytes32 id, address sender, bytes32 hash, bytes calldata sig) + external + view + virtual + returns (uint256); + + function _policyOninstall(bytes32 id, bytes calldata _data) internal virtual; + function _policyOnUninstall(bytes32 id, bytes calldata _data) internal virtual; +} diff --git a/src/sdk/moduleBase/SignerBase.sol b/src/sdk/moduleBase/SignerBase.sol new file mode 100644 index 00000000..026dad3a --- /dev/null +++ b/src/sdk/moduleBase/SignerBase.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import {ISigner} from "../../interfaces/IERC7579Modules.sol"; +import {PackedUserOperation} from "../../interfaces/PackedUserOperation.sol"; + +abstract contract SignerBase is ISigner { + function onInstall(bytes calldata data) external payable { + bytes32 id = bytes32(data[0:32]); + bytes calldata _data = data[32:]; + _signerOninstall(id, _data); + } + + function onUninstall(bytes calldata data) external payable { + bytes32 id = bytes32(data[0:32]); + bytes calldata _data = data[32:]; + _signerOnUninstall(id, _data); + } + + function isModuleType(uint256 id) external pure returns (bool) { + return id == 6; + } + + function isInitialized(address) external view virtual returns (bool); // TODO : not sure if this is the right way to do it + function checkUserOpSignature(bytes32 id, PackedUserOperation calldata userOp, bytes32 userOpHash) + external + payable + virtual + returns (uint256); + function checkSignature(bytes32 id, address sender, bytes32 hash, bytes calldata sig) + external + view + virtual + returns (bytes4); + + function _signerOninstall(bytes32 id, bytes calldata _data) internal virtual; + function _signerOnUninstall(bytes32 id, bytes calldata _data) internal virtual; +} diff --git a/src/types/Constants.sol b/src/types/Constants.sol new file mode 100644 index 00000000..f96080e6 --- /dev/null +++ b/src/types/Constants.sol @@ -0,0 +1,77 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import {CallType, ExecType, ExecModeSelector} from "./Types.sol"; +import {PassFlag, ValidationMode, ValidationType} from "./Types.sol"; +import {ValidationData} from "./Types.sol"; + +// --- ERC7579 calltypes --- +// Default CallType +CallType constant CALLTYPE_SINGLE = CallType.wrap(0x00); +// Batched CallType +CallType constant CALLTYPE_BATCH = CallType.wrap(0x01); +CallType constant CALLTYPE_STATIC = CallType.wrap(0xFE); +// @dev Implementing delegatecall is OPTIONAL! +// implement delegatecall with extreme care. +CallType constant CALLTYPE_DELEGATECALL = CallType.wrap(0xFF); + +// --- ERC7579 exectypes --- +// @dev default behavior is to revert on failure +// To allow very simple accounts to use mode encoding, the default behavior is to revert on failure +// Since this is value 0x00, no additional encoding is required for simple accounts +ExecType constant EXECTYPE_DEFAULT = ExecType.wrap(0x00); +// @dev account may elect to change execution behavior. For example "try exec" / "allow fail" +ExecType constant EXECTYPE_TRY = ExecType.wrap(0x01); + +// --- ERC7579 mode selector --- +ExecModeSelector constant EXEC_MODE_DEFAULT = ExecModeSelector.wrap(bytes4(0x00000000)); + +// --- Kernel permission skip flags --- +PassFlag constant SKIP_USEROP = PassFlag.wrap(0x0001); +PassFlag constant SKIP_SIGNATURE = PassFlag.wrap(0x0002); + +// --- Kernel validation modes --- +ValidationMode constant VALIDATION_MODE_DEFAULT = ValidationMode.wrap(0x00); +ValidationMode constant VALIDATION_MODE_ENABLE = ValidationMode.wrap(0x01); +ValidationMode constant VALIDATION_MODE_INSTALL = ValidationMode.wrap(0x02); + +// --- Kernel validation types --- +ValidationType constant VALIDATION_TYPE_ROOT = ValidationType.wrap(0x00); +ValidationType constant VALIDATION_TYPE_VALIDATOR = ValidationType.wrap(0x01); +ValidationType constant VALIDATION_TYPE_PERMISSION = ValidationType.wrap(0x02); + +// --- storage slots --- +// bytes32(uint256(keccak256('kernel.v3.selector')) - 1) +bytes32 constant SELECTOR_MANAGER_STORAGE_SLOT = 0x7c341349a4360fdd5d5bc07e69f325dc6aaea3eb018b3e0ea7e53cc0bb0d6f3b; +// bytes32(uint256(keccak256('kernel.v3.executor')) - 1) +bytes32 constant EXECUTOR_MANAGER_STORAGE_SLOT = 0x1bbee3173dbdc223633258c9f337a0fff8115f206d302bea0ed3eac003b68b86; +// bytes32(uint256(keccak256('kernel.v3.hook')) - 1) +bytes32 constant HOOK_MANAGER_STORAGE_SLOT = 0x4605d5f70bb605094b2e761eccdc27bed9a362d8612792676bf3fb9b12832ffc; +// bytes32(uint256(keccak256('kernel.v3.validation')) - 1) +bytes32 constant VALIDATION_MANAGER_STORAGE_SLOT = 0x7bcaa2ced2a71450ed5a9a1b4848e8e5206dbc3f06011e595f7f55428cc6f84f; +bytes32 constant ERC1967_IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; + +// --- Kernel validation nonce incremental size limit --- +uint32 constant MAX_NONCE_INCREMENT_SIZE = 10; + +// -- EIP712 type hash --- +bytes32 constant ENABLE_TYPE_HASH = 0xb17ab1224aca0d4255ef8161acaf2ac121b8faa32a4b2258c912cc5f8308c505; +bytes32 constant KERNEL_WRAPPER_TYPE_HASH = 0x1547321c374afde8a591d972a084b071c594c275e36724931ff96c25f2999c83; + +// --- ERC constants --- +// ERC4337 constants +uint256 constant SIG_VALIDATION_FAILED_UINT = 1; +uint256 constant SIG_VALIDATION_SUCCESS_UINT = 0; +ValidationData constant SIG_VALIDATION_FAILED = ValidationData.wrap(SIG_VALIDATION_FAILED_UINT); + +// ERC-1271 constants +bytes4 constant ERC1271_MAGICVALUE = 0x1626ba7e; +bytes4 constant ERC1271_INVALID = 0xffffffff; + +uint256 constant MODULE_TYPE_VALIDATOR = 1; +uint256 constant MODULE_TYPE_EXECUTOR = 2; +uint256 constant MODULE_TYPE_FALLBACK = 3; +uint256 constant MODULE_TYPE_HOOK = 4; +uint256 constant MODULE_TYPE_POLICY = 5; +uint256 constant MODULE_TYPE_SIGNER = 6; diff --git a/src/types/Structs.sol b/src/types/Structs.sol new file mode 100644 index 00000000..263fcbd4 --- /dev/null +++ b/src/types/Structs.sol @@ -0,0 +1,8 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +struct Execution { + address target; + uint256 value; + bytes callData; +} diff --git a/src/types/Types.sol b/src/types/Types.sol new file mode 100644 index 00000000..788faadf --- /dev/null +++ b/src/types/Types.sol @@ -0,0 +1,113 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.23; + +// Custom type for improved developer experience +type ExecMode is bytes32; + +type CallType is bytes1; + +type ExecType is bytes1; + +type ExecModeSelector is bytes4; + +type ExecModePayload is bytes22; + +using {eqModeSelector as ==} for ExecModeSelector global; +using {eqCallType as ==} for CallType global; +using {notEqCallType as !=} for CallType global; +using {eqExecType as ==} for ExecType global; + +function eqCallType(CallType a, CallType b) pure returns (bool) { + return CallType.unwrap(a) == CallType.unwrap(b); +} + +function notEqCallType(CallType a, CallType b) pure returns (bool) { + return CallType.unwrap(a) != CallType.unwrap(b); +} + +function eqExecType(ExecType a, ExecType b) pure returns (bool) { + return ExecType.unwrap(a) == ExecType.unwrap(b); +} + +function eqModeSelector(ExecModeSelector a, ExecModeSelector b) pure returns (bool) { + return ExecModeSelector.unwrap(a) == ExecModeSelector.unwrap(b); +} + +type ValidationMode is bytes1; + +type ValidationId is bytes21; + +type ValidationType is bytes1; + +type PermissionId is bytes4; + +type PolicyData is bytes22; // 2bytes for flag on skip, 20 bytes for validator address + +type PassFlag is bytes2; + +using {vModeEqual as ==} for ValidationMode global; +using {vTypeEqual as ==} for ValidationType global; +using {vIdentifierEqual as ==} for ValidationId global; +using {vModeNotEqual as !=} for ValidationMode global; +using {vTypeNotEqual as !=} for ValidationType global; +using {vIdentifierNotEqual as !=} for ValidationId global; + +// nonce = uint192(key) + nonce +// key = mode + (vtype + validationDataWithoutType) + 2bytes parallelNonceKey +// key = 0x00 + 0x00 + 0x000 .. 00 + 0x0000 +// key = 0x00 + 0x01 + 0x1234...ff + 0x0000 +// key = 0x00 + 0x02 + ( ) + 0x000 + +function vModeEqual(ValidationMode a, ValidationMode b) pure returns (bool) { + return ValidationMode.unwrap(a) == ValidationMode.unwrap(b); +} + +function vModeNotEqual(ValidationMode a, ValidationMode b) pure returns (bool) { + return ValidationMode.unwrap(a) != ValidationMode.unwrap(b); +} + +function vTypeEqual(ValidationType a, ValidationType b) pure returns (bool) { + return ValidationType.unwrap(a) == ValidationType.unwrap(b); +} + +function vTypeNotEqual(ValidationType a, ValidationType b) pure returns (bool) { + return ValidationType.unwrap(a) != ValidationType.unwrap(b); +} + +function vIdentifierEqual(ValidationId a, ValidationId b) pure returns (bool) { + return ValidationId.unwrap(a) == ValidationId.unwrap(b); +} + +function vIdentifierNotEqual(ValidationId a, ValidationId b) pure returns (bool) { + return ValidationId.unwrap(a) != ValidationId.unwrap(b); +} + +type ValidationData is uint256; + +type ValidAfter is uint48; + +type ValidUntil is uint48; + +function getValidationResult(ValidationData validationData) pure returns (address result) { + assembly { + result := validationData + } +} + +function packValidationData(ValidAfter validAfter, ValidUntil validUntil) pure returns (uint256) { + return uint256(ValidAfter.unwrap(validAfter)) << 208 | uint256(ValidUntil.unwrap(validUntil)) << 160; +} + +function parseValidationData(uint256 validationData) + pure + returns (ValidAfter validAfter, ValidUntil validUntil, address result) +{ + assembly { + result := validationData + validUntil := and(shr(160, validationData), 0xffffffffffff) + switch iszero(validUntil) + case 1 { validUntil := 0xffffffffffff } + validAfter := shr(208, validationData) + } +} diff --git a/src/utils/ERC4337Utils.sol b/src/utils/ERC4337Utils.sol deleted file mode 100644 index bd607848..00000000 --- a/src/utils/ERC4337Utils.sol +++ /dev/null @@ -1,71 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol"; -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; -import "solady/utils/ECDSA.sol"; -import {Vm} from "forge-std/Test.sol"; - -library ERC4337Utils { - function test() public {} - - function fillUserOp(IEntryPoint _entryPoint, address _sender, bytes memory _data) - internal - view - returns (UserOperation memory op) - { - op.sender = _sender; - op.nonce = _entryPoint.getNonce(_sender, 0); - op.callData = _data; - op.callGasLimit = 10000000; - op.verificationGasLimit = 10000000; - op.preVerificationGas = 50000; - op.maxFeePerGas = 50000; - op.maxPriorityFeePerGas = 1; - } - - function signUserOpHash(IEntryPoint _entryPoint, Vm _vm, uint256 _key, UserOperation memory _op) - internal - view - returns (bytes memory signature) - { - bytes32 hash = _entryPoint.getUserOpHash(_op); - (uint8 v, bytes32 r, bytes32 s) = _vm.sign(_key, ECDSA.toEthSignedMessageHash(hash)); - signature = abi.encodePacked(r, s, v); - } - - // computes the hash of a permit - function getStructHash( - bytes4 sig, - uint48 validUntil, - uint48 validAfter, - address validator, - address executor, - bytes memory enableData - ) internal pure returns (bytes32) { - return keccak256( - abi.encode( - keccak256("ValidatorApproved(bytes4 sig,uint256 validatorData,address executor,bytes enableData)"), - bytes4(sig), - uint256( - uint256(uint160(validator)) | (uint256(validAfter) << 160) | (uint256(validUntil) << (48 + 160)) - ), - executor, - keccak256(enableData) - ) - ); - } - - function _buildDomainSeparator(string memory name, string memory version, address verifyingContract) - internal - view - returns (bytes32) - { - bytes32 hashedName = keccak256(bytes(name)); - bytes32 hashedVersion = keccak256(bytes(version)); - bytes32 typeHash = - keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"); - - return keccak256(abi.encode(typeHash, hashedName, hashedVersion, block.chainid, address(verifyingContract))); - } -} diff --git a/src/utils/ExecLib.sol b/src/utils/ExecLib.sol new file mode 100644 index 00000000..631ca0b8 --- /dev/null +++ b/src/utils/ExecLib.sol @@ -0,0 +1,261 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.23; + +import {ExecMode, CallType, ExecType, ExecModeSelector, ExecModePayload} from "../types/Types.sol"; +import { + CALLTYPE_SINGLE, + CALLTYPE_BATCH, + EXECTYPE_DEFAULT, + EXEC_MODE_DEFAULT, + EXECTYPE_TRY, + CALLTYPE_DELEGATECALL +} from "../types/Constants.sol"; +import {Execution} from "../types/Structs.sol"; + +/** + * @dev ExecLib is a helper library for execution + */ +library ExecLib { + error ExecutionFailed(); + + event TryExecuteUnsuccessful(uint256 batchExecutionindex, bytes result); + + function execute(ExecMode execMode, bytes calldata executionCalldata) + internal + returns (bytes[] memory returnData) + { + (CallType callType, ExecType execType,,) = decode(execMode); + + // check if calltype is batch or single + if (callType == CALLTYPE_BATCH) { + // destructure executionCallData according to batched exec + Execution[] calldata executions = decodeBatch(executionCalldata); + // check if execType is revert or try + if (execType == EXECTYPE_DEFAULT) returnData = execute(executions); + else if (execType == EXECTYPE_TRY) returnData = tryExecute(executions); + else revert("Unsupported"); + } else if (callType == CALLTYPE_SINGLE) { + // destructure executionCallData according to single exec + (address target, uint256 value, bytes calldata callData) = decodeSingle(executionCalldata); + returnData = new bytes[](1); + bool success; + // check if execType is revert or try + if (execType == EXECTYPE_DEFAULT) { + returnData[0] = execute(target, value, callData); + } else if (execType == EXECTYPE_TRY) { + (success, returnData[0]) = tryExecute(target, value, callData); + if (!success) emit TryExecuteUnsuccessful(0, returnData[0]); + } else { + revert("Unsupported"); + } + } else if (callType == CALLTYPE_DELEGATECALL) { + address delegate = address(bytes20(executionCalldata[0:20])); + bytes calldata callData = executionCalldata[20:]; + executeDelegatecall(delegate, callData); + } else { + revert("Unsupported"); + } + } + + function execute(Execution[] calldata executions) internal returns (bytes[] memory result) { + uint256 length = executions.length; + result = new bytes[](length); + + for (uint256 i; i < length; i++) { + Execution calldata _exec = executions[i]; + result[i] = execute(_exec.target, _exec.value, _exec.callData); + } + } + + function tryExecute(Execution[] calldata executions) internal returns (bytes[] memory result) { + uint256 length = executions.length; + result = new bytes[](length); + + for (uint256 i; i < length; i++) { + Execution calldata _exec = executions[i]; + bool success; + (success, result[i]) = tryExecute(_exec.target, _exec.value, _exec.callData); + if (!success) emit TryExecuteUnsuccessful(i, result[i]); + } + } + + function execute(address target, uint256 value, bytes calldata callData) internal returns (bytes memory result) { + /// @solidity memory-safe-assembly + assembly { + result := mload(0x40) + calldatacopy(result, callData.offset, callData.length) + if iszero(call(gas(), target, value, result, callData.length, codesize(), 0x00)) { + // Bubble up the revert if the call reverts. + returndatacopy(result, 0x00, returndatasize()) + revert(result, returndatasize()) + } + mstore(result, returndatasize()) // Store the length. + let o := add(result, 0x20) + returndatacopy(o, 0x00, returndatasize()) // Copy the returndata. + mstore(0x40, add(o, returndatasize())) // Allocate the memory. + } + } + + function tryExecute(address target, uint256 value, bytes calldata callData) + internal + returns (bool success, bytes memory result) + { + /// @solidity memory-safe-assembly + assembly { + result := mload(0x40) + calldatacopy(result, callData.offset, callData.length) + success := call(gas(), target, value, result, callData.length, codesize(), 0x00) + mstore(result, returndatasize()) // Store the length. + let o := add(result, 0x20) + returndatacopy(o, 0x00, returndatasize()) // Copy the returndata. + mstore(0x40, add(o, returndatasize())) // Allocate the memory. + } + } + + /// @dev Execute a delegatecall with `delegate` on this account. + function executeDelegatecall(address delegate, bytes calldata callData) + internal + returns (bool success, bytes memory result) + { + /// @solidity memory-safe-assembly + assembly { + result := mload(0x40) + calldatacopy(result, callData.offset, callData.length) + // Forwards the `data` to `delegate` via delegatecall. + success := delegatecall(gas(), delegate, result, callData.length, codesize(), 0x00) + mstore(result, returndatasize()) // Store the length. + let o := add(result, 0x20) + returndatacopy(o, 0x00, returndatasize()) // Copy the returndata. + mstore(0x40, add(o, returndatasize())) // Allocate the memory. + } + } + + function decode(ExecMode mode) + internal + pure + returns (CallType _calltype, ExecType _execType, ExecModeSelector _modeSelector, ExecModePayload _modePayload) + { + assembly { + _calltype := mode + _execType := shl(8, mode) + _modeSelector := shl(48, mode) + _modePayload := shl(80, mode) + } + } + + function encode(CallType callType, ExecType execType, ExecModeSelector mode, ExecModePayload payload) + internal + pure + returns (ExecMode) + { + return ExecMode.wrap( + bytes32(abi.encodePacked(callType, execType, bytes4(0), ExecModeSelector.unwrap(mode), payload)) + ); + } + + function encodeSimpleBatch() internal pure returns (ExecMode mode) { + mode = encode(CALLTYPE_BATCH, EXECTYPE_DEFAULT, EXEC_MODE_DEFAULT, ExecModePayload.wrap(0x00)); + } + + function encodeSimpleSingle() internal pure returns (ExecMode mode) { + mode = encode(CALLTYPE_SINGLE, EXECTYPE_DEFAULT, EXEC_MODE_DEFAULT, ExecModePayload.wrap(0x00)); + } + + function getCallType(ExecMode mode) internal pure returns (CallType calltype) { + assembly { + calltype := mode + } + } + + function decodeBatch(bytes calldata callData) internal pure returns (Execution[] calldata executionBatch) { + /* + * Batch Call Calldata Layout + * Offset (in bytes) | Length (in bytes) | Contents + * 0x0 | 0x4 | bytes4 function selector + * 0x4 | - | + abi.encode(IERC7579Execution.Execution[]) + */ + // solhint-disable-next-line no-inline-assembly + assembly ("memory-safe") { + let dataPointer := add(callData.offset, calldataload(callData.offset)) + + // Extract the ERC7579 Executions + executionBatch.offset := add(dataPointer, 32) + executionBatch.length := calldataload(dataPointer) + } + } + + function encodeBatch(Execution[] memory executions) internal pure returns (bytes memory callData) { + callData = abi.encode(executions); + } + + function decodeSingle(bytes calldata executionCalldata) + internal + pure + returns (address target, uint256 value, bytes calldata callData) + { + target = address(bytes20(executionCalldata[0:20])); + value = uint256(bytes32(executionCalldata[20:52])); + callData = executionCalldata[52:]; + } + + function encodeSingle(address target, uint256 value, bytes memory callData) + internal + pure + returns (bytes memory userOpCalldata) + { + userOpCalldata = abi.encodePacked(target, value, callData); + } + + function doFallback2771Static(address fallbackHandler) internal view returns (bool success, bytes memory result) { + assembly { + function allocate(length) -> pos { + pos := mload(0x40) + mstore(0x40, add(pos, length)) + } + + let calldataPtr := allocate(calldatasize()) + calldatacopy(calldataPtr, 0, calldatasize()) + + // The msg.sender address is shifted to the left by 12 bytes to remove the padding + // Then the address without padding is stored right after the calldata + let senderPtr := allocate(20) + mstore(senderPtr, shl(96, caller())) + + // Add 20 bytes for the address appended add the end + success := staticcall(gas(), fallbackHandler, calldataPtr, add(calldatasize(), 20), 0, 0) + + result := mload(0x40) + mstore(result, returndatasize()) // Store the length. + let o := add(result, 0x20) + returndatacopy(o, 0x00, returndatasize()) // Copy the returndata. + mstore(0x40, add(o, returndatasize())) // Allocate the memory. + } + } + + function doFallback2771Call(address target) internal returns (bool success, bytes memory result) { + assembly { + function allocate(length) -> pos { + pos := mload(0x40) + mstore(0x40, add(pos, length)) + } + + let calldataPtr := allocate(calldatasize()) + calldatacopy(calldataPtr, 0, calldatasize()) + + // The msg.sender address is shifted to the left by 12 bytes to remove the padding + // Then the address without padding is stored right after the calldata + let senderPtr := allocate(20) + mstore(senderPtr, shl(96, caller())) + + // Add 20 bytes for the address appended add the end + success := call(gas(), target, 0, calldataPtr, add(calldatasize(), 20), 0, 0) + + result := mload(0x40) + mstore(result, returndatasize()) // Store the length. + let o := add(result, 0x20) + returndatacopy(o, 0x00, returndatasize()) // Copy the returndata. + mstore(0x40, add(o, returndatasize())) // Allocate the memory. + } + } +} diff --git a/src/utils/KernelTestBase.sol b/src/utils/KernelTestBase.sol deleted file mode 100644 index 04d62eb2..00000000 --- a/src/utils/KernelTestBase.sol +++ /dev/null @@ -1,503 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol"; -import {ENTRYPOINT_0_6_ADDRESS, ENTRYPOINT_0_6_BYTECODE} from "I4337/artifacts/EntryPoint_0_6.sol"; -import {CREATOR_0_6_BYTECODE, CREATOR_0_6_ADDRESS} from "I4337/artifacts/EntryPoint_0_6.sol"; -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; -import {Kernel} from "../Kernel.sol"; -import {Operation} from "../common/Enums.sol"; -import {Compatibility} from "../abstract/Compatibility.sol"; -import {IKernel} from "../interfaces/IKernel.sol"; -import {KernelFactory} from "../factory/KernelFactory.sol"; -import {IKernelValidator} from "../interfaces/IKernelValidator.sol"; - -import {Call, ExecutionDetail} from "../common/Structs.sol"; -import {ValidationData, ValidUntil, ValidAfter} from "../common/Types.sol"; -import {KERNEL_VERSION, KERNEL_NAME} from "../common/Constants.sol"; -import {ECDSA} from "solady/utils/ECDSA.sol"; - -import {ERC4337Utils} from "./ERC4337Utils.sol"; -import {Test} from "forge-std/Test.sol"; -import {console} from "forge-std/console.sol"; -import {TestValidator} from "../mock/TestValidator.sol"; -import {TestExecutor} from "../mock/TestExecutor.sol"; -import {TestERC721} from "../mock/TestERC721.sol"; -import {TestERC1155} from "../mock/TestERC1155.sol"; -import {TestCallee} from "../mock/TestCallee.sol"; - -using ERC4337Utils for IEntryPoint; - -abstract contract KernelTestBase is Test { - // to support 0.8.19 - // also, weird error came up when i did Compatibility.Received - event Received(address sender, uint256 amount); - event UserOperationEvent( - bytes32 indexed userOpHash, - address indexed sender, - address indexed paymaster, - uint256 nonce, - bool success, - uint256 actualGasCost, - uint256 actualGasUsed - ); - event Upgraded(address indexed newImplementation); - - Kernel kernel; - Kernel kernelImpl; - KernelFactory factory; - IEntryPoint entryPoint; - IKernelValidator defaultValidator; - address owner; - uint256 ownerKey; - address payable beneficiary; - address factoryOwner; - - bytes4 executionSig; - ExecutionDetail executionDetail; - - function _initialize() internal { - (owner, ownerKey) = makeAddrAndKey("owner"); - (factoryOwner,) = makeAddrAndKey("factoryOwner"); - beneficiary = payable(address(makeAddr("beneficiary"))); - vm.etch(ENTRYPOINT_0_6_ADDRESS, ENTRYPOINT_0_6_BYTECODE); - entryPoint = IEntryPoint(payable(ENTRYPOINT_0_6_ADDRESS)); - vm.etch(CREATOR_0_6_ADDRESS, CREATOR_0_6_BYTECODE); - kernelImpl = new Kernel(entryPoint); - factory = new KernelFactory(factoryOwner, entryPoint); - vm.startPrank(factoryOwner); - factory.setImplementation(address(kernelImpl), true); - vm.stopPrank(); - } - - function _setExecutionDetail() internal virtual; - - function getEnableData() internal view virtual returns (bytes memory); - - function getValidatorSignature(UserOperation memory op) internal view virtual returns (bytes memory); - - function getOwners() internal virtual returns (address[] memory _owners); - - function getInitializeData() internal view virtual returns (bytes memory); - - function signUserOp(UserOperation memory op) internal view virtual returns (bytes memory); - - function getWrongSignature(UserOperation memory op) internal view virtual returns (bytes memory); - - function signHash(bytes32 hash) internal view virtual returns (bytes memory); - - function getWrongSignature(bytes32 hash) internal view virtual returns (bytes memory); - - function test_default_validator_enable() external virtual; - - function test_default_validator_disable() external virtual; - - function test_external_call_execute_success() external virtual { - address[] memory validCallers = getOwners(); - for (uint256 i = 0; i < validCallers.length; i++) { - vm.prank(validCallers[i]); - kernel.execute(validCallers[i], 0, "", Operation.Call); - } - } - - function test_external_call_execute_delegatecall_success() external virtual { - address[] memory validCallers = getOwners(); - for (uint256 i = 0; i < validCallers.length; i++) { - vm.prank(validCallers[i]); - kernel.executeDelegateCall(validCallers[i], ""); - } - } - - function test_external_call_execute_delegatecall_fail() external virtual { - address[] memory validCallers = getOwners(); - for (uint256 i = 0; i < validCallers.length; i++) { - vm.prank(address(uint160(validCallers[i]) + 1)); - vm.expectRevert(); - kernel.executeDelegateCall(validCallers[i], ""); - } - } - - function test_external_call_execute_delegatecall_option_fail() external { - address[] memory validCallers = getOwners(); - for (uint256 i = 0; i < validCallers.length; i++) { - vm.prank(validCallers[i]); - vm.expectRevert(); - kernel.execute(validCallers[i], 0, "", Operation.DelegateCall); - } - } - - function test_external_call_execute_fail() external { - address[] memory validCallers = getOwners(); - for (uint256 i = 0; i < validCallers.length; i++) { - vm.prank(address(uint160(validCallers[i]) + 1)); - vm.expectRevert(); - kernel.execute(validCallers[i], 0, "", Operation.Call); - } - } - - function test_external_call_batch_execute_success() external virtual { - TestCallee callee = new TestCallee(); - Call[] memory calls = new Call[](3); - calls[0] = Call(owner, 0, ""); - calls[1] = Call(address(callee), 0, abi.encodeWithSelector(callee.returnLong.selector)); - calls[2] = Call(address(callee), 0, abi.encode("HelloWorld")); - vm.prank(owner); - kernel.executeBatch(calls); - assertEq(callee.caller(), address(kernel)); - assertEq(callee.sent(), 0); - assertEq(keccak256(callee.message()), keccak256(abi.encode("HelloWorld"))); - calls = new Call[](3); - calls[0] = Call(owner, 0, ""); - calls[1] = Call(address(callee), 0, abi.encodeWithSelector(callee.returnLongBytes.selector)); - calls[2] = Call(address(callee), 0, abi.encode("HelloWorld")); - assertEq(callee.caller(), address(kernel)); - assertEq(callee.sent(), 0); - assertEq(keccak256(callee.message()), keccak256(abi.encode("HelloWorld"))); - - vm.prank(owner); - kernel.executeBatch(calls); - } - - function test_external_call_batch_execute_fail() external { - Call[] memory calls = new Call[](1); - calls[0] = Call(owner, 0, ""); - vm.prank(address(uint160(owner) - 1)); - vm.expectRevert(); - kernel.executeBatch(calls); - } - - function test_get_nonce() external { - assertEq(kernel.getNonce(), entryPoint.getNonce(address(kernel), 0)); - assertEq(kernel.getNonce(100), entryPoint.getNonce(address(kernel), 100)); - } - - function test_get_nonce(uint192 key) external { - assertEq(kernel.getNonce(key), entryPoint.getNonce(address(kernel), key)); - } - - function test_eip712() external { - (bytes1 fields, string memory name, string memory version,, address verifyingContract, bytes32 salt,) = - kernel.eip712Domain(); - assertEq(fields, bytes1(hex"0f")); - assertEq(name, KERNEL_NAME); - assertEq(version, KERNEL_VERSION); - assertEq(verifyingContract, address(kernel)); - assertEq(salt, bytes32(0)); - } - - function test_upgrade() external { - vm.startPrank(address(entryPoint)); - vm.expectEmit(true, false, false, false, address(kernel)); - emit Upgraded(address(0xdeadbeef)); - kernel.upgradeTo(address(0xdeadbeef)); - } - - function test_external_call_default() external virtual { - vm.startPrank(owner); - (bool success,) = address(kernel).call(abi.encodePacked("Hello world")); - assertEq(success, true); - } - - function test_initialize() external { - factory.createAccount(address(kernelImpl), getInitializeData(), 1); - } - - function test_initialize_twice() external { - (bool success,) = address(kernel).call(getInitializeData()); - assertEq(success, false); - } - - function test_should_return_address_if_deployed() external { - address proxy = factory.createAccount(address(kernelImpl), getInitializeData(), 0); - assertEq(proxy, address(kernel)); - } - - function test_validate_signature() external virtual { - Kernel kernel2 = Kernel(payable(factory.createAccount(address(kernelImpl), getInitializeData(), 3))); - string memory message = "hello world"; - bytes32 hash = ECDSA.toEthSignedMessageHash(bytes(message)); - bytes32 digest = keccak256( - abi.encodePacked( - "\x19\x01", ERC4337Utils._buildDomainSeparator(KERNEL_NAME, KERNEL_VERSION, address(kernel)), hash - ) - ); - bytes memory sig = signHash(digest); - vm.startPrank(makeAddr("app")); - assertEq(kernel.isValidSignature(hash, sig), Kernel.isValidSignature.selector); - assertEq(kernel2.isValidSignature(hash, sig), bytes4(0xffffffff)); - vm.stopPrank(); - } - - function test_fail_validate_wrongsignature() external virtual { - bytes32 hash = keccak256(abi.encodePacked("hello world")); - bytes memory sig = getWrongSignature(hash); - vm.startPrank(makeAddr("app")); - assertEq(kernel.isValidSignature(hash, sig), bytes4(0xffffffff)); - vm.stopPrank(); - } - - function test_fail_validate_not_activate() external virtual { - TestValidator newDefaultValidator = new TestValidator(); - vm.startPrank(address(entryPoint)); - kernel.setDefaultValidator(newDefaultValidator, ""); - vm.stopPrank(); - - newDefaultValidator.setData(false, 0, 0); - - vm.warp(100000); - - vm.startPrank(makeAddr("app")); - bytes32 hash = keccak256(abi.encodePacked("hello world")); - assertEq(kernel.isValidSignature(hash, ""), bytes4(0xffffffff)); - newDefaultValidator.setData(true, uint48(block.timestamp + 1000), uint48(0)); - assertEq(kernel.isValidSignature(hash, ""), bytes4(0xffffffff)); - newDefaultValidator.setData(true, uint48(0), uint48(block.timestamp - 1000)); - assertEq(kernel.isValidSignature(hash, ""), bytes4(0xffffffff)); - vm.stopPrank(); - } - - function test_should_emit_event_on_receive() external { - vm.expectEmit(address(kernel)); - emit Received(address(this), 1000); - (bool success,) = address(kernel).call{value: 1000}(""); - assertEq(success, true); - } - - function test_should_receive_erc721() external { - TestERC721 token = new TestERC721(); - token.safeMint(address(kernel), 1); - } - - function test_should_receive_erc1155() external { - TestERC1155 token = new TestERC1155(); - token.mint(address(kernel), 1, 1000, ""); - } - - function test_should_receive_erc1155_batch() external { - TestERC1155 token = new TestERC1155(); - uint256[] memory ids = new uint256[](2); - ids[0] = 1; - ids[1] = 2; - uint256[] memory amounts = new uint256[](2); - amounts[0] = 1000; - amounts[1] = 1000; - token.batchMint(address(kernel), ids, amounts, ""); - } - - function test_set_default_validator() external virtual { - TestValidator newDefaultValidator = new TestValidator(); - bytes memory empty; - UserOperation memory op = buildUserOperation( - abi.encodeWithSelector(IKernel.setDefaultValidator.selector, address(newDefaultValidator), empty) - ); - performUserOperationWithSig(op); - assertEq(address(IKernel(address(kernel)).getDefaultValidator()), address(newDefaultValidator)); - } - - function test_disable_mode() external { - vm.warp(1000); - bytes memory empty; - UserOperation memory op = buildUserOperation( - abi.encodeWithSelector(IKernel.disableMode.selector, bytes4(0x00000001), address(0), empty) - ); - performUserOperationWithSig(op); - assertEq(uint256(bytes32(IKernel(address(kernel)).getDisabledMode())), 1 << 224); - assertEq(uint256(IKernel(address(kernel)).getLastDisabledTime()), block.timestamp); - } - - function test_set_execution() external { - TestValidator newValidator = new TestValidator(); - UserOperation memory op = buildUserOperation( - abi.encodeWithSelector( - IKernel.setExecution.selector, - bytes4(0xdeadbeef), - address(0xdead), - address(newValidator), - uint48(0), - uint48(0), - bytes("") - ) - ); - performUserOperationWithSig(op); - ExecutionDetail memory execution = IKernel(address(kernel)).getExecution(bytes4(0xdeadbeef)); - assertEq(execution.executor, address(0xdead)); - assertEq(address(execution.validator), address(newValidator)); - assertEq(uint256(ValidUntil.unwrap(execution.validUntil)), uint256(0)); - assertEq(uint256(ValidAfter.unwrap(execution.validAfter)), uint256(0)); - } - - function test_external_call_execution() external virtual { - TestValidator newValidator = new TestValidator(); - UserOperation memory op = buildUserOperation( - abi.encodeWithSelector( - IKernel.setExecution.selector, - bytes4(0xdeadbeef), - address(0xdead), - address(newValidator), - uint48(0), - uint48(0), - bytes("") - ) - ); - performUserOperationWithSig(op); - ExecutionDetail memory execution = IKernel(address(kernel)).getExecution(bytes4(0xdeadbeef)); - assertEq(execution.executor, address(0xdead)); - assertEq(address(execution.validator), address(newValidator)); - assertEq(uint256(ValidUntil.unwrap(execution.validUntil)), uint256(0)); - assertEq(uint256(ValidAfter.unwrap(execution.validAfter)), uint256(0)); - - address randomAddr = makeAddr("random"); - newValidator.sudoSetCaller(address(kernel), randomAddr); - vm.startPrank(randomAddr); - (bool success,) = address(kernel).call(abi.encodePacked(bytes4(0xdeadbeef))); - assertEq(success, true); - vm.stopPrank(); - - address notAllowed = makeAddr("notAllowed"); - vm.startPrank(notAllowed); - (bool success2,) = address(kernel).call(abi.encodePacked(bytes4(0xdeadbeef))); - assertEq(success2, false); - vm.stopPrank(); - } - - function test_revert_when_mode_disabled() external { - vm.warp(1000); - bytes memory empty; - UserOperation memory op = buildUserOperation( - abi.encodeWithSelector(IKernel.disableMode.selector, bytes4(0x00000001), address(0), empty) - ); - performUserOperationWithSig(op); - - // try to run with mode 0x00000001 - op = buildUserOperation(abi.encodeWithSelector(IKernel.disableMode.selector, bytes4(0x00000001))); - op.signature = abi.encodePacked(bytes4(0x00000001), entryPoint.signUserOpHash(vm, ownerKey, op)); - vm.expectRevert( - abi.encodeWithSelector(IEntryPoint.FailedOp.selector, 0, string.concat("AA23 reverted (or OOG)")) - ); - performUserOperation(op); - } - - // validate user op - function test_validateUserOp_fail_not_entryPoint() external { - UserOperation memory op = buildUserOperation(abi.encodeWithSelector(TestExecutor.doNothing.selector)); - vm.expectRevert(IKernel.NotEntryPoint.selector); - kernel.validateUserOp(op, bytes32(hex"deadbeef"), uint256(100)); - } - - function test_validateUserOp_fail_invalid_mode() external { - UserOperation memory op = buildUserOperation(abi.encodeWithSelector(TestExecutor.doNothing.selector)); - op.signature = hex"00000003"; - vm.prank(address(entryPoint)); - ValidationData res = kernel.validateUserOp(op, bytes32(hex"deadbeef"), uint256(100)); - assertEq(ValidationData.unwrap(res), 1); - } - - function test_sudo() external { - UserOperation memory op = buildUserOperation(abi.encodeWithSelector(TestExecutor.doNothing.selector)); - performUserOperationWithSig(op); - } - - function test_sudo_wrongSig() external { - UserOperation memory op = buildUserOperation(abi.encodeWithSelector(TestExecutor.doNothing.selector)); - op.signature = getWrongSignature(op); - vm.expectRevert(); - performUserOperation(op); - } - - // mode 2 tests - function test_mode_2() public { - UserOperation memory op = buildUserOperation(abi.encodePacked(executionSig)); - - op.signature = buildEnableSignature( - op, executionSig, uint48(0), uint48(0), executionDetail.validator, executionDetail.executor - ); - vm.expectEmit(true, true, true, false, address(entryPoint)); - emit UserOperationEvent(entryPoint.getUserOpHash(op), address(kernel), address(0), op.nonce, false, 0, 0); - performUserOperation(op); - } - - function buildEnableSignature( - UserOperation memory op, - bytes4 selector, - uint48 validAfter, - uint48 validUntil, - IKernelValidator validator, - address executor - ) internal view returns (bytes memory sig) { - require(address(executionDetail.validator) != address(0), "execution detail not set"); - bytes memory enableData = getEnableData(); - bytes32 digest = getTypedDataHash(selector, validAfter, validUntil, address(validator), executor, enableData); - bytes memory enableSig = signHash(digest); - sig = getValidatorSignature(op); - sig = abi.encodePacked( - bytes4(0x00000002), - validAfter, - validUntil, - address(validator), - executor, - uint256(enableData.length), - enableData, - enableSig.length, - enableSig, - sig - ); - } - - function test_enable_then_mode_1() public { - UserOperation memory op = buildUserOperation( - abi.encodeWithSelector( - IKernel.setExecution.selector, - executionSig, - executionDetail.executor, - executionDetail.validator, - ValidUntil.wrap(0), - ValidAfter.wrap(0), - getEnableData() - ) - ); - performUserOperationWithSig(op); - op = buildUserOperation(abi.encodeWithSelector(executionSig)); - op.signature = abi.encodePacked(bytes4(0x00000001), getValidatorSignature(op)); - performUserOperation(op); - } - - function _setAddress() internal { - kernel = Kernel(payable(address(factory.createAccount(address(kernelImpl), getInitializeData(), 0)))); - vm.deal(address(kernel), 1e30); - } - - // computes the hash of the fully encoded EIP-712 message for the domain, which can be used to recover the signer - function getTypedDataHash( - bytes4 sig, - uint48 validUntil, - uint48 validAfter, - address validator, - address executor, - bytes memory enableData - ) public view returns (bytes32) { - return keccak256( - abi.encodePacked( - "\x19\x01", - ERC4337Utils._buildDomainSeparator(KERNEL_NAME, KERNEL_VERSION, address(kernel)), - ERC4337Utils.getStructHash(sig, validUntil, validAfter, validator, executor, enableData) - ) - ); - } - - function buildUserOperation(bytes memory callData) internal view returns (UserOperation memory op) { - return entryPoint.fillUserOp(address(kernel), callData); - } - - function performUserOperationWithSig(UserOperation memory op) internal { - op.signature = signUserOp(op); - UserOperation[] memory ops = new UserOperation[](1); - ops[0] = op; - entryPoint.handleOps(ops, beneficiary); - } - - function performUserOperation(UserOperation memory op) internal { - UserOperation[] memory ops = new UserOperation[](1); - ops[0] = op; - entryPoint.handleOps(ops, beneficiary); - } -} diff --git a/src/utils/KernelHelper.sol b/src/utils/KernelValidationResult.sol similarity index 93% rename from src/utils/KernelHelper.sol rename to src/utils/KernelValidationResult.sol index 6c6d3e47..91a1b6df 100644 --- a/src/utils/KernelHelper.sol +++ b/src/utils/KernelValidationResult.sol @@ -1,8 +1,8 @@ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; -import {SIG_VALIDATION_FAILED_UINT} from "../common/Constants.sol"; -import {ValidationData} from "../common/Types.sol"; +import {SIG_VALIDATION_FAILED_UINT} from "../types/Constants.sol"; +import {ValidationData, getValidationResult} from "../types/Types.sol"; function _intersectValidationData(ValidationData a, ValidationData b) pure returns (ValidationData validationData) { assembly { diff --git a/src/utils/ModuleLib.sol b/src/utils/ModuleLib.sol new file mode 100644 index 00000000..3c390676 --- /dev/null +++ b/src/utils/ModuleLib.sol @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import {ExcessivelySafeCall} from "ExcessivelySafeCall/ExcessivelySafeCall.sol"; +import {IModule} from "../interfaces/IERC7579Modules.sol"; + +library ModuleLib { + event ModuleUninstallResult(address module, bool result); + + function uninstallModule(address module, bytes memory deinitData) internal returns (bool result) { + (result,) = ExcessivelySafeCall.excessivelySafeCall( + module, gasleft(), 0, 0, abi.encodeWithSelector(IModule.onUninstall.selector, deinitData) + ); + emit ModuleUninstallResult(module, result); + } +} diff --git a/src/utils/P256VerifierWrapper.sol b/src/utils/P256VerifierWrapper.sol deleted file mode 100644 index bc6340ac..00000000 --- a/src/utils/P256VerifierWrapper.sol +++ /dev/null @@ -1,45 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {FCL_ecdsa} from "FreshCryptoLib/FCL_ecdsa.sol"; - -/// @title P256VerifierWrapper -/// @author rdubois-crypto -/// @author KONFeature -/// @notice Wrapper arround the P256Verifier contract of @rdubois-crypto, using it to accept EIP-7212 compliant verification (p256 pre-compiled curve) -/// @dev This lib is only a wrapper around the P256Verifier contract. -/// It will call the verifySignature function of the P256Verifier contract. -/// Once the RIP-7212 will be deployed and effective, this contract will be useless. -/// Tracker on polygon: PR: https://github.com/maticnetwork/bor/pull/1069 -/// Now waiting on the Napoli hardfork to be deployed -contract P256VerifierWrapper { - /** - * Precompiles don't use a function signature. The first byte of callldata - * is the first byte of an input argument. In this case: - * - * input[ 0: 32] = signed data hash - * input[ 32: 64] = signature r - * input[ 64: 96] = signature s - * input[ 96:128] = public key x - * input[128:160] = public key y - * - * result[ 0: 32] = 0x00..00 (invalid) or 0x00..01 (valid) - * - * For details, see https://eips.ethereum.org/EIPS/eip-7212 - */ - fallback(bytes calldata input) external returns (bytes memory) { - if (input.length != 160) { - return abi.encodePacked(uint256(0)); - } - - bytes32 hash = bytes32(input[0:32]); - uint256 r = uint256(bytes32(input[32:64])); - uint256 s = uint256(bytes32(input[64:96])); - uint256 x = uint256(bytes32(input[96:128])); - uint256 y = uint256(bytes32(input[128:160])); - - uint256 ret = FCL_ecdsa.ecdsa_verify(hash, r, s, x, y) ? 1 : 0; - - return abi.encodePacked(ret); - } -} diff --git a/src/utils/ValidationTypeLib.sol b/src/utils/ValidationTypeLib.sol new file mode 100644 index 00000000..8f4f9710 --- /dev/null +++ b/src/utils/ValidationTypeLib.sol @@ -0,0 +1,154 @@ +// SPDX-License-Identifier: MIT + +pragma solidity ^0.8.0; + +import {IValidator, IPolicy} from "../interfaces/IERC7579Modules.sol"; +import {PassFlag, ValidationType, ValidationId, ValidationMode, PolicyData, PermissionId} from "../types/Types.sol"; +import {VALIDATION_TYPE_PERMISSION} from "../types/Constants.sol"; + +library ValidatorLib { + function encodeFlag(bool skipUserOp, bool skipSignature) internal pure returns (PassFlag flag) { + assembly { + if skipUserOp { flag := 0x0001000000000000000000000000000000000000000000000000000000000000 } + if skipSignature { flag := or(flag, 0x0002000000000000000000000000000000000000000000000000000000000000) } + } + } + + function encodePolicyData(bool skipUserOp, bool skipSig, address policy) internal pure returns (PolicyData data) { + assembly { + if skipUserOp { data := 0x0001000000000000000000000000000000000000000000000000000000000000 } + if skipSig { data := or(data, 0x0002000000000000000000000000000000000000000000000000000000000000) } + data := or(data, shl(80, policy)) + } + } + + function encodePermissionAsNonce(bytes1 mode, bytes4 permissionId, uint16 nonceKey, uint64 nonce) + internal + pure + returns (uint256 res) + { + return encodeAsNonce( + mode, ValidationType.unwrap(VALIDATION_TYPE_PERMISSION), bytes20(permissionId), nonceKey, nonce + ); + } + + function encodeAsNonce(bytes1 mode, bytes1 vType, bytes20 ValidationIdWithoutType, uint16 nonceKey, uint64 nonce) + internal + pure + returns (uint256 res) + { + assembly { + res := nonce + res := or(res, shl(64, nonceKey)) + res := or(res, shr(16, ValidationIdWithoutType)) + res := or(res, shr(8, vType)) + res := or(res, mode) + } + } + + function encodeAsNonceKey(bytes1 mode, bytes1 vType, bytes20 ValidationIdWithoutType, uint16 nonceKey) + internal + pure + returns (uint192 res) + { + assembly { + res := or(nonceKey, shr(80, ValidationIdWithoutType)) + res := or(res, shr(72, vType)) + res := or(res, shr(64, mode)) + } + } + + function decodeNonce(uint256 nonce) + internal + pure + returns (ValidationMode mode, ValidationType vType, ValidationId identifier) + { + // 2bytes mode (1byte currentMode, 1byte type) + // 21bytes identifier + // 1byte mode | 1byte type | 20bytes identifierWithoutType | 2byte nonceKey | 8byte nonce == 32bytes + assembly { + mode := nonce + vType := shl(8, nonce) + identifier := shl(8, nonce) + switch shr(248, identifier) + case 0x0000000000000000000000000000000000000000000000000000000000000002 { + identifier := and(identifier, 0xffffffffff000000000000000000000000000000000000000000000000000000) + } + } + } + + function decodeSignature(bytes calldata signature) internal pure returns (ValidationId vId, bytes calldata sig) { + assembly { + vId := calldataload(signature.offset) + switch shr(248, vId) + case 0 { + // sudo mode + vId := 0x00 + sig.offset := add(signature.offset, 1) + sig.length := sub(signature.length, 1) + } + case 1 { + // validator mode + sig.offset := add(signature.offset, 21) + sig.length := sub(signature.length, 21) + } + case 2 { + vId := and(vId, 0xffffffffff000000000000000000000000000000000000000000000000000000) + sig.offset := add(signature.offset, 5) + sig.length := sub(signature.length, 5) + } + default { revert(0x00, 0x00) } + } + } + + function decodePolicyData(PolicyData data) internal pure returns (PassFlag flag, IPolicy policy) { + assembly { + flag := data + policy := shr(80, data) + } + } + + function validatorToIdentifier(IValidator validator) internal pure returns (ValidationId vId) { + assembly { + vId := 0x0100000000000000000000000000000000000000000000000000000000000000 + vId := or(vId, shl(88, validator)) + } + } + + function getType(ValidationId validator) internal pure returns (ValidationType vType) { + assembly { + vType := validator + } + } + + function getValidator(ValidationId validator) internal pure returns (IValidator v) { + assembly { + v := shr(88, validator) + } + } + + function getPermissionId(ValidationId validator) internal pure returns (PermissionId id) { + assembly { + id := shl(8, validator) + } + } + + function permissionToIdentifier(PermissionId permissionId) internal pure returns (ValidationId vId) { + assembly { + vId := 0x0200000000000000000000000000000000000000000000000000000000000000 + vId := or(vId, shr(8, permissionId)) + } + } + + function getPolicy(PolicyData data) internal pure returns (IPolicy vId) { + assembly { + vId := shr(80, data) + } + } + + function getPermissionSkip(PolicyData data) internal pure returns (PassFlag flag) { + assembly { + flag := data + } + } +} diff --git a/src/validator/ECDSATypedValidator.sol b/src/validator/ECDSATypedValidator.sol deleted file mode 100644 index f2dea0c3..00000000 --- a/src/validator/ECDSATypedValidator.sol +++ /dev/null @@ -1,125 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; -import {ECDSA} from "solady/utils/ECDSA.sol"; -import {EIP712} from "solady/utils/EIP712.sol"; -import {IKernelValidator} from "../interfaces/IKernelValidator.sol"; -import {ValidationData} from "../common/Types.sol"; -import {SIG_VALIDATION_FAILED} from "../common/Constants.sol"; - -struct ECDSATypedValidatorStorage { - address owner; -} - -/// @author @KONFeature -/// @title ECDSATypedValidator -/// @notice This validator uses the ECDSA curve to validate signatures. -/// @notice It's using EIP-712 format signature to validate user operations signature & classic signature -contract ECDSATypedValidator is IKernelValidator, EIP712 { - /// @notice The type hash used for kernel user op validation - bytes32 constant USER_OP_TYPEHASH = keccak256("AllowUserOp(address owner,address kernelWallet,bytes32 userOpHash)"); - /// @notice The type hash used for kernel signature validation - bytes32 constant SIGNATURE_TYPEHASH = keccak256("KernelSignature(address owner,address kernelWallet,bytes32 hash)"); - - /// @notice Emitted when the owner of a kernel is changed. - event OwnerChanged(address indexed kernel, address newOwner); - - /* -------------------------------------------------------------------------- */ - /* Storage */ - /* -------------------------------------------------------------------------- */ - - /// @notice The validator storage of a kernel. - mapping(address kernel => ECDSATypedValidatorStorage validatorStorage) private ecdsaValidatorStorage; - - /* -------------------------------------------------------------------------- */ - /* EIP-712 Methods */ - /* -------------------------------------------------------------------------- */ - - /// @dev Get the current name & version of the validator, used for the EIP-712 domain separator from Solady - function _domainNameAndVersion() internal pure override returns (string memory, string memory) { - return ("Kernel:ECDSATypedValidator", "1.0.0"); - } - - /// @dev Tell to solady that the current name & version of the validator won't change, so no need to recompute the eip-712 domain separator - function _domainNameAndVersionMayChange() internal pure override returns (bool) { - return false; - } - - /// @dev Export the current domain seperator - function getDomainSeperator() public view returns (bytes32) { - return _domainSeparator(); - } - - /* -------------------------------------------------------------------------- */ - /* Kernel validator Methods */ - /* -------------------------------------------------------------------------- */ - - /// @dev Enable this validator for a given `kernel` (msg.sender) - function enable(bytes calldata _data) external payable override { - address owner = address(bytes20(_data[0:20])); - ecdsaValidatorStorage[msg.sender].owner = owner; - emit OwnerChanged(msg.sender, owner); - } - - /// @dev Disable this validator for a given `kernel` (msg.sender) - function disable(bytes calldata) external payable override { - delete ecdsaValidatorStorage[msg.sender]; - } - - /// @dev Validate a `_userOp` using a EIP-712 signature, signed by the owner of the kernel account who is the `_userOp` sender - function validateUserOp(UserOperation calldata _userOp, bytes32 _userOpHash, uint256) - external - payable - override - returns (ValidationData validationData) - { - // Get the owner for the given kernel account - address owner = ecdsaValidatorStorage[_userOp.sender].owner; - - // Build the full message hash to check against - bytes32 typedDataHash = - _hashTypedData(keccak256(abi.encode(USER_OP_TYPEHASH, owner, _userOp.sender, _userOpHash))); - - // Validate the typed data hash signature - if (owner == ECDSA.recover(typedDataHash, _userOp.signature)) { - // If that worked, return a valid validation data - return ValidationData.wrap(0); - } - - // If not, return a failed validation data - return SIG_VALIDATION_FAILED; - } - - /// @dev Validate a `_signature` of the `_hash` ofor the given `kernel` (msg.sender) - function validateSignature(bytes32 _hash, bytes calldata signature) public view override returns (ValidationData) { - // Get the owner for the given kernel account - address owner = ecdsaValidatorStorage[msg.sender].owner; - - // Build the full message hash to check against - bytes32 typedDataHash = _hashTypedData(keccak256(abi.encode(SIGNATURE_TYPEHASH, owner, msg.sender, _hash))); - - // Validate the typed data hash signature - if (owner == ECDSA.recover(typedDataHash, signature)) { - // If that worked, return a valid validation data - return ValidationData.wrap(0); - } - - // If not, return a failed validation data - return SIG_VALIDATION_FAILED; - } - - /// @dev Check if the caller is a valid signer for this kernel account - function validCaller(address _caller, bytes calldata) external view override returns (bool) { - return ecdsaValidatorStorage[msg.sender].owner == _caller; - } - - /* -------------------------------------------------------------------------- */ - /* Public view methods */ - /* -------------------------------------------------------------------------- */ - - /// @dev Get the owner of a given `kernel` - function getOwner(address _kernel) public view returns (address) { - return ecdsaValidatorStorage[_kernel].owner; - } -} diff --git a/src/validator/ECDSAValidator.sol b/src/validator/ECDSAValidator.sol index 9eeabf6e..00e6aca5 100644 --- a/src/validator/ECDSAValidator.sol +++ b/src/validator/ECDSAValidator.sol @@ -2,62 +2,97 @@ pragma solidity ^0.8.0; -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; import {ECDSA} from "solady/utils/ECDSA.sol"; -import {IKernelValidator} from "../interfaces/IKernelValidator.sol"; -import {ValidationData} from "../common/Types.sol"; -import {SIG_VALIDATION_FAILED} from "../common/Constants.sol"; +import {IValidator, IHook} from "../interfaces/IERC7579Modules.sol"; +import {PackedUserOperation} from "../interfaces/PackedUserOperation.sol"; +import { + SIG_VALIDATION_SUCCESS_UINT, + SIG_VALIDATION_FAILED_UINT, + MODULE_TYPE_VALIDATOR, + MODULE_TYPE_HOOK, + ERC1271_MAGICVALUE, + ERC1271_INVALID +} from "../types/Constants.sol"; struct ECDSAValidatorStorage { address owner; } -contract ECDSAValidator is IKernelValidator { - event OwnerChanged(address indexed kernel, address indexed oldOwner, address indexed newOwner); +contract ECDSAValidator is IValidator, IHook { + event OwnerRegistered(address indexed kernel, address indexed owner); mapping(address => ECDSAValidatorStorage) public ecdsaValidatorStorage; - function disable(bytes calldata) external payable override { + function onInstall(bytes calldata _data) external payable override { + if (_isInitialized(msg.sender)) revert AlreadyInitialized(msg.sender); + address owner = address(bytes20(_data[0:20])); + ecdsaValidatorStorage[msg.sender].owner = owner; + emit OwnerRegistered(msg.sender, owner); + } + + function onUninstall(bytes calldata) external payable override { + if (!_isInitialized(msg.sender)) revert NotInitialized(msg.sender); delete ecdsaValidatorStorage[msg.sender]; } - function enable(bytes calldata _data) external payable override { - address owner = address(bytes20(_data[0:20])); - address oldOwner = ecdsaValidatorStorage[msg.sender].owner; - ecdsaValidatorStorage[msg.sender].owner = owner; - emit OwnerChanged(msg.sender, oldOwner, owner); + function isModuleType(uint256 typeID) external pure override returns (bool) { + return typeID == MODULE_TYPE_VALIDATOR || typeID == MODULE_TYPE_HOOK; + } + + function isInitialized(address smartAccount) external view override returns (bool) { + return _isInitialized(smartAccount); + } + + function _isInitialized(address smartAccount) internal view returns (bool) { + return ecdsaValidatorStorage[smartAccount].owner != address(0); } - function validateUserOp(UserOperation calldata _userOp, bytes32 _userOpHash, uint256) + function validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash) external payable override - returns (ValidationData validationData) + returns (uint256) { - address owner = ecdsaValidatorStorage[_userOp.sender].owner; - bytes32 hash = ECDSA.toEthSignedMessageHash(_userOpHash); - if (owner == ECDSA.recover(hash, _userOp.signature)) { - return ValidationData.wrap(0); + address owner = ecdsaValidatorStorage[msg.sender].owner; + bytes calldata sig = userOp.signature; + if (owner == ECDSA.recover(userOpHash, sig)) { + return SIG_VALIDATION_SUCCESS_UINT; } - if (owner != ECDSA.recover(_userOpHash, _userOp.signature)) { - return SIG_VALIDATION_FAILED; + bytes32 ethHash = ECDSA.toEthSignedMessageHash(userOpHash); + address recovered = ECDSA.recover(ethHash, sig); + if (owner != recovered) { + return SIG_VALIDATION_FAILED_UINT; } + return SIG_VALIDATION_SUCCESS_UINT; } - function validateSignature(bytes32 hash, bytes calldata signature) public view override returns (ValidationData) { + function isValidSignatureWithSender(address, bytes32 hash, bytes calldata sig) + external + view + override + returns (bytes4) + { address owner = ecdsaValidatorStorage[msg.sender].owner; - if (owner == ECDSA.recover(hash, signature)) { - return ValidationData.wrap(0); + if (owner == ECDSA.recover(hash, sig)) { + return ERC1271_MAGICVALUE; } bytes32 ethHash = ECDSA.toEthSignedMessageHash(hash); - address recovered = ECDSA.recover(ethHash, signature); + address recovered = ECDSA.recover(ethHash, sig); if (owner != recovered) { - return SIG_VALIDATION_FAILED; + return ERC1271_INVALID; } - return ValidationData.wrap(0); + return ERC1271_MAGICVALUE; } - function validCaller(address _caller, bytes calldata) external view override returns (bool) { - return ecdsaValidatorStorage[msg.sender].owner == _caller; + function preCheck(address msgSender, uint256 value, bytes calldata) + external + payable + override + returns (bytes memory) + { + require(msgSender == ecdsaValidatorStorage[msg.sender].owner, "ECDSAValidator: sender is not owner"); + return hex""; } + + function postCheck(bytes calldata hookData, bool success, bytes calldata res) external payable override {} } diff --git a/src/validator/ERC165SessionKeyValidator.sol b/src/validator/ERC165SessionKeyValidator.sol deleted file mode 100644 index 4f381001..00000000 --- a/src/validator/ERC165SessionKeyValidator.sol +++ /dev/null @@ -1,68 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; -import {ECDSA} from "solady/utils/ECDSA.sol"; -import {IKernelValidator} from "../interfaces/IKernelValidator.sol"; -import {ValidAfter, ValidUntil, ValidationData, packValidationData} from "../common/Types.sol"; -import {SIG_VALIDATION_FAILED} from "../common/Constants.sol"; - -// idea, we can make this merkle root -struct ERC165SessionKeyStorage { - bool enabled; - bytes4 selector; - bytes4 interfaceId; - ValidAfter validAfter; - ValidUntil validUntil; - uint32 addressOffset; -} - -interface IERC165 { - function supportsInterface(bytes4 interfaceId) external view returns (bool); -} - -contract ERC165SessionKeyValidator is IKernelValidator { - mapping(address sessionKey => mapping(address kernel => ERC165SessionKeyStorage)) public sessionKeys; - - function enable(bytes calldata _data) external payable { - address sessionKey = address(bytes20(_data[0:20])); - bytes4 interfaceId = bytes4(_data[20:24]); - bytes4 selector = bytes4(_data[24:28]); - ValidAfter validAfter = ValidAfter.wrap(uint48(bytes6(_data[28:34]))); - ValidUntil validUntil = ValidUntil.wrap(uint48(bytes6(_data[34:40]))); - uint32 addressOffset = uint32(bytes4(_data[40:44])); - sessionKeys[sessionKey][msg.sender] = - ERC165SessionKeyStorage(true, selector, interfaceId, validAfter, validUntil, addressOffset); - } - - function disable(bytes calldata _data) external payable { - address sessionKey = address(bytes20(_data[0:20])); - - delete sessionKeys[sessionKey][msg.sender]; - } - - function validateSignature(bytes32, bytes calldata) external pure override returns (ValidationData) { - revert NotImplemented(); - } - - function validateUserOp(UserOperation calldata _userOp, bytes32 _userOpHash, uint256) - external - payable - returns (ValidationData) - { - bytes32 hash = ECDSA.toEthSignedMessageHash(_userOpHash); - address recovered = ECDSA.recover(hash, _userOp.signature); - ERC165SessionKeyStorage storage sessionKey = sessionKeys[recovered][_userOp.sender]; - if (!sessionKey.enabled) { - return SIG_VALIDATION_FAILED; - } - require(bytes4(_userOp.callData[0:4]) == sessionKey.selector, "not supported selector"); - address token = address(bytes20(_userOp.callData[sessionKey.addressOffset:sessionKey.addressOffset + 20])); - require(IERC165(token).supportsInterface(sessionKey.interfaceId), "does not support interface"); - return packValidationData(sessionKey.validAfter, sessionKey.validUntil); - } - - function validCaller(address, bytes calldata) external view override returns (bool) { - revert NotImplemented(); - } -} diff --git a/src/validator/KillSwitchValidator.sol b/src/validator/KillSwitchValidator.sol deleted file mode 100644 index 13b279e9..00000000 --- a/src/validator/KillSwitchValidator.sol +++ /dev/null @@ -1,85 +0,0 @@ -// SPDX-License-Identifier: MIT - -pragma solidity ^0.8.0; - -import {ECDSA} from "solady/utils/ECDSA.sol"; -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; -import {IKernel} from "../interfaces/IKernel.sol"; -import {_intersectValidationData} from "../utils/KernelHelper.sol"; -import {WalletKernelStorage, ExecutionDetail} from "../common/Structs.sol"; -import {IKernelValidator} from "../interfaces/IKernelValidator.sol"; -import {ValidationData, ValidAfter, ValidUntil, packValidationData, parseValidationData} from "../common/Types.sol"; -import {KillSwitchAction} from "../executor/KillSwitchAction.sol"; -import {SIG_VALIDATION_FAILED} from "../common/Constants.sol"; - -struct KillSwitchValidatorStorage { - address guardian; - IKernelValidator validator; - ValidAfter pausedUntil; - bytes4 disableMode; -} - -contract KillSwitchValidator is IKernelValidator { - mapping(address => KillSwitchValidatorStorage) public killSwitchValidatorStorage; - - function enable(bytes calldata enableData) external payable override { - killSwitchValidatorStorage[msg.sender].guardian = address(bytes20(enableData[0:20])); - } - - function disable(bytes calldata) external payable override { - delete killSwitchValidatorStorage[msg.sender]; - } - - function validateSignature(bytes32, bytes calldata) external pure override returns (ValidationData) { - revert NotImplemented(); - } - - function validateUserOp(UserOperation calldata _userOp, bytes32 _userOpHash, uint256) - external - payable - override - returns (ValidationData) - { - KillSwitchValidatorStorage storage validatorStorage = killSwitchValidatorStorage[msg.sender]; // should use msg.sender to prevent others from changing storage - ValidAfter pausedUntil = validatorStorage.pausedUntil; - ValidationData validationData; - if (address(validatorStorage.validator) != address(0)) { - // check for validator at first - try validatorStorage.validator.validateUserOp(_userOp, _userOpHash, 0) returns (ValidationData res) { - validationData = res; - } catch { - validationData = SIG_VALIDATION_FAILED; - } - (,, address result) = parseValidationData(validationData); - if (result != address(1)) { - // if signature verification has not been failed, return with the result - ValidationData delayedData = packValidationData(pausedUntil, ValidUntil.wrap(0)); - return _intersectValidationData(validationData, delayedData); - } else if (bytes4(_userOp.callData[0:4]) == KillSwitchAction.toggleKillSwitch.selector) { - bytes32 hash = ECDSA.toEthSignedMessageHash(_userOpHash); - address recovered = ECDSA.recover(hash, _userOp.signature); - if (validatorStorage.guardian == recovered) { - return packValidationData(ValidAfter.wrap(0), ValidUntil.wrap(0)); - } - } - } - if (_userOp.signature.length == 71) { - // save data to this storage - validatorStorage.pausedUntil = ValidAfter.wrap(uint48(bytes6(_userOp.signature[0:6]))); - validatorStorage.validator = IKernel(msg.sender).getDefaultValidator(); - validatorStorage.disableMode = IKernel(msg.sender).getDisabledMode(); - bytes32 hash = ECDSA.toEthSignedMessageHash(keccak256(bytes.concat(_userOp.signature[0:6], _userOpHash))); - address recovered = ECDSA.recover(hash, _userOp.signature[6:]); - if (validatorStorage.guardian != recovered) { - return SIG_VALIDATION_FAILED; - } - return packValidationData(pausedUntil, ValidUntil.wrap(0)); - } else { - return SIG_VALIDATION_FAILED; - } - } - - function validCaller(address, bytes calldata) external view override returns (bool) { - revert NotImplemented(); - } -} diff --git a/src/validator/SessionKeyValidator.sol b/src/validator/SessionKeyValidator.sol deleted file mode 100644 index fe876192..00000000 --- a/src/validator/SessionKeyValidator.sol +++ /dev/null @@ -1,311 +0,0 @@ -pragma solidity ^0.8.0; - -import {ECDSA} from "solady/utils/ECDSA.sol"; -import {MerkleProofLib} from "solady/utils/MerkleProofLib.sol"; - -import {IKernelValidator} from "../interfaces/IKernelValidator.sol"; -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; - -import {SIG_VALIDATION_FAILED} from "../common/Constants.sol"; -import {ParamCondition, Operation} from "../common/Enums.sol"; -import {ParamRule, SessionData, Permission, Call, ExecutionRule, ExecutionStatus, Nonces} from "../common/Structs.sol"; -import "../common/Types.sol"; - -import {Kernel} from "../Kernel.sol"; - -contract SessionKeyValidator is IKernelValidator { - mapping(address kernel => Nonces) public nonces; - mapping(address sessionKey => mapping(address kernel => SessionData)) public sessionData; - mapping(bytes32 permissionKey => mapping(address kernel => ExecutionStatus)) public executionStatus; - - function enable(bytes calldata _data) external payable { - address sessionKey = address(bytes20(_data[0:20])); - bytes32 merkleRoot = bytes32(_data[20:52]); - ValidAfter validAfter = ValidAfter.wrap(uint48(bytes6(_data[52:58]))); - ValidUntil validUntil = ValidUntil.wrap(uint48(bytes6(_data[58:64]))); - address paymaster = address(bytes20(_data[64:84])); - uint256 nonce = uint256(bytes32(_data[84:116])); - sessionData[sessionKey][msg.sender] = SessionData(merkleRoot, validAfter, validUntil, paymaster, nonce); - require(nonce == ++nonces[msg.sender].lastNonce, "SessionKeyValidator: invalid nonce"); - } - - function invalidateNonce(uint128 nonce) public { - require(nonce > nonces[msg.sender].invalidNonce, "SessionKeyValidator: invalid nonce"); - nonces[msg.sender].invalidNonce = nonce; - if (nonces[msg.sender].lastNonce < nonce) { - nonces[msg.sender].lastNonce = nonce; - } - } - - function disable(bytes calldata _data) external payable { - // invalidate specific sessionKey - if (_data.length == 20) { - address sessionKey = address(bytes20(_data[0:20])); - delete sessionData[sessionKey][msg.sender]; - } else if (_data.length == 16) { - // invalidate all sessionKeys before specific nonce - invalidateNonce(uint128(bytes16(_data[0:16]))); - } else { - // invalidate all sessionKeys - invalidateNonce(nonces[msg.sender].lastNonce); - } - } - - function _verifyPaymaster(UserOperation calldata userOp, SessionData storage session) internal view { - // to make this fully work with paymaster service, prepack the address of paymaster up front - if (session.paymaster == address(1)) { - // any paymaster - require(userOp.paymasterAndData.length != 0, "SessionKeyValidator: paymaster not set"); - } else if (session.paymaster != address(0)) { - // specific paymaster - require( - address(bytes20(userOp.paymasterAndData[0:20])) == session.paymaster, - "SessionKeyValidator: paymaster mismatch" - ); - } - } - - function _verifyUserOpHash(address _sessionKey, ValidAfter validAfter, ValidUntil validUntil) - internal - view - returns (ValidationData) - { - bytes32 userOpHash; - assembly { - // 0x00 ~ 0x04 : sig - // 0x04 ~ 0x24 : userOp.offset - // 0x24 ~ 0x44 : userOpHash - userOpHash := calldataload(0x24) - } - bytes calldata signature; - assembly { - //0x00 ~ 0x04 : selector - //0x04 ~ 0x24 : userOp.offset - //0x24 ~ 0x44 : userOpHash - //0x44 ~ 0x64 : missingAccountFund - //[userOp.offset + 0x04] - //0x00 ~ 0x20 : sender - //0x20 ~ 0x40 : nonce - //0x40 ~ 0x60 : initCode - //0x60 ~ 0x80 : callData - //0x80 ~ 0xa0 : callGasLimit - //0xa0 ~ 0xc0 : verificationGasLimit - //0xc0 ~ 0xe0 : preVerificationGas - //0xe0 ~ 0x100 : maxFeePerGas - //0x100 ~ 0x120 : maxPriorityFeePerGas - //0x120 ~ 0x140 : paymasterAndData - //0x140 ~ 0x160 : signatureOffset - //[signatureOffset + userOp.offset + 0x04] - //[0x00 ~ 0x20] : length - //[0x20 ~] : signature - let userOpOffset := add(calldataload(0x04), 0x04) - let signatureOffset := add(calldataload(add(userOpOffset, 0x140)), add(userOpOffset, 0x34)) - signature.offset := signatureOffset - signature.length := 0x41 - } - if (_sessionKey != ECDSA.recover(ECDSA.toEthSignedMessageHash(userOpHash), signature)) { - return SIG_VALIDATION_FAILED; - } - return packValidationData(validAfter, validUntil); - } - - // to parse batch execute permissions - function _getPermissions(bytes calldata _sig) internal pure returns (Permission[] calldata permissions) { - assembly { - permissions.offset := add(add(_sig.offset, 0x20), calldataload(_sig.offset)) - permissions.length := calldataload(add(_sig.offset, calldataload(_sig.offset))) - } - } - - function _getProofs(bytes calldata _sig) internal pure returns (bytes32[][] calldata proofs) { - assembly { - proofs.length := calldataload(add(_sig.offset, calldataload(add(_sig.offset, 0x20)))) - proofs.offset := add(add(_sig.offset, 0x20), calldataload(add(_sig.offset, 0x20))) - } - } - - // to parse single execute permission - function _getPermission(bytes calldata _sig) - internal - pure - returns (Permission calldata permission, bytes32[] calldata merkleProof) - { - assembly { - permission := add(_sig.offset, calldataload(_sig.offset)) - merkleProof.length := calldataload(add(_sig.offset, calldataload(add(_sig.offset, 0x20)))) - merkleProof.offset := add(add(_sig.offset, 0x20), calldataload(add(_sig.offset, 0x20))) - } - } - - function validateUserOp(UserOperation calldata userOp, bytes32, uint256) - external - payable - returns (ValidationData) - { - // userOp.signature = signer + signature + permission + merkleProof - address sessionKey = address(bytes20(userOp.signature[0:20])); - SessionData storage session = sessionData[sessionKey][msg.sender]; - // nonce starts from 1 - require(session.nonce > nonces[msg.sender].invalidNonce, "SessionKeyValidator: session key not enabled"); - _verifyPaymaster(userOp, session); - - // NOTE: although this is allowed in smart contract, it is guided not to use this feature in most usecases - // instead of setting sudo approval to sessionKey, please set specific permission to sessionKey - if (session.merkleRoot == bytes32(0)) { - return _verifyUserOpHash(sessionKey, session.validAfter, session.validUntil); - } - - bytes calldata callData = userOp.callData; - if ( - bytes4(callData[0:4]) == Kernel.execute.selector - || bytes4(callData[0:4]) == Kernel.executeDelegateCall.selector - ) { - (Permission calldata permission, bytes32[] calldata merkleProof) = _getPermission(userOp.signature[85:]); - (ValidAfter validAfter, bool verifyFailed) = _verifyParam(sessionKey, callData, permission, merkleProof); - if (verifyFailed) { - return SIG_VALIDATION_FAILED; - } - return _verifyUserOpHash(sessionKey, validAfter, session.validUntil); - } else if (bytes4(callData[0:4]) == Kernel.executeBatch.selector) { - Permission[] calldata permissions = _getPermissions(userOp.signature[85:]); - bytes32[][] calldata merkleProof = _getProofs(userOp.signature[85:]); - (ValidAfter validAfter, bool verifyFailed) = _verifyParams(sessionKey, callData, permissions, merkleProof); - if (verifyFailed) { - return SIG_VALIDATION_FAILED; - } - return _verifyUserOpHash(sessionKey, validAfter, session.validUntil); - } else { - return SIG_VALIDATION_FAILED; - } - } - - function _updateValidAfter(Permission calldata permission, bytes32 permissionKey) - internal - returns (ValidAfter validAfter) - { - if (permission.executionRule.interval == 0) { - // no need to update validAfter - validAfter = permission.executionRule.validAfter; - } else { - require( - ValidAfter.unwrap(permission.executionRule.validAfter) != 0, - "SessionKeyValidator: invalid execution rule" - ); - // should update validAfter for executionStatus - ExecutionStatus storage status = executionStatus[permissionKey][msg.sender]; - if (ValidAfter.unwrap(status.validAfter) != 0) { - validAfter = ValidAfter.wrap(ValidAfter.unwrap(status.validAfter) + permission.executionRule.interval); - } else { - validAfter = permission.executionRule.validAfter; - } - status.validAfter = validAfter; - } - // update runs - if (permission.executionRule.runs != 0) { - ExecutionStatus storage status = executionStatus[permissionKey][msg.sender]; - status.runs += 1; - require(status.runs <= permission.executionRule.runs, "SessionKeyValidator: runs exceeded"); - } - return validAfter; - } - - function _verifyParams( - address sessionKey, - bytes calldata callData, - Permission[] calldata _permissions, - bytes32[][] calldata _merkleProof - ) internal returns (ValidAfter maxValidAfter, bool verifyFailed) { - Call[] calldata calls; - assembly { - calls.offset := add(add(callData.offset, 0x24), calldataload(add(callData.offset, 4))) - calls.length := calldataload(add(add(callData.offset, 4), calldataload(add(callData.offset, 4)))) - } - uint256 i = 0; - SessionData storage session = sessionData[sessionKey][msg.sender]; - maxValidAfter = session.validAfter; - for (i = 0; i < calls.length; i++) { - Call calldata call = calls[i]; - Permission calldata permission = _permissions[i]; - require( - permission.target == address(0) || call.to == permission.target, "SessionKeyValidator: target mismatch" - ); - require(uint256(bytes32(call.value)) <= permission.valueLimit, "SessionKeyValidator: value limit exceeded"); - require(verifyPermission(call.data, permission), "SessionKeyValidator: permission verification failed"); - ValidAfter validAfter = - _updateValidAfter(permission, keccak256(abi.encodePacked(session.nonce, permission.index))); - if (ValidAfter.unwrap(validAfter) > ValidAfter.unwrap(maxValidAfter)) { - maxValidAfter = validAfter; - } - if (!MerkleProofLib.verify(_merkleProof[i], session.merkleRoot, keccak256(abi.encode(permission)))) { - return (maxValidAfter, true); - } - } - } - - function _verifyParam( - address sessionKey, - bytes calldata callData, - Permission calldata _permission, - bytes32[] calldata _merkleProof - ) internal returns (ValidAfter validAfter, bool verifyFailed) { - SessionData storage session = sessionData[sessionKey][msg.sender]; - bool isExecute = bytes4(callData[0:4]) == Kernel.execute.selector; - require( - _permission.target == address(0) || address(bytes20(callData[16:36])) == _permission.target, - "SessionKeyValidator: target mismatch" - ); - if (isExecute) { - require( - uint256(bytes32(callData[36:68])) <= _permission.valueLimit, "SessionKeyValidator: value limit exceeded" - ); - } else { - require(_permission.operation == Operation.DelegateCall, "SessionKeyValidator: operation mismatch"); - } - bytes calldata data; - uint8 dataParamOffset = isExecute ? 0x44 : 0x24; - assembly { - let dataOffset := add(add(callData.offset, 0x04), calldataload(add(callData.offset, dataParamOffset))) - let length := calldataload(dataOffset) - data.offset := add(dataOffset, 32) - data.length := length - } - require(verifyPermission(data, _permission), "SessionKeyValidator: permission verification failed"); - validAfter = _updateValidAfter(_permission, keccak256(abi.encodePacked(session.nonce, _permission.index))); - if (ValidAfter.unwrap(validAfter) < ValidAfter.unwrap(session.validAfter)) { - validAfter = session.validAfter; - } - if (!MerkleProofLib.verify(_merkleProof, session.merkleRoot, keccak256(abi.encode(_permission)))) { - return (validAfter, true); - } - } - - function verifyPermission(bytes calldata data, Permission calldata permission) internal pure returns (bool) { - if (bytes4(data[0:4]) != permission.sig) return false; - for (uint256 i = 0; i < permission.rules.length; i++) { - ParamRule calldata rule = permission.rules[i]; - bytes32 param = bytes32(data[4 + rule.offset:4 + rule.offset + 32]); - if (rule.condition == ParamCondition.EQUAL && param != rule.param) { - return false; - } else if (rule.condition == ParamCondition.GREATER_THAN && param <= rule.param) { - return false; - } else if (rule.condition == ParamCondition.LESS_THAN && param >= rule.param) { - return false; - } else if (rule.condition == ParamCondition.GREATER_THAN_OR_EQUAL && param < rule.param) { - return false; - } else if (rule.condition == ParamCondition.LESS_THAN_OR_EQUAL && param > rule.param) { - return false; - } else if (rule.condition == ParamCondition.NOT_EQUAL && param == rule.param) { - return false; - } - } - return true; - } - - function validCaller(address, bytes calldata) external view returns (bool) { - revert NotImplemented(); - } - - function validateSignature(bytes32, bytes calldata) external pure returns (ValidationData) { - revert NotImplemented(); - } -} diff --git a/src/validator/WeightedECDSAValidator.sol b/src/validator/WeightedECDSAValidator.sol index 47921c7c..5189d31d 100644 --- a/src/validator/WeightedECDSAValidator.sol +++ b/src/validator/WeightedECDSAValidator.sol @@ -1,11 +1,19 @@ +// SPDX-License-Identifier: MIT + pragma solidity ^0.8.0; -import "src/common/Types.sol"; -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; +import "src/types/Types.sol"; import {ECDSA} from "solady/utils/ECDSA.sol"; import {EIP712} from "solady/utils/EIP712.sol"; -import {IKernelValidator} from "src/interfaces/IKernelValidator.sol"; -import {SIG_VALIDATION_FAILED} from "src/common/Constants.sol"; +import {PackedUserOperation} from "../interfaces/PackedUserOperation.sol"; +import {IValidator} from "../interfaces/IERC7579Modules.sol"; +import { + ERC1271_MAGICVALUE, + ERC1271_INVALID, + SIG_VALIDATION_FAILED_UINT, + MODULE_TYPE_VALIDATOR, + MODULE_TYPE_HOOK +} from "../types/Constants.sol"; struct WeightedECDSAValidatorStorage { uint24 totalWeight; @@ -40,7 +48,7 @@ struct VoteStorage { VoteStatus status; } -contract WeightedECDSAValidator is EIP712, IKernelValidator { +contract WeightedECDSAValidator is EIP712, IValidator { mapping(address kernel => WeightedECDSAValidatorStorage) public weightedStorage; mapping(address guardian => mapping(address kernel => GuardianStorage)) public guardian; mapping(bytes32 callDataAndNonceHash => mapping(address kernel => ProposalStorage)) public proposalStatus; @@ -51,45 +59,34 @@ contract WeightedECDSAValidator is EIP712, IKernelValidator { event GuardianRemoved(address indexed guardian, address indexed kernel); function _domainNameAndVersion() internal pure override returns (string memory, string memory) { - return ("WeightedECDSAValidator", "0.0.3"); + return ("WeightedECDSAValidator", "0.0.2"); } - function _addGuardians(address[] memory _guardians, uint24[] memory _weights, address _kernel) internal { - uint24 totalWeight = weightedStorage[_kernel].totalWeight; + function onInstall(bytes calldata _data) external payable override { + (address[] memory _guardians, uint24[] memory _weights, uint24 _threshold, uint48 _delay) = + abi.decode(_data, (address[], uint24[], uint24, uint48)); require(_guardians.length == _weights.length, "Length mismatch"); - uint160 prevGuardian = uint160(weightedStorage[_kernel].firstGuardian); + if (_isInitialized(msg.sender)) revert AlreadyInitialized(msg.sender); + weightedStorage[msg.sender].firstGuardian = msg.sender; for (uint256 i = 0; i < _guardians.length; i++) { - require(_guardians[i] != _kernel, "Guardian cannot be self"); + require(_guardians[i] != msg.sender, "Guardian cannot be self"); require(_guardians[i] != address(0), "Guardian cannot be 0"); require(_weights[i] != 0, "Weight cannot be 0"); - require(guardian[_guardians[i]][_kernel].weight == 0, "Guardian already enabled"); - require(uint160(_guardians[i]) < prevGuardian, "Guardians not sorted"); - guardian[_guardians[i]][_kernel] = - GuardianStorage({weight: _weights[i], nextGuardian: weightedStorage[_kernel].firstGuardian}); - weightedStorage[_kernel].firstGuardian = _guardians[i]; - totalWeight += _weights[i]; - prevGuardian = uint160(_guardians[i]); - emit GuardianAdded(_guardians[i], _kernel, _weights[i]); + require(guardian[_guardians[i]][msg.sender].weight == 0, "Guardian already enabled"); + guardian[_guardians[i]][msg.sender] = + GuardianStorage({weight: _weights[i], nextGuardian: weightedStorage[msg.sender].firstGuardian}); + weightedStorage[msg.sender].firstGuardian = _guardians[i]; + weightedStorage[msg.sender].totalWeight += _weights[i]; + emit GuardianAdded(_guardians[i], msg.sender, _weights[i]); } - weightedStorage[_kernel].totalWeight = totalWeight; - } - - function enable(bytes calldata _data) external payable override { - (address[] memory _guardians, uint24[] memory _weights, uint24 _threshold, uint48 _delay) = - abi.decode(_data, (address[], uint24[], uint24, uint48)); - require(_guardians.length == _weights.length, "Length mismatch"); - require(weightedStorage[msg.sender].totalWeight == 0, "Already enabled"); - weightedStorage[msg.sender].firstGuardian = address(uint160(type(uint160).max)); - _addGuardians(_guardians, _weights, msg.sender); weightedStorage[msg.sender].delay = _delay; weightedStorage[msg.sender].threshold = _threshold; - require(_threshold <= weightedStorage[msg.sender].totalWeight, "Threshold too high"); } - function disable(bytes calldata) external payable override { - require(weightedStorage[msg.sender].totalWeight != 0, "Not enabled"); + function onUninstall(bytes calldata) external payable override { + if (!_isInitialized(msg.sender)) revert NotInitialized(msg.sender); address currentGuardian = weightedStorage[msg.sender].firstGuardian; - while (currentGuardian != address(uint160(type(uint160).max))) { + while (currentGuardian != msg.sender) { address nextGuardian = guardian[currentGuardian][msg.sender].nextGuardian; emit GuardianRemoved(currentGuardian, msg.sender); delete guardian[currentGuardian][msg.sender]; @@ -98,11 +95,23 @@ contract WeightedECDSAValidator is EIP712, IKernelValidator { delete weightedStorage[msg.sender]; } + function isModuleType(uint256 moduleTypeId) external pure returns (bool) { + return moduleTypeId == MODULE_TYPE_VALIDATOR; + } + + function isInitialized(address smartAccount) external view returns (bool) { + return _isInitialized(smartAccount); + } + + function _isInitialized(address smartAccount) internal view returns (bool) { + return weightedStorage[smartAccount].totalWeight != 0; + } + function renew(address[] calldata _guardians, uint24[] calldata _weights, uint24 _threshold, uint48 _delay) external payable { - require(weightedStorage[msg.sender].totalWeight != 0, "Not enabled"); + if (!_isInitialized(msg.sender)) revert NotInitialized(msg.sender); address currentGuardian = weightedStorage[msg.sender].firstGuardian; while (currentGuardian != msg.sender) { address nextGuardian = guardian[currentGuardian][msg.sender].nextGuardian; @@ -112,13 +121,23 @@ contract WeightedECDSAValidator is EIP712, IKernelValidator { } delete weightedStorage[msg.sender]; require(_guardians.length == _weights.length, "Length mismatch"); - weightedStorage[msg.sender].firstGuardian = _guardians[0]; - _addGuardians(_guardians, _weights, msg.sender); + weightedStorage[msg.sender].firstGuardian = msg.sender; + for (uint256 i = 0; i < _guardians.length; i++) { + require(_guardians[i] != msg.sender, "Guardian cannot be self"); + require(_guardians[i] != address(0), "Guardian cannot be 0"); + require(_weights[i] != 0, "Weight cannot be 0"); + require(guardian[_guardians[i]][msg.sender].weight == 0, "Guardian already enabled"); + guardian[_guardians[i]][msg.sender] = + GuardianStorage({weight: _weights[i], nextGuardian: weightedStorage[msg.sender].firstGuardian}); + weightedStorage[msg.sender].firstGuardian = _guardians[i]; + weightedStorage[msg.sender].totalWeight += _weights[i]; + emit GuardianAdded(_guardians[i], msg.sender, _weights[i]); + } weightedStorage[msg.sender].delay = _delay; weightedStorage[msg.sender].threshold = _threshold; } - function approve(bytes32 _callDataAndNonceHash, address _kernel) external { + function approve(bytes32 _callDataAndNonceHash, address _kernel) external payable { require(guardian[msg.sender][_kernel].weight != 0, "Guardian not enabled"); require(weightedStorage[_kernel].threshold != 0, "Kernel not enabled"); ProposalStorage storage proposal = proposalStatus[_callDataAndNonceHash][_kernel]; @@ -133,7 +152,7 @@ contract WeightedECDSAValidator is EIP712, IKernelValidator { } } - function approveWithSig(bytes32 _callDataAndNonceHash, address _kernel, bytes calldata sigs) external { + function approveWithSig(bytes32 _callDataAndNonceHash, address _kernel, bytes calldata sigs) external payable { uint256 sigCount = sigs.length / 65; require(weightedStorage[_kernel].threshold != 0, "Kernel not enabled"); ProposalStorage storage proposal = proposalStatus[_callDataAndNonceHash][_kernel]; @@ -157,7 +176,7 @@ contract WeightedECDSAValidator is EIP712, IKernelValidator { } } - function veto(bytes32 _callDataAndNonceHash) external { + function veto(bytes32 _callDataAndNonceHash) external payable { ProposalStorage storage proposal = proposalStatus[_callDataAndNonceHash][msg.sender]; require( proposal.status == ProposalStatus.Ongoing || proposal.status == ProposalStatus.Approved, @@ -166,23 +185,24 @@ contract WeightedECDSAValidator is EIP712, IKernelValidator { proposal.status = ProposalStatus.Rejected; } - function validateUserOp(UserOperation calldata userOp, bytes32 userOpHash, uint256) + function validateUserOp(PackedUserOperation calldata userOp, bytes32 userOpHash) external payable - returns (ValidationData validationData) + override + returns (uint256) { bytes32 callDataAndNonceHash = keccak256(abi.encode(userOp.sender, userOp.callData, userOp.nonce)); ProposalStorage storage proposal = proposalStatus[callDataAndNonceHash][msg.sender]; WeightedECDSAValidatorStorage storage strg = weightedStorage[msg.sender]; if (strg.threshold == 0) { - return SIG_VALIDATION_FAILED; + return SIG_VALIDATION_FAILED_UINT; } (uint256 totalWeight, bool passed) = getApproval(msg.sender, callDataAndNonceHash); uint256 threshold = strg.threshold; if (proposal.status == ProposalStatus.Ongoing && !passed) { if (strg.delay != 0) { // if delay > 0, only allow proposal to be approved before execution - return SIG_VALIDATION_FAILED; + return SIG_VALIDATION_FAILED_UINT; } bytes calldata sig = userOp.signature; // parse sig with 65 bytes @@ -222,18 +242,13 @@ contract WeightedECDSAValidator is EIP712, IKernelValidator { return packValidationData(ValidAfter.wrap(0), ValidUntil.wrap(0)); } } else if (proposal.status == ProposalStatus.Approved || passed) { - if (userOp.paymasterAndData.length == 0 || address(bytes20(userOp.paymasterAndData[0:20])) == address(0)) { - address signer = ECDSA.recover(ECDSA.toEthSignedMessageHash(userOpHash), userOp.signature); - if (guardian[signer][msg.sender].weight != 0) { - proposal.status = ProposalStatus.Executed; - return packValidationData(proposal.validAfter, ValidUntil.wrap(0)); - } - } else { + address signer = ECDSA.recover(ECDSA.toEthSignedMessageHash(userOpHash), userOp.signature); + if (guardian[signer][msg.sender].weight != 0) { proposal.status = ProposalStatus.Executed; return packValidationData(proposal.validAfter, ValidUntil.wrap(0)); } } - return SIG_VALIDATION_FAILED; + return SIG_VALIDATION_FAILED_UINT; } function getApproval(address kernel, bytes32 hash) public view returns (uint256 approvals, bool passed) { @@ -247,36 +262,33 @@ contract WeightedECDSAValidator is EIP712, IKernelValidator { approvals += guardian[currentGuardian][kernel].weight; } } - passed = approvals >= strg.threshold; - } - - function validCaller(address, bytes calldata) external view override returns (bool) { - return false; + ProposalStorage storage proposal = proposalStatus[hash][kernel]; + if (proposal.status == ProposalStatus.Rejected) { + passed = false; + } else { + passed = approvals >= strg.threshold; + } } - function validateSignature(bytes32 hash, bytes calldata signature) external view returns (ValidationData) { + function isValidSignatureWithSender(address, bytes32 hash, bytes calldata data) external view returns (bytes4) { WeightedECDSAValidatorStorage storage strg = weightedStorage[msg.sender]; if (strg.threshold == 0) { - return SIG_VALIDATION_FAILED; + return ERC1271_INVALID; } - uint256 sigCount = signature.length / 65; + uint256 sigCount = data.length / 65; if (sigCount == 0) { - return SIG_VALIDATION_FAILED; + return ERC1271_INVALID; } uint256 totalWeight = 0; - address prevSigner = address(uint160(type(uint160).max)); + address signer; for (uint256 i = 0; i < sigCount; i++) { - address signer = ECDSA.recover(hash, signature[i * 65:(i + 1) * 65]); + signer = ECDSA.recover(hash, data[i * 65:(i + 1) * 65]); totalWeight += guardian[signer][msg.sender].weight; if (totalWeight >= strg.threshold) { - return packValidationData(ValidAfter.wrap(0), ValidUntil.wrap(0)); - } - if (signer >= prevSigner) { - return SIG_VALIDATION_FAILED; + return ERC1271_MAGICVALUE; } - prevSigner = signer; } - return SIG_VALIDATION_FAILED; + return ERC1271_INVALID; } } diff --git a/src/validator/modularPermission/IPolicy.sol b/src/validator/modularPermission/IPolicy.sol deleted file mode 100644 index a57b8148..00000000 --- a/src/validator/modularPermission/IPolicy.sol +++ /dev/null @@ -1,23 +0,0 @@ -pragma solidity ^0.8.0; - -import {ValidationData, ValidUntil, ValidAfter, packValidationData} from "src/common/Types.sol"; -import {SIG_VALIDATION_FAILED} from "src/common/Constants.sol"; -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; - -interface IPolicy { - function registerPolicy(address kernel, bytes32 permissionId, bytes calldata policyData) external payable; - function checkUserOpPolicy( - address kernel, - bytes32 permissionId, - UserOperation calldata userOp, - bytes calldata proofAndSig - ) external payable returns (ValidationData); - function validateSignature( - address kernel, - address caller, - bytes32 permissionId, - bytes32 messageHash, - bytes32 rawHash, - bytes calldata signature - ) external view returns (ValidationData); -} diff --git a/src/validator/modularPermission/ISigner.sol b/src/validator/modularPermission/ISigner.sol deleted file mode 100644 index 885cc8ed..00000000 --- a/src/validator/modularPermission/ISigner.sol +++ /dev/null @@ -1,17 +0,0 @@ -pragma solidity ^0.8.0; - -import {ValidationData} from "src/common/Types.sol"; -import {ValidAfter, ValidUntil, packValidationData} from "src/common/Types.sol"; -import {SIG_VALIDATION_FAILED} from "src/common/Constants.sol"; - -interface ISigner { - function registerSigner(address kernel, bytes32 permissionId, bytes calldata signerData) external payable; - function validateUserOp(address kernel, bytes32 permissionId, bytes32 userOpHash, bytes calldata signature) - external - payable - returns (ValidationData); - function validateSignature(address kernel, bytes32 permissionId, bytes32 messageHash, bytes calldata signature) - external - view - returns (ValidationData); -} diff --git a/src/validator/modularPermission/ModularPermissionValidator.sol b/src/validator/modularPermission/ModularPermissionValidator.sol deleted file mode 100644 index 68008b93..00000000 --- a/src/validator/modularPermission/ModularPermissionValidator.sol +++ /dev/null @@ -1,280 +0,0 @@ -pragma solidity ^0.8.0; - -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; -import {ValidationData, ValidAfter, ValidUntil} from "src/common/Types.sol"; -import {SIG_VALIDATION_FAILED} from "src/common/Constants.sol"; -import {IKernelValidator} from "src/interfaces/IKernelValidator.sol"; -import {ISigner} from "./ISigner.sol"; -import {IPolicy} from "./IPolicy.sol"; -import {_intersectValidationData} from "src/utils/KernelHelper.sol"; -import {PolicyConfig, PolicyConfigLib, toFlag, MAX_FLAG} from "./PolicyConfig.sol"; -import "forge-std/console.sol"; - -struct Permission { - uint128 nonce; - bytes12 flag; // flag represents what permission can do - ISigner signer; - PolicyConfig firstPolicy; - ValidAfter validAfter; - ValidUntil validUntil; -} - -struct Nonce { - uint128 lastNonce; - uint128 revoked; -} - -/// @title ModularPermissionValidator -/// @notice Validator that allows to register and revoke permissions -/// @dev modular architecture to allow composable permission system -contract ModularPermissionValidator is IKernelValidator { - mapping(address => bytes32) public priorityPermission; - mapping(bytes32 permissionId => mapping(address kernel => Permission)) public permissions; - mapping(bytes32 permissionId => mapping(PolicyConfig policy => mapping(address kernel => PolicyConfig))) public - nextPolicy; - mapping(address kernel => Nonce) public nonces; - - event PermissionRegistered(address kernel, bytes32 permissionId); - event PermissionRevoked(address kernel, bytes32 permissionId); - event NonceRevoked(address kernel, uint256 nonce); - - function getPermissionId( - bytes12 flag, - ISigner signer, - ValidAfter validAfter, - ValidUntil validUntil, - PolicyConfig[] calldata _policyConfig, - bytes calldata signerData, - bytes[] calldata policyData - ) public pure returns (bytes32) { - return keccak256( - abi.encode( - flag, - signer, - ValidAfter.unwrap(validAfter), - ValidUntil.unwrap(validUntil), - _policyConfig, - signerData, - policyData - ) - ); - } - - function parseData(bytes calldata data) - public - pure - returns ( - uint128 nonce, - bytes12 flag, - ISigner signer, - ValidAfter validAfter, - ValidUntil validUntil, - PolicyConfig[] calldata policies, - bytes calldata signerData, - bytes[] calldata policyData - ) - { - nonce = uint128(bytes16(data[0:16])); - flag = bytes12(data[16:28]); - validAfter = ValidAfter.wrap(uint48(bytes6(data[28:34]))); - validUntil = ValidUntil.wrap(uint48(bytes6(data[34:40]))); - signer = ISigner(address(bytes20(data[40:60]))); - assembly { - let offset := add(data.offset, 60) - policies.offset := add(add(offset, 32), calldataload(offset)) - policies.length := calldataload(sub(policies.offset, 32)) - signerData.offset := add(add(offset, 32), calldataload(add(offset, 32))) - signerData.length := calldataload(sub(signerData.offset, 32)) - policyData.offset := add(add(offset, 32), calldataload(add(offset, 64))) - policyData.length := calldataload(sub(policyData.offset, 32)) - } - } - - function enable(bytes calldata data) external payable { - ( - uint128 nonce, - bytes12 flag, - ISigner signer, - ValidAfter validAfter, - ValidUntil validUntil, - PolicyConfig[] calldata policies, - bytes calldata signerData, - bytes[] calldata policyData - ) = parseData(data); - registerPermission(nonce, flag, signer, validAfter, validUntil, policies, signerData, policyData); - } - - function registerPermission( - uint128 nonce, - bytes12 flag, - ISigner signer, - ValidAfter validAfter, - ValidUntil validUntil, - PolicyConfig[] calldata policy, - bytes calldata signerData, - bytes[] calldata policyData - ) public payable { - require(flag != toFlag(0), "flag should not be empty"); - require( - nonce == nonces[msg.sender].lastNonce || nonce == nonces[msg.sender].lastNonce + 1, "nonce should be next" - ); - nonces[msg.sender].lastNonce++; - bytes32 permissionId = getPermissionId(flag, signer, validAfter, validUntil, policy, signerData, policyData); - if (flag == MAX_FLAG) { - priorityPermission[msg.sender] = permissionId; - } - - bytes12 maxFlag = flag; - for (uint256 i = 0; i < policy.length; i++) { - //TODO make sure address of the policy is sorted - PolicyConfigLib.getAddress(policy[i]).registerPolicy(msg.sender, permissionId, policyData[i]); - // NOTE: flag for policy is inverted version of flag for permission; - bytes12 currentFlag = PolicyConfigLib.getFlags(policy[i]); - // turn off flags that are used, - // meaning that remaining maxFlag will indicate the permissions that are not used on this permission - maxFlag = currentFlag & maxFlag; - } - signer.registerSigner(msg.sender, permissionId, signerData); - - PolicyConfig firstPolicy = policy[0]; // NOTE : policy should not be empty array - require(maxFlag == bytes12(0), "error : permission flag exceeds policy flag"); - permissions[permissionId][msg.sender] = Permission(nonce, flag, signer, firstPolicy, validAfter, validUntil); - for (uint256 i = 1; i < policy.length; i++) { - nextPolicy[permissionId][policy[i - 1]][msg.sender] = policy[i]; - } - emit PermissionRegistered(msg.sender, permissionId); - } - - function disable(bytes calldata data) external payable { - if (data.length == 32) { - revokePermission(bytes32(data)); - } else { - revokePermission(uint128(bytes16(data))); - } - } - - function revokePermission(bytes32 permissionId) public payable { - permissions[permissionId][msg.sender].flag = toFlag(0); // NOTE: making flag == 0 makes it invalid - emit PermissionRevoked(msg.sender, permissionId); - } - - function revokePermission(uint128 nonce) public payable { - nonces[msg.sender].revoked = nonce; - emit NonceRevoked(msg.sender, nonce); - } - - function validateUserOp(UserOperation calldata _userOp, bytes32 _userOpHash, uint256) - external - payable - returns (ValidationData validationData) - { - require(_userOp.sender == msg.sender, "sender must be msg.sender"); - bytes32 permissionId = bytes32(_userOp.signature[0:32]); - if ( - permissions[permissionId][msg.sender].flag & toFlag(1) == toFlag(0) - || nonces[msg.sender].revoked > permissions[permissionId][msg.sender].nonce - ) { - return SIG_VALIDATION_FAILED; - } - Permission memory permission = permissions[permissionId][msg.sender]; - PolicyConfig policy = permission.firstPolicy; - uint256 cursor = 32; - while (address(PolicyConfigLib.getAddress(policy)) != address(0)) { - if (PolicyConfigLib.skipOnValidateUserOp(policy)) { - policy = nextPolicy[permissionId][policy][msg.sender]; - continue; - } - bytes calldata policyData; - if ( - _userOp.signature.length >= cursor + 52 - && address(bytes20(_userOp.signature[cursor:cursor + 20])) - == address(PolicyConfigLib.getAddress(policy)) - ) { - // only when policy address is same as the one in signature - uint256 length = uint256(bytes32(_userOp.signature[cursor + 20:cursor + 52])); - require(_userOp.signature.length >= cursor + 52 + length, "policyData length exceeds signature length"); - policyData = _userOp.signature[cursor + 52:cursor + 52 + length]; // [policyAddress, policyDataLength, policyData] - cursor += 52 + length; - } else { - policyData = _userOp.signature[cursor:cursor]; - } - ValidationData policyValidation = - PolicyConfigLib.getAddress(policy).checkUserOpPolicy(msg.sender, permissionId, _userOp, policyData); - validationData = _intersectValidationData(validationData, policyValidation); - policy = nextPolicy[permissionId][policy][msg.sender]; - } - ValidationData signatureValidation = - permission.signer.validateUserOp(msg.sender, permissionId, _userOpHash, _userOp.signature[cursor:]); - validationData = _intersectValidationData(validationData, signatureValidation); - } - - function validCaller(address caller, bytes calldata data) external view override returns (bool) { - revert("not implemented"); - } - - struct ValidationSigMemory { - address caller; - bytes32 permissionId; - bytes32 rawHash; - uint256 cursor; - PolicyConfig policy; - } - - function validateSignature(bytes32 hash, bytes calldata signature) - external - view - override - returns (ValidationData validationData) - { - ValidationSigMemory memory sigMemory; - sigMemory.permissionId = bytes32(signature[0:32]); - if ( - nonces[msg.sender].revoked > permissions[sigMemory.permissionId][msg.sender].nonce - || permissions[sigMemory.permissionId][msg.sender].flag & toFlag(2) == toFlag(0) - ) { - return SIG_VALIDATION_FAILED; - } - Permission memory permission = permissions[sigMemory.permissionId][msg.sender]; - // signature should be packed with - // (permissionId, [proof || signature]) - // (permissionId, [ (policyAddress) + (policyProof) || signature] - bytes calldata proofAndSignature; //) = abi.decode(signature[32:], (bytes, bytes)); - assembly { - proofAndSignature.offset := add(signature.offset, 32) - proofAndSignature.length := sub(signature.length, 32) - } - - sigMemory.cursor = 0; - sigMemory.policy = permission.firstPolicy; - sigMemory.caller = address(bytes20(msg.data[msg.data.length - 20:])); - sigMemory.rawHash = bytes32(msg.data[msg.data.length - 52:msg.data.length - 20]); - while (address(PolicyConfigLib.getAddress(sigMemory.policy)) != address(0)) { - if (PolicyConfigLib.skipOnValidateSignature(sigMemory.policy)) { - sigMemory.policy = nextPolicy[sigMemory.permissionId][sigMemory.policy][msg.sender]; - continue; - } - bytes calldata policyData; - if ( - address(bytes20(proofAndSignature[sigMemory.cursor:sigMemory.cursor + 20])) - == address(PolicyConfigLib.getAddress(sigMemory.policy)) - ) { - // only when policy address is same as the one in signature - uint256 length = uint256(bytes32(proofAndSignature[sigMemory.cursor + 20:sigMemory.cursor + 52])); - policyData = proofAndSignature[sigMemory.cursor + 52:]; // [policyAddress, policyDataLength, policyData] - sigMemory.cursor += 52 + length; - } else { - policyData = proofAndSignature[sigMemory.cursor:sigMemory.cursor]; - // not move cursor here - } - ValidationData policyValidation = PolicyConfigLib.getAddress(sigMemory.policy).validateSignature( - msg.sender, sigMemory.caller, sigMemory.permissionId, hash, sigMemory.rawHash, policyData - ); - validationData = _intersectValidationData(validationData, policyValidation); - sigMemory.policy = nextPolicy[sigMemory.permissionId][sigMemory.policy][msg.sender]; - } - ValidationData signatureValidation = permission.signer.validateSignature( - msg.sender, sigMemory.permissionId, hash, proofAndSignature[sigMemory.cursor:] - ); - validationData = _intersectValidationData(validationData, signatureValidation); - } -} diff --git a/src/validator/modularPermission/PolicyConfig.sol b/src/validator/modularPermission/PolicyConfig.sol deleted file mode 100644 index 9ac1da26..00000000 --- a/src/validator/modularPermission/PolicyConfig.sol +++ /dev/null @@ -1,67 +0,0 @@ -pragma solidity ^0.8.0; - -import "./IPolicy.sol"; - -type PolicyConfig is bytes32; - -function toFlag(uint256 x) pure returns (bytes12) { - return bytes12(bytes32(x << 160)); -} - -function toPermissionFlag(uint256 x) pure returns (bytes12) { - bytes12 ret = bytes12(bytes32(x << 160)); - assembly { - ret := not(ret) - } - return ret; -} - -bytes12 constant MAX_FLAG = 0xffffffffffffffffffffffff; -// PolicyData is a 32 bytes array that contains the address of the policy -// [flags(12 bytes), address(20 bytes)] -// flags is 96 bits that contains the following information -// from last to first bit -// 1 bit : not for validatUserOp -// 1 bit : not for validateSignature -// 1 bit : not for validateCaller - -library PolicyConfigLib { - function pack(IPolicy addr, bytes12 flag) internal pure returns (PolicyConfig data) { - assembly { - data := or(addr, flag) - } - } - - function getAddress(PolicyConfig data) internal pure returns (IPolicy policy) { - assembly { - policy := and(data, 0xffffffffffffffffffffffffffffffffffffffff) - } - } - - function getFlags(PolicyConfig data) internal pure returns (bytes12 flags) { - assembly { - flags := shr(160, data) - } - } - - function skipOnValidateUserOp(PolicyConfig data) internal pure returns (bool result) { - assembly { - let flags := shr(160, data) - result := and(flags, 0x1) - } - } - - function skipOnValidateSignature(PolicyConfig data) internal pure returns (bool result) { - assembly { - let flags := shr(161, data) - result := and(flags, 0x1) - } - } - - function skipOnValidateCaller(PolicyConfig data) internal pure returns (bool result) { - assembly { - let flags := shr(162, data) - result := and(flags, 0x1) - } - } -} diff --git a/src/validator/modularPermission/mock/MockPolicy.sol b/src/validator/modularPermission/mock/MockPolicy.sol deleted file mode 100644 index 7b3384f2..00000000 --- a/src/validator/modularPermission/mock/MockPolicy.sol +++ /dev/null @@ -1,49 +0,0 @@ -pragma solidity ^0.8.0; - -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; -import {ValidationData, ValidUntil, ValidAfter, packValidationData} from "src/common/Types.sol"; -import {SIG_VALIDATION_FAILED} from "src/common/Constants.sol"; -import {IPolicy} from "../IPolicy.sol"; - -contract MockPolicy is IPolicy { - ValidationData public validationData; - mapping(bytes32 => uint256) public count; - bytes public policyData; - bool public revertOnSignature; - - function mock(uint48 validAfter, uint48 validUntil, bool success, bool revertOnSig) external { - validationData = success - ? packValidationData(ValidAfter.wrap(validAfter), ValidUntil.wrap(validUntil)) - : SIG_VALIDATION_FAILED; - revertOnSignature = revertOnSig; - } - - function registerPolicy(address, bytes32, bytes calldata data) external payable override { - // do nothing - policyData = data; - } - - function checkUserOpPolicy(address, bytes32 permissionId, UserOperation calldata, bytes calldata) - external - payable - override - returns (ValidationData) - { - count[permissionId]++; - return validationData; - } - - function validateSignature( - address kernel, - address caller, - bytes32 permissionId, - bytes32 messageHash, - bytes32 rawHash, - bytes calldata signature - ) external view override returns (ValidationData) { - if (revertOnSignature) { - revert("MockPolicy: signature validation failed"); - } - return validationData; - } -} diff --git a/src/validator/modularPermission/mock/MockRequestor.sol b/src/validator/modularPermission/mock/MockRequestor.sol deleted file mode 100644 index d6b4872a..00000000 --- a/src/validator/modularPermission/mock/MockRequestor.sol +++ /dev/null @@ -1,11 +0,0 @@ -pragma solidity ^0.8.0; - -interface KernelERC1271 { - function isValidSignature(bytes32 hash, bytes calldata signature) external view returns (bytes4); -} - -contract MockRequestor { - function verifySignature(address kernel, bytes32 hash, bytes calldata signature) external payable returns (bool) { - return KernelERC1271(kernel).isValidSignature(hash, signature) == 0x1626ba7e; - } -} diff --git a/src/validator/modularPermission/mock/MockSigner.sol b/src/validator/modularPermission/mock/MockSigner.sol deleted file mode 100644 index f323b8c2..00000000 --- a/src/validator/modularPermission/mock/MockSigner.sol +++ /dev/null @@ -1,42 +0,0 @@ -pragma solidity ^0.8.0; - -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; -import {ValidationData, ValidUntil, ValidAfter, packValidationData} from "src/common/Types.sol"; -import {SIG_VALIDATION_FAILED} from "src/common/Constants.sol"; -import {ISigner} from "../ISigner.sol"; - -contract MockSigner is ISigner { - ValidationData public validationData; - mapping(bytes32 => uint256) public count; - bytes public signerData; - - function mock(uint48 validAfter, uint48 validUntil, bool success) external { - validationData = success - ? packValidationData(ValidAfter.wrap(validAfter), ValidUntil.wrap(validUntil)) - : SIG_VALIDATION_FAILED; - } - - function registerSigner(address, bytes32, bytes calldata data) external payable override { - // do nothing - signerData = data; - } - - function validateUserOp(address, bytes32 permissionId, bytes32, bytes calldata) - external - payable - override - returns (ValidationData) - { - count[permissionId]++; - return validationData; - } - - function validateSignature(address, bytes32, bytes32, bytes calldata) - external - view - override - returns (ValidationData) - { - return validationData; - } -} diff --git a/src/validator/modularPermission/policies/EIP712Policy.sol b/src/validator/modularPermission/policies/EIP712Policy.sol deleted file mode 100644 index f23836ed..00000000 --- a/src/validator/modularPermission/policies/EIP712Policy.sol +++ /dev/null @@ -1,131 +0,0 @@ -pragma solidity ^0.8.0; - -import "../IPolicy.sol"; - -// does not support nested parameters, -// only allow checking, -// 1. domain separator -// 2. typeHash -// 3. encodeData => only allows 32 bytes of parameter in encodeData, if you are dealing with dynamic value, you need to pass in the keccak256 hash of the value -struct EncodeDataRule { - uint32 index; - bytes32 value; - ParamRule rule; -} - -struct AllowedEIP712Params { - bytes32 domainSeparator; - bytes32 typeHash; - EncodeDataRule encodeDataRule; -} - -enum ParamRule { - NA, - Equal, - NotEqual, - GreaterThan, - GreaterThanOrEqual, - LessThan, - LessThanOrEqual -} - -contract EIP712Policy is IPolicy { - mapping( - bytes32 permissionId => mapping(address permissionValidator => mapping(address kernel => AllowedEIP712Params)) - ) public eip712Param; - mapping( - bytes32 permissionId - => mapping( - address permissionValidator => mapping(bytes32 encodeData => mapping(address kernel => EncodeDataRule)) - ) - ) public nextEncodeData; - - function registerPolicy(address _kernel, bytes32 _permissionId, bytes calldata _data) external payable override { - bytes32 domainSeparator = bytes32(_data[0:32]); - bytes32 typeHash = bytes32(_data[32:64]); - uint32 index = uint32(bytes4(_data[64:68])); - ParamRule rule = ParamRule(uint8(bytes1(_data[68]))); - bytes32 encodeData = bytes32(_data[69:101]); - uint256 cursor = 101; - EncodeDataRule memory encodeDataRule = EncodeDataRule(index, encodeData, rule); - eip712Param[_permissionId][msg.sender][_kernel] = AllowedEIP712Params(domainSeparator, typeHash, encodeDataRule); - while (cursor <= _data.length - 37) { - index = uint32(bytes4(_data[cursor:cursor + 4])); - rule = ParamRule(uint8(bytes1(_data[cursor + 4]))); - bytes32 nextEncodeParam = bytes32(_data[cursor + 5:cursor + 37]); - nextEncodeData[_permissionId][msg.sender][encodeData][_kernel] = - EncodeDataRule(index, nextEncodeParam, rule); - cursor += 37; - } - } - - function checkUserOpPolicy( - address _kernel, - bytes32 _permissionId, - UserOperation calldata _userOp, - bytes calldata _policyProof - ) external payable override returns (ValidationData) { - // do nothing on userOp validation - return ValidationData.wrap(0); - } - - function validateSignature( - address _kernel, - address _caller, - bytes32 _permissionId, - bytes32 _messageHash, - bytes32 _rawHash, - bytes calldata _signature - ) external view override returns (ValidationData) { - AllowedEIP712Params memory allowedEIP712Params = eip712Param[_permissionId][msg.sender][_kernel]; - bytes32[] memory encodedData = new bytes32[](uint32(bytes4(_signature[64:68]))); - uint256 cursor = 68; - for (uint32 i = 0; i < encodedData.length; i++) { - encodedData[i] = bytes32(_signature[cursor:cursor + 32]); - cursor += 32; - } - { - bytes32 domainSeparator = bytes32(_signature[0:32]); - bytes32 typeHash = bytes32(_signature[32:64]); - if ( - allowedEIP712Params.domainSeparator | domainSeparator != domainSeparator - || allowedEIP712Params.typeHash | typeHash != typeHash - ) { - return SIG_VALIDATION_FAILED; - } - bytes32 structHash = keccak256(abi.encodePacked(typeHash, encodedData)); - bytes32 digest = keccak256(abi.encodePacked("\x19\x01", domainSeparator, structHash)); - require(digest == _rawHash, "digest != _rawHash"); - } - EncodeDataRule memory encodeDataRule = allowedEIP712Params.encodeDataRule; - while (encodeDataRule.rule != ParamRule.NA) { - if (encodeDataRule.rule == ParamRule.Equal) { - if (encodedData[encodeDataRule.index] != encodeDataRule.value) { - return SIG_VALIDATION_FAILED; - } - } else if (encodeDataRule.rule == ParamRule.NotEqual) { - if (encodedData[encodeDataRule.index] == encodeDataRule.value) { - return SIG_VALIDATION_FAILED; - } - } else if (encodeDataRule.rule == ParamRule.GreaterThan) { - if (encodedData[encodeDataRule.index] <= encodeDataRule.value) { - return SIG_VALIDATION_FAILED; - } - } else if (encodeDataRule.rule == ParamRule.GreaterThanOrEqual) { - if (encodedData[encodeDataRule.index] < encodeDataRule.value) { - return SIG_VALIDATION_FAILED; - } - } else if (encodeDataRule.rule == ParamRule.LessThan) { - if (encodedData[encodeDataRule.index] >= encodeDataRule.value) { - return SIG_VALIDATION_FAILED; - } - } else if (encodeDataRule.rule == ParamRule.LessThanOrEqual) { - if (encodedData[encodeDataRule.index] > encodeDataRule.value) { - return SIG_VALIDATION_FAILED; - } - } - encodeDataRule = nextEncodeData[_permissionId][_caller][encodeDataRule.value][_kernel]; - } - return ValidationData.wrap(0); - } -} diff --git a/src/validator/modularPermission/policies/ExecutePolicy.sol b/src/validator/modularPermission/policies/ExecutePolicy.sol deleted file mode 100644 index 4ca7f917..00000000 --- a/src/validator/modularPermission/policies/ExecutePolicy.sol +++ /dev/null @@ -1,50 +0,0 @@ -pragma solidity ^0.8.0; - -import "../IPolicy.sol"; - -struct ExecutionConfig { - uint48 interval; - uint48 count; - ValidAfter startAt; -} - -contract ExecutePolicy is IPolicy { - mapping(address permissionValidator => mapping(bytes32 permissionId => mapping(address kernel => ExecutionConfig))) - public executionConfigs; - - function registerPolicy(address kernel, bytes32 permissionId, bytes calldata policyData) - external - payable - override - { - uint48 delay = uint48(bytes6(policyData[0:6])); - uint48 count = uint48(bytes6(policyData[6:12])); - uint48 startAt = uint48(bytes6(policyData[12:18])); - executionConfigs[msg.sender][permissionId][kernel] = ExecutionConfig(delay, count, ValidAfter.wrap(startAt)); - } - - function checkUserOpPolicy(address kernel, bytes32 permissionId, UserOperation calldata, bytes calldata) - external - payable - override - returns (ValidationData) - { - ExecutionConfig memory config = executionConfigs[msg.sender][permissionId][kernel]; - if (config.count == 0) { - return SIG_VALIDATION_FAILED; - } - executionConfigs[msg.sender][permissionId][kernel].count = config.count - 1; - executionConfigs[msg.sender][permissionId][kernel].startAt = - ValidAfter.wrap(ValidAfter.unwrap(config.startAt) + config.interval); - return packValidationData(config.startAt, ValidUntil.wrap(0)); - } - - function validateSignature(address, address, bytes32, bytes32, bytes32, bytes calldata) - external - view - override - returns (ValidationData) - { - return ValidationData.wrap(0); - } -} diff --git a/src/validator/modularPermission/policies/GasPolicy.sol b/src/validator/modularPermission/policies/GasPolicy.sol deleted file mode 100644 index 8d0cbeaa..00000000 --- a/src/validator/modularPermission/policies/GasPolicy.sol +++ /dev/null @@ -1,58 +0,0 @@ -pragma solidity ^0.8.0; - -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; -import {ValidationData, ValidUntil, ValidAfter, packValidationData} from "src/common/Types.sol"; -import {SIG_VALIDATION_FAILED} from "src/common/Constants.sol"; -import {IPolicy} from "../IPolicy.sol"; - -contract GasPolicy is IPolicy { - struct GasPolicyConfig { - uint128 allowed; - bool enforcePaymaster; - address allowedPaymaster; - } - - mapping(address permissionValidator => mapping(bytes32 permissionId => mapping(address kernel => GasPolicyConfig))) - public gasPolicyConfig; - - function registerPolicy(address kernel, bytes32 permissionId, bytes calldata data) external payable override { - (uint128 allowed, bool enforcePaymaster, address allowedPaymaster) = abi.decode(data, (uint128, bool, address)); - gasPolicyConfig[msg.sender][permissionId][kernel] = GasPolicyConfig(allowed, enforcePaymaster, allowedPaymaster); - } - - function checkUserOpPolicy(address kernel, bytes32 permissionId, UserOperation calldata userOp, bytes calldata) - external - payable - override - returns (ValidationData) - { - uint128 maxAmount = uint128( - (userOp.preVerificationGas + userOp.verificationGasLimit + userOp.callGasLimit) * userOp.maxFeePerGas - ); - if (gasPolicyConfig[msg.sender][permissionId][kernel].enforcePaymaster) { - if ( - gasPolicyConfig[msg.sender][permissionId][kernel].allowedPaymaster != address(0) - && address(bytes20(userOp.paymasterAndData[0:20])) - != gasPolicyConfig[msg.sender][permissionId][kernel].allowedPaymaster - ) { - return SIG_VALIDATION_FAILED; - } - } - if (maxAmount > gasPolicyConfig[msg.sender][permissionId][kernel].allowed) { - return SIG_VALIDATION_FAILED; - } - gasPolicyConfig[msg.sender][permissionId][kernel].allowed -= maxAmount; - return ValidationData.wrap(0); - } - - function validateSignature( - address kernel, - address caller, - bytes32 permissionId, - bytes32 messageHash, - bytes32 rawHash, - bytes calldata signature - ) external view override returns (ValidationData) { - return ValidationData.wrap(0); - } -} diff --git a/src/validator/modularPermission/policies/MerklePolicy.sol b/src/validator/modularPermission/policies/MerklePolicy.sol deleted file mode 100644 index 796714a6..00000000 --- a/src/validator/modularPermission/policies/MerklePolicy.sol +++ /dev/null @@ -1,180 +0,0 @@ -pragma solidity ^0.8.0; - -import "../IPolicy.sol"; -import {Kernel} from "../../../Kernel.sol"; -import {ParamCondition, Operation} from "../../../common/Enums.sol"; -import {Call} from "../../../common/Structs.sol"; -import {MerkleProofLib} from "solady/utils/MerkleProofLib.sol"; - -struct Permission { - address target; - bytes4 sig; - uint256 valueLimit; - ParamRule[] rules; - Operation operation; -} - -struct ParamRule { - uint256 offset; - ParamCondition condition; - bytes32 param; -} - -contract MerklePolicy is IPolicy { - error MerklePolicyError(uint256 code); // todo: should policy revert instead of returning SIG_VALIDATION_FAILED? - - mapping(address permissionValidator => mapping(bytes32 => mapping(address => bytes32))) public merkleRoot; - - function registerPolicy(address kernel, bytes32 permissionId, bytes calldata policyData) external payable { - bytes32 root = bytes32(policyData[0:32]); - merkleRoot[msg.sender][permissionId][kernel] = root; - } - - function checkUserOpPolicy( - address kernel, - bytes32 permissionId, - UserOperation calldata userOp, - bytes calldata proof - ) external payable returns (ValidationData) { - bytes calldata callData = userOp.callData; - bytes32 root = merkleRoot[msg.sender][permissionId][kernel]; - bytes4 sig = bytes4(callData[0:4]); - if (sig == Kernel.execute.selector || sig == Kernel.executeDelegateCall.selector) { - (Permission calldata permission, bytes32[] calldata merkleProof) = _getPermission(proof); - bool verifyFailed = _verifyParam(root, callData, permission, merkleProof); - if (verifyFailed) { - revert MerklePolicyError(1); // merkle proof verification failed - } - return ValidationData.wrap(0); - } else if (sig == Kernel.executeBatch.selector) { - Permission[] calldata permissions = _getPermissions(proof); - bytes32[][] calldata merkleProof = _getProofs(proof); - bool verifyFailed = _verifyParams(root, callData, permissions, merkleProof); - if (verifyFailed) { - revert MerklePolicyError(1); // merkle proof verification failed - } - return ValidationData.wrap(0); - } else { - revert MerklePolicyError(0); // unknown selector - } - } - - function _verifyParams( - bytes32 root, - bytes calldata callData, - Permission[] calldata _permissions, - bytes32[][] calldata _merkleProof - ) internal pure returns (bool verifyFailed) { - Call[] calldata calls; - assembly { - calls.offset := add(add(callData.offset, 0x24), calldataload(add(callData.offset, 4))) - calls.length := calldataload(add(add(callData.offset, 4), calldataload(add(callData.offset, 4)))) - } - uint256 i = 0; - for (i = 0; i < calls.length; i++) { - Call calldata call = calls[i]; - Permission calldata permission = _permissions[i]; - require( - permission.target == address(0) || call.to == permission.target, "SessionKeyValidator: target mismatch" - ); - require(uint256(bytes32(call.value)) <= permission.valueLimit, "SessionKeyValidator: value limit exceeded"); - require(verifyPermission(call.data, permission), "SessionKeyValidator: permission verification failed"); - if (!MerkleProofLib.verify(_merkleProof[i], root, keccak256(abi.encode(permission)))) { - return true; - } - } - } - - // to parse batch execute permissions - function _getPermissions(bytes calldata _sig) internal pure returns (Permission[] calldata permissions) { - assembly { - permissions.offset := add(add(_sig.offset, 0x20), calldataload(_sig.offset)) - permissions.length := calldataload(add(_sig.offset, calldataload(_sig.offset))) - } - } - - function _getProofs(bytes calldata _sig) internal pure returns (bytes32[][] calldata proofs) { - assembly { - proofs.length := calldataload(add(_sig.offset, calldataload(add(_sig.offset, 0x20)))) - proofs.offset := add(add(_sig.offset, 0x20), calldataload(add(_sig.offset, 0x20))) - } - } - - // to parse single execute permission - function _getPermission(bytes calldata _sig) - internal - pure - returns (Permission calldata permission, bytes32[] calldata merkleProof) - { - assembly { - permission := add(_sig.offset, calldataload(_sig.offset)) - merkleProof.length := calldataload(add(_sig.offset, calldataload(add(_sig.offset, 0x20)))) - merkleProof.offset := add(add(_sig.offset, 0x20), calldataload(add(_sig.offset, 0x20))) - } - } - - function _verifyParam( - bytes32 root, - bytes calldata callData, - Permission calldata _permission, - bytes32[] calldata _merkleProof - ) internal pure returns (bool verifyFailed) { - bool isExecute = bytes4(callData[0:4]) == Kernel.execute.selector; - require( - _permission.target == address(0) || address(bytes20(callData[16:36])) == _permission.target, - "SessionKeyValidator: target mismatch" - ); - if (isExecute) { - require( - uint256(bytes32(callData[36:68])) <= _permission.valueLimit, "SessionKeyValidator: value limit exceeded" - ); - } else { - require(_permission.operation == Operation.DelegateCall, "SessionKeyValidator: operation mismatch"); - } - bytes calldata data; - uint8 dataParamOffset = isExecute ? 0x44 : 0x24; - assembly { - let dataOffset := add(add(callData.offset, 0x04), calldataload(add(callData.offset, dataParamOffset))) - let length := calldataload(dataOffset) - data.offset := add(dataOffset, 32) - data.length := length - } - require(verifyPermission(data, _permission), "SessionKeyValidator: permission verification failed"); - if (!MerkleProofLib.verify(_merkleProof, root, keccak256(abi.encode(_permission)))) { - return true; - } - } - - function verifyPermission(bytes calldata data, Permission calldata permission) internal pure returns (bool) { - if (bytes4(data[0:4]) != permission.sig) return false; - for (uint256 i = 0; i < permission.rules.length; i++) { - ParamRule calldata rule = permission.rules[i]; - bytes32 param = bytes32(data[4 + rule.offset:4 + rule.offset + 32]); - if (rule.condition == ParamCondition.EQUAL && param != rule.param) { - return false; - } else if (rule.condition == ParamCondition.GREATER_THAN && param <= rule.param) { - return false; - } else if (rule.condition == ParamCondition.LESS_THAN && param >= rule.param) { - return false; - } else if (rule.condition == ParamCondition.GREATER_THAN_OR_EQUAL && param < rule.param) { - return false; - } else if (rule.condition == ParamCondition.LESS_THAN_OR_EQUAL && param > rule.param) { - return false; - } else if (rule.condition == ParamCondition.NOT_EQUAL && param == rule.param) { - return false; - } - } - return true; - } - - function validateSignature( - address kernel, - address caller, - bytes32 permissionId, - bytes32 messageHash, - bytes32 rawHash, - bytes calldata signature - ) external view returns (ValidationData) { - return ValidationData.wrap(0); - } -} diff --git a/src/validator/modularPermission/policies/SignaturePolicy.sol b/src/validator/modularPermission/policies/SignaturePolicy.sol deleted file mode 100644 index c4f1b16c..00000000 --- a/src/validator/modularPermission/policies/SignaturePolicy.sol +++ /dev/null @@ -1,45 +0,0 @@ -pragma solidity ^0.8.0; - -import "../IPolicy.sol"; - -contract SignaturePolicy is IPolicy { - mapping( - address permissionValidator - => mapping(bytes32 permissionId => mapping(address requestor => mapping(address kernel => bool))) - ) public allowedRequestor; - - function registerPolicy(address kernel, bytes32 permissionId, bytes calldata policyData) external payable { - address[] memory callers = abi.decode(policyData, (address[])); - for (uint256 i = 0; i < callers.length; i++) { - if (callers[i] == address(0)) { - allowedRequestor[msg.sender][permissionId][kernel][kernel] = true; - } else { - allowedRequestor[msg.sender][permissionId][callers[i]][kernel] = true; - } - } - } - - function checkUserOpPolicy( - address kernel, - bytes32 permissionId, - UserOperation calldata userOp, - bytes calldata policyProof - ) external payable override returns (ValidationData) { - // do nothing on userOp validation - return ValidationData.wrap(0); - } - - function validateSignature( - address kernel, - address caller, - bytes32 permissionId, - bytes32 messageHash, - bytes32 rawHash, - bytes calldata signature - ) external view override returns (ValidationData) { - if (allowedRequestor[msg.sender][permissionId][caller][kernel]) { - return ValidationData.wrap(0); - } - return SIG_VALIDATION_FAILED; - } -} diff --git a/src/validator/modularPermission/policies/SudoPolicy.sol b/src/validator/modularPermission/policies/SudoPolicy.sol deleted file mode 100644 index f3125de6..00000000 --- a/src/validator/modularPermission/policies/SudoPolicy.sol +++ /dev/null @@ -1,29 +0,0 @@ -pragma solidity ^0.8.0; - -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; -import {ValidationData} from "src/common/Types.sol"; -import {IPolicy} from "../IPolicy.sol"; - -contract SudoPolicy is IPolicy { - function registerPolicy(address kernel, bytes32 permissionId, bytes calldata data) external payable override {} - - function checkUserOpPolicy(address kernel, bytes32 permissionId, UserOperation calldata userOp, bytes calldata) - external - payable - override - returns (ValidationData) - { - return ValidationData.wrap(0); - } - - function validateSignature( - address kernel, - address caller, - bytes32 permissionId, - bytes32 messageHash, - bytes32 rawHash, - bytes calldata signature - ) external view override returns (ValidationData) { - return ValidationData.wrap(0); - } -} diff --git a/src/validator/modularPermission/signers/ECDSASigner.sol b/src/validator/modularPermission/signers/ECDSASigner.sol deleted file mode 100644 index f617b9d8..00000000 --- a/src/validator/modularPermission/signers/ECDSASigner.sol +++ /dev/null @@ -1,52 +0,0 @@ -pragma solidity ^0.8.0; - -import {ECDSA} from "solady/utils/ECDSA.sol"; -import {ISigner} from "../ISigner.sol"; -import {ValidationData} from "../../../common/Types.sol"; -import {SIG_VALIDATION_FAILED} from "../../../common/Constants.sol"; - -contract ECDSASigner is ISigner { - using ECDSA for bytes32; - - mapping(address caller => mapping(bytes32 permissionId => mapping(address kernel => address))) public signer; - - function registerSigner(address kernel, bytes32 permissionId, bytes calldata data) external payable override { - require(signer[msg.sender][permissionId][kernel] == address(0), "ECDSASigner: kernel already registered"); - require(data.length == 20, "ECDSASigner: invalid signer address"); - address signerAddress = address(bytes20(data[0:20])); - signer[msg.sender][permissionId][kernel] = signerAddress; - } - - function validateUserOp(address kernel, bytes32 permissionId, bytes32 userOpHash, bytes calldata signature) - external - payable - override - returns (ValidationData) - { - require(signer[msg.sender][permissionId][kernel] != address(0), "ECDSASigner: kernel not registered"); - address recovered = ECDSA.toEthSignedMessageHash(userOpHash).recover(signature); - if (recovered == signer[msg.sender][permissionId][kernel]) { - return ValidationData.wrap(0); - } - return SIG_VALIDATION_FAILED; - } - - function validateSignature(address kernel, bytes32 permissionId, bytes32 messageHash, bytes calldata signature) - external - view - override - returns (ValidationData) - { - address signerAddress = signer[msg.sender][permissionId][kernel]; - require(signerAddress != address(0), "ECDSASigner: kernel not registered"); - if (messageHash.recover(signature) == signerAddress) { - return ValidationData.wrap(0); - } - bytes32 ethHash = ECDSA.toEthSignedMessageHash(messageHash); - address recovered = ethHash.recover(signature); - if (recovered == signerAddress) { - return ValidationData.wrap(0); - } - return SIG_VALIDATION_FAILED; - } -} diff --git a/src/validator/modularPermission/signers/WebAuthnSigner.sol b/src/validator/modularPermission/signers/WebAuthnSigner.sol deleted file mode 100644 index 011088fe..00000000 --- a/src/validator/modularPermission/signers/WebAuthnSigner.sol +++ /dev/null @@ -1,82 +0,0 @@ -pragma solidity ^0.8.0; - -import {WebAuthn} from "p256-verifier/WebAuthn.sol"; -import {ISigner} from "../ISigner.sol"; -import {ValidationData} from "../../../common/Types.sol"; -import {SIG_VALIDATION_FAILED} from "../../../common/Constants.sol"; - -struct WebAuthnValidatorData { - uint256 x; - uint256 y; -} - -contract WebAuthnSigner is ISigner { - mapping(address caller => mapping(bytes32 permissionId => mapping(address kernel => WebAuthnValidatorData))) public - webAuthnValidatorStorage; - - function registerSigner(address kernel, bytes32 permissionId, bytes calldata data) external payable override { - WebAuthnValidatorData memory pubKey = abi.decode(data, (WebAuthnValidatorData)); - require( - webAuthnValidatorStorage[msg.sender][permissionId][kernel].x == 0 - && webAuthnValidatorStorage[msg.sender][permissionId][kernel].y == 0, - "WebAuthnSigner: kernel already registered" - ); - require(pubKey.x != 0 && pubKey.y != 0, "WebAuthnSigner: invalid public key"); - webAuthnValidatorStorage[msg.sender][permissionId][kernel] = pubKey; - } - - function validateUserOp(address kernel, bytes32 permissionId, bytes32 userOpHash, bytes calldata signature) - external - payable - override - returns (ValidationData) - { - return _verifySignature(kernel, permissionId, userOpHash, signature); - } - - function validateSignature(address kernel, bytes32 permissionId, bytes32 messageHash, bytes calldata signature) - external - view - override - returns (ValidationData) - { - return _verifySignature(kernel, permissionId, messageHash, signature); - } - - function _verifySignature(address sender, bytes32 permissionId, bytes32 hash, bytes calldata signature) - private - view - returns (ValidationData) - { - ( - bytes memory authenticatorData, - string memory clientDataJSON, - uint256 challengeLocation, - uint256 responseTypeLocation, - uint256 r, - uint256 s - ) = abi.decode(signature, (bytes, string, uint256, uint256, uint256, uint256)); - - WebAuthnValidatorData memory pubKey = webAuthnValidatorStorage[msg.sender][permissionId][sender]; - require(pubKey.x != 0 && pubKey.y != 0, "WebAuthnSigner: kernel not registered"); - - bool isValid = WebAuthn.verifySignature( - abi.encodePacked(hash), - authenticatorData, - true, // TODO: check if this needs to be true always - clientDataJSON, - challengeLocation, - responseTypeLocation, - r, - s, - pubKey.x, - pubKey.y - ); - - if (isValid) { - return ValidationData.wrap(0); - } - - return SIG_VALIDATION_FAILED; - } -} diff --git a/src/validator/webauthn/WebAuthnFclValidator.sol b/src/validator/webauthn/WebAuthnFclValidator.sol deleted file mode 100644 index fbbc41ed..00000000 --- a/src/validator/webauthn/WebAuthnFclValidator.sol +++ /dev/null @@ -1,143 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {UserOperation} from "I4337/interfaces/UserOperation.sol"; -import {ECDSA} from "solady/utils/ECDSA.sol"; -import {IKernelValidator} from "../../interfaces/IKernelValidator.sol"; -import {ValidationData} from "../../common/Types.sol"; -import {SIG_VALIDATION_FAILED} from "../../common/Constants.sol"; -import {WebAuthnFclVerifier} from "./WebAuthnFclVerifier.sol"; - -/// @dev Storage layout for a kernel in the WebAuthnValidator contract. -struct WebAuthnFclValidatorStorage { - /// @dev The `x` coord of the secp256r1 public key used to sign the user operation. - uint256 x; - /// @dev The `y` coord of the secp256r1 public key used to sign the user operation. - uint256 y; -} - -/// @author @KONFeature -/// @title WebAuthnFclValidator -/// @notice Kernel validator used to validated user operations via WebAuthn signature (using P256 under the hood) -/// @notice Using the awesome FreshCryptoLib: https://github.com/rdubois-crypto/FreshCryptoLib/ -/// @notice Inspired by the cometh Gnosis Safe signer: https://github.com/cometh-game/p256-signer -contract WebAuthnFclValidator is IKernelValidator { - /// @dev Event emitted when the public key signing the WebAuthN user operation is changed for a given `kernel`. - event WebAuthnPublicKeyChanged(address indexed kernel, uint256 x, uint256 y); - - /// @dev Mapping of kernel address to each webAuthn specific storage - mapping(address kernel => WebAuthnFclValidatorStorage webAuthnStorage) private webAuthnValidatorStorage; - - /// @dev The address of the on-chain p256 verifier contract (will be used if the user want that instead of the pre-compiled one, that way this validator can work on every chain out of the box while rip7212 is slowly being implemented everywhere) - address private immutable P256_VERIFIER; - - /// @dev Simple constructor, setting the P256 verifier address - constructor(address _p256Verifier) { - P256_VERIFIER = _p256Verifier; - } - - /// @dev Disable this validator for a given `kernel` (msg.sender) - function disable(bytes calldata) external payable override { - delete webAuthnValidatorStorage[msg.sender]; - } - - /// @dev Enable this validator for a given `kernel` (msg.sender) - function enable(bytes calldata _data) external payable override { - // Extract the x & y coordinates of the public key from the `_data` bytes - (uint256 x, uint256 y) = abi.decode(_data, (uint256, uint256)); - // Update the pub key data - WebAuthnFclValidatorStorage storage kernelValidatorStorage = webAuthnValidatorStorage[msg.sender]; - kernelValidatorStorage.x = x; - kernelValidatorStorage.y = y; - // Emit the update event - emit WebAuthnPublicKeyChanged(msg.sender, x, y); - } - - /// @dev Validate a `_userOp` using a WebAuthn Signature for the kernel account who is the `_userOp` sender - function validateUserOp(UserOperation calldata _userOp, bytes32 _userOpHash, uint256) - external - payable - override - returns (ValidationData validationData) - { - WebAuthnFclValidatorStorage memory kernelValidatorStorage = webAuthnValidatorStorage[_userOp.sender]; - - // Perform a check against the direct userOpHash, if ok consider the user op as validated - if (_checkSignature(kernelValidatorStorage, _userOpHash, _userOp.signature)) { - return ValidationData.wrap(0); - } - - return SIG_VALIDATION_FAILED; - } - - /// @dev Validate a `_signature` of the `_hash` ofor the given `kernel` (msg.sender) - function validateSignature(bytes32 _hash, bytes calldata _signature) - public - view - override - returns (ValidationData) - { - WebAuthnFclValidatorStorage memory kernelValidatorStorage = webAuthnValidatorStorage[msg.sender]; - - // Check the validity againt the hash directly - if (_checkSignature(kernelValidatorStorage, _hash, _signature)) { - return ValidationData.wrap(0); - } - - // Otherwise, all good - return SIG_VALIDATION_FAILED; - } - - /// @notice Validates the given `_signature` againt the `_hash` for the given `kernel` (msg.sender) - /// @param _kernelValidatorStorage The kernel storage replication (helping us to fetch the X & Y points of the public key) - /// @param _hash The hash signed - /// @param _signature The signature - function _checkSignature( - WebAuthnFclValidatorStorage memory _kernelValidatorStorage, - bytes32 _hash, - bytes calldata _signature - ) private view returns (bool isValid) { - // Extract the first byte of the signature to check - return WebAuthnFclVerifier._verifyWebAuthNSignature( - P256_VERIFIER, _hash, _signature, _kernelValidatorStorage.x, _kernelValidatorStorage.y - ); - } - - /// @dev Check if the caller is a valid signer, this don't apply to the WebAuthN validator, since it's using a public key - function validCaller(address, bytes calldata) external pure override returns (bool) { - revert NotImplemented(); - } - - /* -------------------------------------------------------------------------- */ - /* Public view methods */ - /* -------------------------------------------------------------------------- */ - - /// @dev Get the owner of a given `kernel` - function getPublicKey(address _kernel) public view returns (uint256 x, uint256 y) { - // Compute the storage slot - WebAuthnFclValidatorStorage storage kernelValidatorStorage = webAuthnValidatorStorage[_kernel]; - - // Access it for x and y - x = kernelValidatorStorage.x; - y = kernelValidatorStorage.y; - } - - /// @dev Check if the pre-compiled p256 verifier is available on this chain - function isPreCompiledP256Available() public view returns (bool) { - // Test signature data, from https://gist.github.com/ulerdogan/8f1714895e23a54147fc529ea30517eb - bytes memory testSignatureData = - hex"4cee90eb86eaa050036147a12d49004b6b9c72bd725d39d4785011fe190f0b4da73bd4903f0ce3b639bbbf6e8e80d16931ff4bcf5993d58468e8fb19086e8cac36dbcd03009df8c59286b162af3bd7fcc0450c9aa81be5d10d312af6c66b1d604aebd3099c618202fcfe16ae7770b0c49ab5eadf74b754204a3bb6060e44eff37618b065f9832de4ca6ca971a7a1adc826d0f7c00181a5fb2ddf79ae00b4e10e"; - - // Perform the static call - (bool success, bytes memory data) = WebAuthnFclVerifier.PRECOMPILED_P256_VERIFIER.staticcall(testSignatureData); - if (!success || data.length == 0) { - return false; - } - - // Decode the result - uint256 result = abi.decode(data, (uint256)); - - // Check it's 1 (valid signature) - return result == uint256(1); - } -} diff --git a/src/validator/webauthn/WebAuthnFclVerifier.sol b/src/validator/webauthn/WebAuthnFclVerifier.sol deleted file mode 100644 index 02d9aaf1..00000000 --- a/src/validator/webauthn/WebAuthnFclVerifier.sol +++ /dev/null @@ -1,152 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {Base64} from "solady/utils/Base64.sol"; - -/// @title WebAuthnFclVerifier -/// @author rdubois-crypto -/// @author obatirou -/// @author KONFeature -/// @notice A library used to format webauthn stuff into verifiable p256 messages msg -/// From https://github.com/cometh-hq/p256-signer/blob/09319213276da69aad6d96fa75cd339726f78bb9/contracts/P256Signer.sol -/// And https://github.com/rdubois-crypto/FreshCryptoLib/blob/master/solidity/src/FCL_Webauthn.sol -library WebAuthnFclVerifier { - /// @dev Error thrown when the webauthn data is invalid - error InvalidWebAuthNData(); - - /// @dev 'bytes4(keccak256("InvalidWebAuthNData()"))' - uint256 private constant _INVALID_WEBAUTHN_DATA_SELECTOR = 0x81177746; - - /// @dev the data flag mask we will use to verify the signature - /// @dev Always 0x01 for user presence flag -> https://www.w3.org/TR/webauthn-2/#concept-user-present - bytes1 private constant AUTHENTICATOR_DATA_FLAG_MASK = 0x01; - - /// @dev The address of the pre-compiled p256 verifier contract (following RIP-7212) - address internal constant PRECOMPILED_P256_VERIFIER = address(0x100); - - /// @dev layout of a signature (used to extract the reauired payload from the initial calldata) - struct FclSignatureLayout { - bool useOnChainP256Verifier; - bytes authenticatorData; - bytes clientData; - uint256 challengeOffset; - uint256[2] rs; - } - - /// @dev Format the webauthn challenge into a p256 message - /// @dev return the raw message that has been signed by the user on the p256 curve - /// @dev Logic from https://github.com/rdubois-crypto/FreshCryptoLib/blob/master/solidity/src/FCL_Webauthn.sol - /// @param _hash The hash that has been signed via WebAuthN - /// @param _signature The signature that has been provided with the userOp - /// @return p256Message The message that has been signed on the p256 curve - function _formatWebAuthNChallenge(bytes32 _hash, FclSignatureLayout calldata _signature) - internal - pure - returns (bytes32 p256Message) - { - // Extract a few calldata pointer we will use to format / verify our msg - bytes calldata authenticatorData = _signature.authenticatorData; - bytes calldata clientData = _signature.clientData; - uint256 challengeOffset = _signature.challengeOffset; - - // If the challenge offset is uint256 max, it's mean that we are in the case of a dummy sig, so we can skip the check and just return the hash - if (challengeOffset == type(uint256).max) { - return _hash; - } - - // Otherwise, perform the complete format and checks of the data - { - // Let the caller check if User Presence (0x01) or User Verification (0x04) are set - if ((authenticatorData[32] & AUTHENTICATOR_DATA_FLAG_MASK) != AUTHENTICATOR_DATA_FLAG_MASK) { - revert InvalidWebAuthNData(); - } - // Verify that clientData commits to the expected client challenge - // Use the Base64Url encoding which omits padding characters to match WebAuthn Specification - bytes memory challengeEncoded = bytes(Base64.encode(abi.encodePacked(_hash), true, true)); - - // The part that will old the challenge extracted from the clientData - bytes memory challengeExtracted = new bytes(challengeEncoded.length); - - assembly { - // Extract the challenge from the clientData - calldatacopy( - add(challengeExtracted, 32), add(clientData.offset, challengeOffset), mload(challengeExtracted) - ) - - // Check that the challenge extracted from the clientData is the same as the one provided in the userOp - if iszero( - eq( - // Hash of the challenge exracted from the `clientData` - keccak256(add(challengeExtracted, 32), mload(challengeExtracted)), - // Hash of the provided challenge, encoded in Base64Url (to match the clientData encoding) - keccak256(add(challengeEncoded, 32), mload(challengeEncoded)) - ) - ) { - mstore(0x00, _INVALID_WEBAUTHN_DATA_SELECTOR) - revert(0x1c, 0x04) - } - } - } - - // Verify the signature over sha256(authenticatorData || sha256(clientData)) - bytes memory verifyData = new bytes(authenticatorData.length + 32); - - assembly { - // Add the authenticator data at the start of the verifyData - calldatacopy(add(verifyData, 32), authenticatorData.offset, authenticatorData.length) - } - - bytes32 clientDataHashed = sha256(clientData); - assembly { - // Add the client data hash at the end of the verifyData - mstore(add(verifyData, add(authenticatorData.length, 32)), clientDataHashed) - } - - // Return the sha256 of the verifyData - return sha256(verifyData); - } - - /// @dev Proceed to the full webauth verification - /// @param _p256Verifier The p256 verifier contract on-chain (if user want to use this instead of the precompiled one) - /// @param _hash The hash that has been signed via WebAuthN - /// @param _signature The signature that has been provided with the userOp - /// @param _x The X point of the public key - /// @param _y The Y point of the public key - /// @return isValid True if the signature is valid, false otherwise - function _verifyWebAuthNSignature( - address _p256Verifier, - bytes32 _hash, - bytes calldata _signature, - uint256 _x, - uint256 _y - ) internal view returns (bool isValid) { - // Extract the signature - FclSignatureLayout calldata signature; - // This code should precalculate the offsets of variables as defined in the layout - // From: https://twitter.com/k06a/status/1706934230779883656 - assembly { - signature := _signature.offset - } - - // If the signature is using the on-chain p256 verifier, we will use it - if (!signature.useOnChainP256Verifier) { - _p256Verifier = PRECOMPILED_P256_VERIFIER; - } - - // Format the webauthn challenge into a p256 message - bytes32 challenge = _formatWebAuthNChallenge(_hash, signature); - - // Prepare the argument we will use to verify the signature - bytes memory args = abi.encode(challenge, signature.rs[0], signature.rs[1], _x, _y); - - // Send the call the the p256 verifier - (bool success, bytes memory ret) = _p256Verifier.staticcall(args); - // If empty ret, return false - if (success == false || ret.length == 0) { - return false; - } - - // Ensure that it has returned 1 - return abi.decode(ret, (uint256)) == 1; - } -} diff --git a/test/ECDSAValidator.t.sol b/test/ECDSAValidator.t.sol new file mode 100644 index 00000000..18e9ea20 --- /dev/null +++ b/test/ECDSAValidator.t.sol @@ -0,0 +1,118 @@ +pragma solidity ^0.8.0; + +import {MockCallee, KernelTestBase} from "src/sdk/testBase/KernelTestBase.sol"; +import {ECDSAValidator} from "src/validator/ECDSAValidator.sol"; +import {ECDSA} from "solady/utils/ECDSA.sol"; +import {PackedUserOperation} from "src/interfaces/PackedUserOperation.sol"; +import {ValidatorLib} from "src/utils/ValidationTypeLib.sol"; +import {ExecLib} from "src/utils/ExecLib.sol"; +import {IHook} from "src/interfaces/IERC7579Modules.sol"; +import {ValidatorLib, ValidationId, ValidationMode, ValidationType} from "src/utils/ValidationTypeLib.sol"; +import {VALIDATION_MODE_ENABLE, VALIDATION_TYPE_VALIDATOR} from "src/types/Constants.sol"; + +import "forge-std/console.sol"; + +contract ECDSAValidatorTest is KernelTestBase { + ECDSAValidator ecdsaValidator; + address owner; + uint256 ownerKey; + + function _setRootValidationConfig() internal override { + (owner, ownerKey) = makeAddrAndKey("Owner"); + ecdsaValidator = new ECDSAValidator(); + rootValidation = ValidatorLib.validatorToIdentifier(ecdsaValidator); + rootValidationConfig = + RootValidationConfig({hook: IHook(address(0)), hookData: hex"", validatorData: abi.encodePacked(owner)}); + } + + function _rootSignDigest(bytes32 digest, bool success) internal view override returns (bytes memory data) { + unchecked { + if (!success) { + digest = bytes32(uint256(digest) - 1); + } + } + (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, ECDSA.toEthSignedMessageHash(digest)); + bytes memory sig = abi.encodePacked(r, s, v); + return sig; + } + + function _rootSignUserOp(PackedUserOperation memory op, bool success) + internal + view + override + returns (bytes memory) + { + bytes32 hash = entrypoint.getUserOpHash(op); + return _rootSignDigest(hash, success); + } + + function testExternalInteraction() external whenInitialized { + vm.startPrank(owner); + kernel.execute( + ExecLib.encodeSimpleSingle(), + ExecLib.encodeSingle(address(callee), 0, abi.encodeWithSelector(MockCallee.setValue.selector, 123)) + ); + vm.stopPrank(); + } + + function testEnableMalicious() external whenInitialized { + vm.startPrank(owner); + vm.deal(address(kernel), 1e18); + kernel.invalidateNonce(2); + vm.stopPrank(); + (address hacker, uint256 hackerKey) = makeAddrAndKey("Hacker"); + ownerKey = hackerKey; + enabledValidator = ecdsaValidator; + validationConfig.validatorData = abi.encodePacked(hacker); + PackedUserOperation[] memory ops = new PackedUserOperation[](1); + ops[0] = _prepareMaliciousEnableUserOp( + encodeExecute(address(callee), 0, abi.encodeWithSelector(callee.setValue.selector, 123)) + ); + vm.expectRevert(); + entrypoint.handleOps(ops, payable(address(0xdeadbeef))); + } + + function _prepareMaliciousEnableUserOp(bytes memory callData) internal returns (PackedUserOperation memory op) { + uint192 encodedAsNonceKey = ValidatorLib.encodeAsNonceKey( + ValidationMode.unwrap(VALIDATION_MODE_ENABLE), + ValidationType.unwrap(VALIDATION_TYPE_VALIDATOR), + bytes20(address(enabledValidator)), + 0 // parallel key + ); + op = PackedUserOperation({ + sender: address(kernel), + nonce: entrypoint.getNonce(address(kernel), encodedAsNonceKey), + initCode: hex"", + callData: callData, + accountGasLimits: bytes32(abi.encodePacked(uint128(2000000), uint128(2000000))), + preVerificationGas: 1000000, + gasFees: bytes32(abi.encodePacked(uint128(1), uint128(1))), + paymasterAndData: hex"", + signature: hex"" + }); + bytes32 hash = keccak256( + abi.encode( + keccak256( + "Enable(bytes21 validationId,uint32 nonce,address hook,bytes validatorData,bytes hookData,bytes selectorData)" + ), + ValidationId.unwrap(ValidatorLib.validatorToIdentifier(enabledValidator)), + uint256(kernel.currentNonce()), + validationConfig.hook, + keccak256(validationConfig.validatorData), + keccak256(abi.encodePacked(bytes1(0xff), validationConfig.hookData)), + keccak256(abi.encodePacked(kernel.execute.selector)) + ) + ); + bytes32 digest = keccak256( + abi.encodePacked("\x19\x01", _buildDomainSeparator("Kernel", "0.3.0-beta", address(kernel)), hash) + ); + op.signature = encodeEnableSignature( + validationConfig.hook, + validationConfig.validatorData, + abi.encodePacked(bytes1(0xff), validationConfig.hookData), + abi.encodePacked(kernel.execute.selector), + _rootSignDigest(digest, true), + _rootSignUserOp(op, true) + ); + } +} diff --git a/test/Kernel.t.sol b/test/Kernel.t.sol new file mode 100644 index 00000000..c755368d --- /dev/null +++ b/test/Kernel.t.sol @@ -0,0 +1,5 @@ +pragma solidity ^0.8.0; + +import {KernelTestBase} from "src/sdk/testBase/KernelTestBase.sol"; + +contract KernelTest is KernelTestBase {} diff --git a/test/Permission.t.sol b/test/Permission.t.sol new file mode 100644 index 00000000..d5bee435 --- /dev/null +++ b/test/Permission.t.sol @@ -0,0 +1,143 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.0; + +import "src/core/ValidationManager.sol"; +import "forge-std/Test.sol"; + +contract MockValidatorLib { + function encodeFlag(bool skipUserOp, bool skipSignature) external pure returns (PassFlag flag) { + return ValidatorLib.encodeFlag(skipUserOp, skipSignature); + } + + function encodeAsNonce( + bytes1 mode, + bytes1 vType, + bytes20 validatorIdentifierWithoutType, + uint16 nonceKey, + uint64 nonce + ) external pure returns (uint256 res) { + return ValidatorLib.encodeAsNonce(mode, vType, validatorIdentifierWithoutType, nonceKey, nonce); + } + + function encodeAsNonceKey(bytes1 mode, bytes1 vType, bytes20 validatorIdentifierWithoutType, uint16 nonceKey) + external + pure + returns (uint192 res) + { + return ValidatorLib.encodeAsNonceKey(mode, vType, validatorIdentifierWithoutType, nonceKey); + } + + function decodeNonce(uint256 nonce) + external + pure + returns (ValidationMode mode, ValidationType vType, ValidationId identifier) + { + return ValidatorLib.decodeNonce(nonce); + } + + function validatorToIdentifier(IValidator validator) external pure returns (ValidationId vId) { + return ValidatorLib.validatorToIdentifier(validator); + } + + function getType(ValidationId validator) external pure returns (ValidationType vType) { + return ValidatorLib.getType(validator); + } + + function getValidator(ValidationId validator) external pure returns (IValidator v) { + return ValidatorLib.getValidator(validator); + } + + function getPolicy(PolicyData data) external pure returns (IPolicy vId) { + return ValidatorLib.getPolicy(data); + } + + function getPermissionId(ValidationId validation) external pure returns (PermissionId vId) { + return ValidatorLib.getPermissionId(validation); + } +} + +contract PermissionTest is Test { + MockValidatorLib validatorLib; + + function setUp() external { + validatorLib = new MockValidatorLib(); + } + + function testFlagEncode() external { + PassFlag flag = validatorLib.encodeFlag(true, true); + assertEq(PassFlag.unwrap(flag), bytes2(0x0003)); + flag = validatorLib.encodeFlag(true, false); + assertEq(PassFlag.unwrap(flag), bytes2(0x0001)); + flag = validatorLib.encodeFlag(false, true); + assertEq(PassFlag.unwrap(flag), bytes2(0x0002)); + flag = validatorLib.encodeFlag(false, false); + assertEq(PassFlag.unwrap(flag), bytes2(0x0000)); + } + + function testDecode() external { + uint256 nonce = uint256(bytes32(0)); + (ValidationMode vMode, ValidationType vType,) = validatorLib.decodeNonce(nonce); + assertTrue(vMode == VALIDATION_MODE_DEFAULT, "vMode != MODE_DEFAULT"); + assertTrue(vType == VALIDATION_TYPE_ROOT, "vType != TYPE_VALIDATOR"); + } + + function testDecode(bytes1 mode, bytes1 vtype, bytes20 vIdWithoutType, bytes10 sequencialNonce) external { + uint256 nonce = uint256(bytes32(abi.encodePacked(mode, vtype, vIdWithoutType, sequencialNonce))); + (ValidationMode vMode, ValidationType vType, ValidationId vId) = validatorLib.decodeNonce(nonce); + assertTrue(vMode == ValidationMode.wrap(mode), "vMode != mode"); + assertTrue(vType == ValidationType.wrap(vtype), "vType != type"); + if (ValidationType.wrap(vtype) == VALIDATION_TYPE_PERMISSION) { + vIdWithoutType = (vIdWithoutType >> 128) << 128; + } + assertTrue(vId == ValidationId.wrap(bytes21(abi.encodePacked(vtype, vIdWithoutType))), "vId != vIdWithoutType"); + } + + function testEncode(bytes1 mode, bytes1 vtype, bytes20 vIdWithoutType, uint16 nonceKey, uint64 seqNonce) external { + uint256 encoded = validatorLib.encodeAsNonce(mode, vtype, vIdWithoutType, nonceKey, seqNonce); + uint256 nonce = uint256(bytes32(abi.encodePacked(mode, vtype, vIdWithoutType, nonceKey, seqNonce))); + assertEq(bytes32(nonce), bytes32(encoded)); + + uint192 encodedAsNonceKey = validatorLib.encodeAsNonceKey(mode, vtype, vIdWithoutType, nonceKey); + assertEq(nonce >> 64, encodedAsNonceKey); + } + + function testValidatorLibPermission() public { + testValidatorLib( + ValidationMode.unwrap(VALIDATION_MODE_DEFAULT), + ValidationType.unwrap(VALIDATION_TYPE_PERMISSION), + bytes20(makeAddr("random")), + bytes10(0) + ); + } + + function testValidatorLib(bytes1 mode, bytes1 vtype, bytes20 vIdWithoutType, bytes10 sequencialNonce) public { + bytes20 expected = vIdWithoutType; + if (ValidationType.wrap(vtype) == VALIDATION_TYPE_PERMISSION) { + expected = (expected >> 128) << 128; + } + uint16 nonceKey = uint16(bytes2(sequencialNonce)); + uint64 seqNonce = uint64(bytes8(sequencialNonce << 16)); + uint256 encoded = validatorLib.encodeAsNonce(mode, vtype, vIdWithoutType, nonceKey, seqNonce); + + (ValidationMode vMode, ValidationType vType, ValidationId vId) = validatorLib.decodeNonce(encoded); + assertTrue(vMode == ValidationMode.wrap(mode), "vMode != mode"); + assertTrue(vType == ValidationType.wrap(vtype), "vType != type"); + assertTrue(vId == ValidationId.wrap(bytes21(abi.encodePacked(vtype, expected))), "vId != vIdWithoutType"); + + if (ValidationType.wrap(vtype) == VALIDATION_TYPE_VALIDATOR) { + IValidator v = validatorLib.getValidator(vId); + assertEq(address(v), address(vIdWithoutType), "v != vIdWithoutType"); + ValidationId vid = validatorLib.validatorToIdentifier(v); + assertTrue( + vid == ValidationId.wrap(bytes21(abi.encodePacked(VALIDATION_TYPE_VALIDATOR, vIdWithoutType))), + "vid != vIdWithoutType" + ); + } else if (ValidationType.wrap(vtype) == VALIDATION_TYPE_PERMISSION) { + PermissionId pId = validatorLib.getPermissionId(vId); + assertEq(bytes20(abi.encodePacked(PermissionId.unwrap(pId), bytes16(0))), expected); + } + + ValidationType vt = validatorLib.getType(vId); + assertTrue(vt == ValidationType.wrap(vtype), "vt != vtype"); + } +} diff --git a/test/foundry/KernelECDSA.t.sol b/test/foundry/KernelECDSA.t.sol deleted file mode 100644 index 8322e9ad..00000000 --- a/test/foundry/KernelECDSA.t.sol +++ /dev/null @@ -1,99 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol"; -import "src/Kernel.sol"; -import "src/validator/ECDSAValidator.sol"; -// test artifacts -// test utils -import "forge-std/Test.sol"; -import {ERC4337Utils} from "src/utils/ERC4337Utils.sol"; -import {KernelTestBase} from "src/utils/KernelTestBase.sol"; -import {TestExecutor} from "src/mock/TestExecutor.sol"; -import {TestValidator} from "src/mock/TestValidator.sol"; -import {IKernel} from "src/interfaces/IKernel.sol"; - -using ERC4337Utils for IEntryPoint; - -contract KernelECDSATest is KernelTestBase { - function setUp() public virtual { - _initialize(); - defaultValidator = new ECDSAValidator(); - _setAddress(); - _setExecutionDetail(); - } - - function test_ignore() external {} - - function _setExecutionDetail() internal virtual override { - executionDetail.executor = address(new TestExecutor()); - executionSig = TestExecutor.doNothing.selector; - executionDetail.validator = new TestValidator(); - } - - function getEnableData() internal view virtual override returns (bytes memory) { - return ""; - } - - function getValidatorSignature(UserOperation memory) internal view virtual override returns (bytes memory) { - return ""; - } - - function getOwners() internal view override returns (address[] memory) { - address[] memory owners = new address[](1); - owners[0] = owner; - return owners; - } - - function getInitializeData() internal view override returns (bytes memory) { - return abi.encodeWithSelector(KernelStorage.initialize.selector, defaultValidator, abi.encodePacked(owner)); - } - - function signUserOp(UserOperation memory op) internal view override returns (bytes memory) { - return abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKey, op)); - } - - function getWrongSignature(UserOperation memory op) internal view override returns (bytes memory) { - return abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKey + 1, op)); - } - - function signHash(bytes32 hash) internal view override returns (bytes memory) { - (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, ECDSA.toEthSignedMessageHash(hash)); - return abi.encodePacked(r, s, v); - } - - function getWrongSignature(bytes32 hash) internal view override returns (bytes memory) { - (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey + 1, ECDSA.toEthSignedMessageHash(hash)); - return abi.encodePacked(r, s, v); - } - - function test_default_validator_enable() external override { - UserOperation memory op = buildUserOperation( - abi.encodeWithSelector( - IKernel.execute.selector, - address(defaultValidator), - 0, - abi.encodeWithSelector(ECDSAValidator.enable.selector, abi.encodePacked(address(0xdeadbeef))), - Operation.Call - ) - ); - performUserOperationWithSig(op); - (address owner_) = ECDSAValidator(address(defaultValidator)).ecdsaValidatorStorage(address(kernel)); - assertEq(owner_, address(0xdeadbeef), "owner should be 0xdeadbeef"); - } - - function test_default_validator_disable() external override { - UserOperation memory op = buildUserOperation( - abi.encodeWithSelector( - IKernel.execute.selector, - address(defaultValidator), - 0, - abi.encodeWithSelector(ECDSAValidator.disable.selector, ""), - Operation.Call - ) - ); - performUserOperationWithSig(op); - (address owner_) = ECDSAValidator(address(defaultValidator)).ecdsaValidatorStorage(address(kernel)); - assertEq(owner_, address(0), "owner should be 0"); - } -} diff --git a/test/foundry/KernelHelper.t.sol b/test/foundry/KernelHelper.t.sol deleted file mode 100644 index 7a3fca8e..00000000 --- a/test/foundry/KernelHelper.t.sol +++ /dev/null @@ -1,66 +0,0 @@ -pragma solidity ^0.8.0; - -import "forge-std/Test.sol"; -import "src/utils/KernelHelper.sol"; -import "src/common/Types.sol"; - -contract KernelHelperTest is Test { - function testIntersect( - ValidAfter validAfterA, - ValidUntil validUntilA, - ValidAfter validAfterB, - ValidUntil validUntilB - ) public { - if (ValidUntil.unwrap(validUntilB) == 0) { - validUntilB = ValidUntil.wrap(0xffffffffffff); - } - if (ValidUntil.unwrap(validUntilA) == 0) { - validUntilA = ValidUntil.wrap(0xffffffffffff); - } - ValidationData a = packValidationData(validAfterA, validUntilA); - ValidationData b = packValidationData(validAfterB, validUntilB); - ValidationData c = _intersectValidationData(a, b); - - ValidationData expected = packValidationData( - ValidAfter.unwrap(validAfterA) > ValidAfter.unwrap(validAfterB) ? validAfterA : validAfterB, - ValidUntil.unwrap(validUntilA) < ValidUntil.unwrap(validUntilB) ? validUntilA : validUntilB - ); - assertEq(ValidationData.unwrap(c), ValidationData.unwrap(expected)); - } - - function testIntersectWithAggregator( - address aggregatorA, - ValidAfter validAfterA, - ValidUntil validUntilA, - address aggregatorB, - ValidAfter validAfterB, - ValidUntil validUntilB - ) external { - if (ValidUntil.unwrap(validUntilB) == 0) { - validUntilB = ValidUntil.wrap(0xffffffffffff); - } - if (ValidUntil.unwrap(validUntilA) == 0) { - validUntilA = ValidUntil.wrap(0xffffffffffff); - } - ValidationData a = packValidationData(aggregatorA, validAfterA, validUntilA); - ValidationData b = packValidationData(aggregatorB, validAfterB, validUntilB); - ValidationData c = _intersectValidationData(a, b); - - address expectedAggregator = aggregatorA == address(0) - ? aggregatorB - : aggregatorA == aggregatorB || aggregatorB == address(0) ? aggregatorA : address(1); - console.log("expectedAggregator", expectedAggregator); - // a : b - // 0 : 0 => 0 - // 0 : 1 => 1 - // 1 : 0 => 1 - // 1 : 1 => 1 - // X : 0 => X - // X : 1 => 1 - // 0 : X => X - // 1 : X => 1 - (ValidAfter vf, ValidUntil vu, address res) = parseValidationData(c); - console.log("res", res); - assertEq(res, expectedAggregator); - } -} diff --git a/test/foundry/KernelLiteECDSA.t.sol b/test/foundry/KernelLiteECDSA.t.sol deleted file mode 100644 index 70a71daf..00000000 --- a/test/foundry/KernelLiteECDSA.t.sol +++ /dev/null @@ -1,110 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol"; -import "src/Kernel.sol"; -import "src/lite/KernelLiteECDSA.sol"; -// test artifacts -// test utils -import "forge-std/Test.sol"; -import {ERC4337Utils} from "src/utils/ERC4337Utils.sol"; -import {KernelTestBase} from "src/utils/KernelTestBase.sol"; -import {TestExecutor} from "src/mock/TestExecutor.sol"; -import {TestValidator} from "src/mock/TestValidator.sol"; -import {ECDSAValidator} from "src/validator/ECDSAValidator.sol"; - -using ERC4337Utils for IEntryPoint; - -contract KernelECDSATest is KernelTestBase { - ECDSAValidator ecdsa; - - function setUp() public { - ecdsa = new ECDSAValidator(); - _initialize(); - kernelImpl = Kernel(payable(address(new KernelLiteECDSA(entryPoint, ecdsa)))); - vm.startPrank(factoryOwner); - factory.setImplementation(address(kernelImpl), true); - vm.stopPrank(); - - _setAddress(); - _setExecutionDetail(); - } - - function _setExecutionDetail() internal virtual override { - executionDetail.executor = address(new TestExecutor()); - executionSig = TestExecutor.doNothing.selector; - executionDetail.validator = new TestValidator(); - } - - function getEnableData() internal view virtual override returns (bytes memory) { - return ""; - } - - function getValidatorSignature(UserOperation memory) internal view virtual override returns (bytes memory) { - return ""; - } - - function getOwners() internal view override returns (address[] memory) { - address[] memory owners = new address[](1); - owners[0] = owner; - return owners; - } - - function getInitializeData() internal view override returns (bytes memory) { - return abi.encodeWithSelector(KernelStorage.initialize.selector, address(ecdsa), abi.encodePacked(owner)); - } - - function test_set_default_validator() external override { - TestValidator newValidator = new TestValidator(); - bytes memory empty; - UserOperation memory op = buildUserOperation( - abi.encodeWithSelector(KernelStorage.setDefaultValidator.selector, address(newValidator), empty) - ); - vm.expectEmit(true, true, true, false, address(entryPoint)); - emit UserOperationEvent(entryPoint.getUserOpHash(op), address(kernel), address(0), op.nonce, false, 0, 0); - performUserOperationWithSig(op); - } - - function signUserOp(UserOperation memory op) internal view override returns (bytes memory) { - return abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKey, op)); - } - - function signHash(bytes32 hash) internal view override returns (bytes memory) { - (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, ECDSA.toEthSignedMessageHash(hash)); - return abi.encodePacked(r, s, v); - } - - function getWrongSignature(UserOperation memory op) internal view override returns (bytes memory) { - return abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKey + 1, op)); - } - - function getWrongSignature(bytes32 hash) internal view override returns (bytes memory) { - (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey + 1, ECDSA.toEthSignedMessageHash(hash)); - return abi.encodePacked(r, s, v); - } - - function test_default_validator_enable() external override { - vm.skip(true); - } - - function test_default_validator_disable() external override { - vm.skip(true); - } - - function test_fail_validate_not_activate() external override { - vm.skip(true); - } - - function test_transfer_ownership() external { - address newOwner = makeAddr("new owner"); - UserOperation memory op = entryPoint.fillUserOp( - address(kernel), abi.encodeWithSelector(KernelLiteECDSA.transferOwnership.selector, newOwner) - ); - op.signature = signUserOp(op); - UserOperation[] memory ops = new UserOperation[](1); - ops[0] = op; - vm.expectEmit(true, true, true, false, address(entryPoint)); - emit UserOperationEvent(entryPoint.getUserOpHash(op), address(kernel), address(0), op.nonce, false, 0, 0); - performUserOperationWithSig(op); - } -} diff --git a/test/foundry/utils/Merkle.sol b/test/foundry/utils/Merkle.sol deleted file mode 100644 index 26730161..00000000 --- a/test/foundry/utils/Merkle.sol +++ /dev/null @@ -1,76 +0,0 @@ -pragma solidity ^0.8.0; - -function _getRoot(bytes32[] memory data) pure returns (bytes32) { - require(data.length > 1); - while (data.length > 1) { - data = _hashLevel(data); - } - return data[0]; -} - -function _getProof(bytes32[] memory data, uint256 nodeIndex, bool wrongProof) pure returns (bytes32[] memory) { - require(data.length > 1); - - bytes32[] memory result = new bytes32[](64); - uint256 pos; - - while (data.length > 1) { - unchecked { - if (nodeIndex & 0x1 == 1) { - result[pos] = data[nodeIndex - 1]; - } else if (nodeIndex + 1 == data.length) { - result[pos] = bytes32(0); - } else { - result[pos] = data[nodeIndex + 1]; - } - ++pos; - nodeIndex /= 2; - } - data = _hashLevel(data); - } - // Resize the length of the array to fit. - /// @solidity memory-safe-assembly - assembly { - mstore(result, pos) - } - if (wrongProof) { - result[0] = result[0] ^ bytes32(uint256(0x01)); - } - - return result; -} - -function _hashLevel(bytes32[] memory data) pure returns (bytes32[] memory) { - bytes32[] memory result; - unchecked { - uint256 length = data.length; - if (length & 0x1 == 1) { - result = new bytes32[](length / 2 + 1); - result[result.length - 1] = _hashPair(data[length - 1], bytes32(0)); - } else { - result = new bytes32[](length / 2); - } - uint256 pos = 0; - for (uint256 i = 0; i < length - 1; i += 2) { - result[pos] = _hashPair(data[i], data[i + 1]); - ++pos; - } - } - return result; -} - -function _hashPair(bytes32 left, bytes32 right) pure returns (bytes32 result) { - /// @solidity memory-safe-assembly - assembly { - switch lt(left, right) - case 0 { - mstore(0x0, right) - mstore(0x20, left) - } - default { - mstore(0x0, left) - mstore(0x20, right) - } - result := keccak256(0x0, 0x40) - } -} diff --git a/test/foundry/validator/KernelECDSATyped.t.sol b/test/foundry/validator/KernelECDSATyped.t.sol deleted file mode 100644 index 905c7757..00000000 --- a/test/foundry/validator/KernelECDSATyped.t.sol +++ /dev/null @@ -1,153 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol"; -import "src/Kernel.sol"; -import "src/validator/ECDSATypedValidator.sol"; -// test artifacts -// test utils -import "forge-std/Test.sol"; -import {ERC4337Utils} from "src/utils/ERC4337Utils.sol"; -import {KernelTestBase} from "src/utils/KernelTestBase.sol"; -import {TestExecutor} from "src/mock/TestExecutor.sol"; -import {TestValidator} from "src/mock/TestValidator.sol"; -import {IKernel} from "src/interfaces/IKernel.sol"; - -using ERC4337Utils for IEntryPoint; - -/// @author @KONFeature -/// @title KernelECDSATypedTest -/// @notice Unit test on the Kernel ECDSA typed validator -contract KernelECDSATypedTest is KernelTestBase { - ECDSATypedValidator private ecdsaTypedValidator; - - function setUp() public virtual { - _initialize(); - ecdsaTypedValidator = new ECDSATypedValidator(); - defaultValidator = ecdsaTypedValidator; - _setAddress(); - _setExecutionDetail(); - } - - function test_ignore() external {} - - function _setExecutionDetail() internal virtual override { - executionDetail.executor = address(new TestExecutor()); - executionSig = TestExecutor.doNothing.selector; - executionDetail.validator = new TestValidator(); - } - - function getEnableData() internal view virtual override returns (bytes memory) { - return ""; - } - - function getValidatorSignature(UserOperation memory) internal view virtual override returns (bytes memory) { - return ""; - } - - function getOwners() internal view override returns (address[] memory) { - address[] memory owners = new address[](1); - owners[0] = owner; - return owners; - } - - function getInitializeData() internal view override returns (bytes memory) { - return abi.encodeWithSelector(KernelStorage.initialize.selector, defaultValidator, abi.encodePacked(owner)); - } - - function signUserOp(UserOperation memory op) internal view override returns (bytes memory) { - return abi.encodePacked(bytes4(0x00000000), _generateUserOpSignature(entryPoint, op, ownerKey)); - } - - function getWrongSignature(UserOperation memory op) internal view override returns (bytes memory) { - return abi.encodePacked(bytes4(0x00000000), _generateUserOpSignature(entryPoint, op, ownerKey + 1)); - } - - function signHash(bytes32 _hash) internal view override returns (bytes memory) { - return _generateHashSignature(_hash, owner, address(kernel), ownerKey); - } - - function getWrongSignature(bytes32 _hash) internal view override returns (bytes memory) { - return _generateHashSignature(_hash, owner, address(kernel), ownerKey + 1); - } - - function test_default_validator_enable() external override { - UserOperation memory op = buildUserOperation( - abi.encodeWithSelector( - IKernel.execute.selector, - address(defaultValidator), - 0, - abi.encodeWithSelector(ECDSATypedValidator.enable.selector, abi.encodePacked(address(0xdeadbeef))), - Operation.Call - ) - ); - performUserOperationWithSig(op); - address owner_ = ecdsaTypedValidator.getOwner(address(kernel)); - assertEq(owner_, address(0xdeadbeef), "owner should be 0xdeadbeef"); - } - - function test_default_validator_disable() external override { - UserOperation memory op = buildUserOperation( - abi.encodeWithSelector( - IKernel.execute.selector, - address(defaultValidator), - 0, - abi.encodeWithSelector(ECDSATypedValidator.disable.selector, ""), - Operation.Call - ) - ); - performUserOperationWithSig(op); - address owner_ = ecdsaTypedValidator.getOwner(address(kernel)); - assertEq(owner_, address(0), "owner should be 0"); - } - - /* -------------------------------------------------------------------------- */ - /* Helper methods */ - /* -------------------------------------------------------------------------- */ - - /// @notice The type hash used for kernel user op validation - bytes32 constant USER_OP_TYPEHASH = keccak256("AllowUserOp(address owner,address kernelWallet,bytes32 userOpHash)"); - - /// @dev Generate the signature for a user op - function _generateUserOpSignature(IEntryPoint _entryPoint, UserOperation memory _op, uint256 _privateKey) - internal - view - returns (bytes memory) - { - // Get the kernel private key owner address - address owner_ = vm.addr(_privateKey); - - // Get the user op hash - bytes32 userOpHash = _entryPoint.getUserOpHash(_op); - - // Get the validator domain separator - bytes32 domainSeparator = ecdsaTypedValidator.getDomainSeperator(); - bytes32 typedMsgHash = keccak256( - abi.encodePacked( - "\x19\x01", domainSeparator, keccak256(abi.encode(USER_OP_TYPEHASH, owner_, _op.sender, userOpHash)) - ) - ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(_privateKey, typedMsgHash); - return abi.encodePacked(r, s, v); - } - - /// @notice The type hash used for kernel signature validation - bytes32 constant SIGNATURE_TYPEHASH = keccak256("KernelSignature(address owner,address kernelWallet,bytes32 hash)"); - - /// @dev Generate the signature for a given hash for a kernel account - function _generateHashSignature(bytes32 _hash, address _owner, address _kernel, uint256 _privateKey) - internal - view - returns (bytes memory) - { - // Get the validator domain separator - bytes32 domainSeparator = ecdsaTypedValidator.getDomainSeperator(); - bytes32 typedMsgHash = keccak256( - abi.encodePacked( - "\x19\x01", domainSeparator, keccak256(abi.encode(SIGNATURE_TYPEHASH, _owner, _kernel, _hash)) - ) - ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(_privateKey, typedMsgHash); - return abi.encodePacked(r, s, v); - } -} diff --git a/test/foundry/validator/KillSwitchValidator.t.sol b/test/foundry/validator/KillSwitchValidator.t.sol deleted file mode 100644 index 3ab45b14..00000000 --- a/test/foundry/validator/KillSwitchValidator.t.sol +++ /dev/null @@ -1,119 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "src/factory/KernelFactory.sol"; -import "src/validator/ECDSAValidator.sol"; -import "src/Kernel.sol"; -import "src/validator/KillSwitchValidator.sol"; -import "src/executor/KillSwitchAction.sol"; -// test utils -import "forge-std/Test.sol"; -import "src/utils/ERC4337Utils.sol"; -import {KernelTestBase} from "src/utils/KernelTestBase.sol"; -import {KernelECDSATest} from "../KernelECDSA.t.sol"; - -using ERC4337Utils for IEntryPoint; - -contract KillSwitchValidatorTest is KernelECDSATest { - KillSwitchValidator killSwitch; - KillSwitchAction action; - address guardian; - uint256 guardianKey; - - function setUp() public override { - killSwitch = new KillSwitchValidator(); - action = new KillSwitchAction(killSwitch); - super.setUp(); - (guardian, guardianKey) = makeAddrAndKey("guardian"); - } - - function _setExecutionDetail() internal override { - executionDetail.executor = address(action); - executionSig = KillSwitchAction.toggleKillSwitch.selector; - executionDetail.validator = killSwitch; - } - - function getEnableData() internal view override returns (bytes memory) { - return abi.encodePacked(guardian); - } - - function getValidatorSignature(UserOperation memory _op) internal view override returns (bytes memory sig) { - uint256 pausedUntil = block.timestamp + 1000; - - bytes32 hash = entryPoint.getUserOpHash(_op); - (uint8 v, bytes32 r, bytes32 s) = vm.sign( - guardianKey, ECDSA.toEthSignedMessageHash(keccak256(bytes.concat(bytes6(uint48(pausedUntil)), hash))) - ); - sig = abi.encodePacked(uint48(pausedUntil), r, s, v); - } - - function test_should_fail_with_not_implemented_isValidSignature() public { - test_should_fail_with_not_implemented_isValidSignature( - bytes32(keccak256(abi.encodePacked("HelloWorld"))), abi.encodePacked("HelloWorld") - ); - } - - function test_should_fail_with_not_implemented_isValidSignature(bytes32 hash, bytes memory sig) public { - vm.expectRevert(); - killSwitch.validateSignature(hash, sig); - } - - function test_should_fail_with_not_implemented_validCaller() public { - test_should_fail_with_not_implemented_validCaller(address(0), abi.encodePacked("HelloWorld")); - } - - function test_should_fail_with_not_implemented_validCaller(address caller, bytes memory data) public { - vm.expectRevert(); - killSwitch.validCaller(caller, data); - } - - function test_force_unblock() external { - UserOperation memory op = - buildUserOperation(abi.encodeWithSelector(Kernel.execute.selector, owner, 0, "", Operation.Call)); - - op.signature = bytes.concat(bytes4(0), entryPoint.signUserOpHash(vm, ownerKey, op)); - performUserOperation(op); - - op = buildUserOperation(abi.encodeWithSelector(KillSwitchAction.toggleKillSwitch.selector)); - bytes memory enableData = abi.encodePacked(guardian); - { - bytes32 digest = getTypedDataHash( - KillSwitchAction.toggleKillSwitch.selector, 0, 0, address(killSwitch), address(action), enableData - ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, digest); - - op.signature = abi.encodePacked( - bytes4(0x00000002), - uint48(0), - uint48(0), - address(killSwitch), - address(action), - uint256(enableData.length), - enableData, - uint256(65), - r, - s, - v - ); - } - uint48 pausedUntil = uint48(block.timestamp + 1000); - bytes32 hash = entryPoint.getUserOpHash(op); - { - (uint8 v, bytes32 r, bytes32 s) = vm.sign( - guardianKey, ECDSA.toEthSignedMessageHash(keccak256(bytes.concat(bytes6(uint48(pausedUntil)), hash))) - ); - bytes memory sig = abi.encodePacked(r, s, v); - - op.signature = bytes.concat(op.signature, bytes6(uint48(pausedUntil)), sig); - } - - performUserOperation(op); - assertEq(kernel.getDisabledMode(), bytes4(0xffffffff)); - assertEq(address(kernel.getDefaultValidator()), address(killSwitch)); - op = buildUserOperation(abi.encodeWithSelector(KillSwitchAction.toggleKillSwitch.selector)); - - op.signature = bytes.concat(bytes4(0), entryPoint.signUserOpHash(vm, guardianKey, op)); - performUserOperation(op); - assertEq(kernel.getDisabledMode(), bytes4(0)); - } -} diff --git a/test/foundry/validator/SessionKeyValidator.t.sol b/test/foundry/validator/SessionKeyValidator.t.sol deleted file mode 100644 index e231c1d4..00000000 --- a/test/foundry/validator/SessionKeyValidator.t.sol +++ /dev/null @@ -1,538 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import "src/Kernel.sol"; -import "src/interfaces/IKernel.sol"; -import "src/validator/ECDSAValidator.sol"; -import "src/factory/KernelFactory.sol"; -import {Call} from "src/common/Structs.sol"; -// test artifacts -import "src/mock/TestValidator.sol"; -import "src/mock/TestExecutor.sol"; -import "src/mock/TestERC721.sol"; -import "src/mock/TestERC20.sol"; -import "src/mock/TestPaymaster.sol"; -// test utils -import "forge-std/Test.sol"; -import "src/utils/ERC4337Utils.sol"; -import "../utils/Merkle.sol"; -// test actions/validators -import "src/validator/SessionKeyValidator.sol"; - -import {KernelECDSATest} from "../KernelECDSA.t.sol"; -import "src/mock/TestCallee.sol"; -import "src/mock/TestERC20.sol"; - -using ERC4337Utils for IEntryPoint; - -contract SessionKeyValidatorTest is KernelECDSATest { - SessionKeyValidator sessionKeyValidator; - TestCallee[] callees; - TestERC20[] erc20s; - ExecutionRule execRule; - bytes32[] data; - address sessionKey; - uint256 sessionKeyPriv; - TestPaymaster paymaster; - TestPaymaster unknownPaymaster; - address recipient; - - function setUp() public override { - super.setUp(); - (sessionKey, sessionKeyPriv) = makeAddrAndKey("sessionKey"); - sessionKeyValidator = new SessionKeyValidator(); - paymaster = new TestPaymaster(); - unknownPaymaster = new TestPaymaster(); - entryPoint.depositTo{value: 1e18}(address(unknownPaymaster)); - entryPoint.depositTo{value: 1e18}(address(paymaster)); - recipient = makeAddr("recipient"); - } - - function _setup_permission(uint256 _length, bool isDelegateCall) - internal - returns (Permission[] memory permissions) - { - permissions = new Permission[](_length); - callees = new TestCallee[](_length); - if (isDelegateCall) { - erc20s = new TestERC20[](_length); - } - for (uint8 i = 0; i < _length; i++) { - address target; - bytes4 sig; - if (isDelegateCall) { - erc20s[i] = new TestERC20(); - target = address(callees[i]); - sig = TestCallee.transferErc20Tester.selector; - erc20s[i].mint(address(kernel), 200); - } else { - callees[i] = new TestCallee(); - target = address(callees[i]); - sig = TestCallee.addTester.selector; - } - ParamRule[] memory paramRules = new ParamRule[](2); - if (isDelegateCall) { - paramRules[0] = - ParamRule({offset: 0, condition: ParamCondition(0), param: bytes32(uint256(uint160(recipient)))}); - } else { - paramRules[0] = ParamRule({offset: 0, condition: ParamCondition(i % 6), param: bytes32(uint256(100))}); - } - paramRules[1] = - ParamRule({offset: 32, condition: ParamCondition((i + 1) % 6), param: bytes32(uint256(100))}); - permissions[i] = Permission({ - index: i, - target: target, - sig: sig, - valueLimit: 0, - rules: paramRules, - executionRule: execRule, - operation: isDelegateCall ? Operation.DelegateCall : Operation.Call - }); - } - } - - function _buildHashes(Permission[] memory permissions) internal { - // setup permission done - data = new bytes32[](permissions.length); - for (uint8 i = 0; i < permissions.length; i++) { - data[i] = keccak256(abi.encode(permissions[i])); - } - } - - function _generateParam(ParamCondition condition, bool correct) internal pure returns (uint256 param) { - if (condition == ParamCondition.EQUAL) { - param = correct ? 100 : 101; - } else if (condition == ParamCondition.GREATER_THAN) { - param = correct ? 101 : 100; - } else if (condition == ParamCondition.LESS_THAN) { - param = correct ? 99 : 100; - } else if (condition == ParamCondition.NOT_EQUAL) { - param = correct ? 101 : 100; - } else if (condition == ParamCondition.GREATER_THAN_OR_EQUAL) { - param = correct ? 100 : 99; - } else if (condition == ParamCondition.LESS_THAN_OR_EQUAL) { - param = correct ? 100 : 101; - } - } - - function _buildUserOpBatch( - Permission[] memory permissions, - SessionData memory sessionData, - uint256 indexToUse, - uint8 usingPaymasterMode, - bool param1Faulty, - bool param2Faulty - ) internal view returns (UserOperation memory op) { - Call[] memory calls = new Call[](1); - calls[0] = Call({ - to: permissions[indexToUse].target, - value: 0, - data: abi.encodeWithSelector( - permissions[indexToUse].sig, - _generateParam(ParamCondition(indexToUse % 6), !param1Faulty), - _generateParam(ParamCondition((indexToUse + 1) % 6), !param2Faulty) - ) - }); - - op = buildUserOperation(abi.encodeWithSelector(IKernel.executeBatch.selector, calls)); - if (usingPaymasterMode != 0) { - // 0 = no paymaster - // 1 = unknown paymaster - // 2 = correct paymaster - op.paymasterAndData = usingPaymasterMode == 1 - ? abi.encodePacked(address(unknownPaymaster)) - : abi.encodePacked(address(paymaster)); - } - bytes memory enableData = abi.encodePacked( - sessionKey, - sessionData.merkleRoot, - sessionData.validAfter, - sessionData.validUntil, - sessionData.paymaster, - sessionData.nonce - ); - bytes32 digest = getTypedDataHash( - IKernel.executeBatch.selector, - ValidAfter.unwrap(sessionData.validAfter), - ValidUntil.unwrap(sessionData.validUntil), - address(sessionKeyValidator), - address(0), - enableData - ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, digest); - op.signature = abi.encodePacked( - bytes4(0x00000002), - uint48(ValidAfter.unwrap(sessionData.validAfter)), - uint48(ValidUntil.unwrap(sessionData.validUntil)), - address(sessionKeyValidator), - address(0), - uint256(enableData.length), - enableData, - uint256(65), - r, - s, - v - ); - } - - function _buildUserOp( - Permission[] memory permissions, - SessionData memory sessionData, - uint256 indexToUse, - uint8 usingPaymasterMode, - bool param1Faulty, - bool param2Faulty, - bool isDelegateCall - ) internal view returns (UserOperation memory op) { - bytes4 selector = isDelegateCall ? IKernel.executeDelegateCall.selector : IKernel.execute.selector; - op = buildUserOperation( - isDelegateCall - ? abi.encodeWithSelector( - selector, - permissions[indexToUse].target, - abi.encodeWithSelector( - permissions[indexToUse].sig, - recipient, - _generateParam(ParamCondition((indexToUse + 1) % 6), !param2Faulty) // since NOT_EQ - ) - ) - : abi.encodeWithSelector( - selector, - permissions[indexToUse].target, - 0, - abi.encodeWithSelector( - permissions[indexToUse].sig, - _generateParam(ParamCondition(indexToUse % 6), !param1Faulty), // since EQ - _generateParam(ParamCondition((indexToUse + 1) % 6), !param2Faulty) // since NOT_EQ - ), - Operation.Call - ) - ); - if (usingPaymasterMode != 0) { - // 0 = no paymaster - // 1 = unknown paymaster - // 2 = correct paymaster - op.paymasterAndData = usingPaymasterMode == 1 - ? abi.encodePacked(address(unknownPaymaster)) - : abi.encodePacked(address(paymaster)); - } - bytes memory enableData = abi.encodePacked( - sessionKey, - sessionData.merkleRoot, - sessionData.validAfter, - sessionData.validUntil, - sessionData.paymaster, - sessionData.nonce - ); - bytes32 digest = getTypedDataHash( - selector, - ValidAfter.unwrap(sessionData.validAfter), - ValidUntil.unwrap(sessionData.validUntil), - address(sessionKeyValidator), - address(0), - enableData - ); - (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, digest); - op.signature = abi.encodePacked( - bytes4(0x00000002), - uint48(ValidAfter.unwrap(sessionData.validAfter)), - uint48(ValidUntil.unwrap(sessionData.validUntil)), - address(sessionKeyValidator), - address(0), - uint256(enableData.length), - enableData, - uint256(65), - r, - s, - v - ); - } - - // scenarios to test - // mode - 1, 2 - // paymaster - must, any, none - // ExecRule - // - when there is runs => when runs expired - // - when there is validAfter => when validAfter is future - // - when there is interval => when interval is zero, when interval is not zero - // 21, 0, 2, 0, 0, 1, 0 - // 1, 0, 2, 0, 0, 1, 0 - // 0, 0, 12, 0, 2, 1, 0, 1, false - // 0, 0, 2, 0, 2, 1, 1, 7550702249 [7.55e9], false - struct TestConfig { - uint8 paymasterMode; - uint8 usingPaymasterMode; - uint8 numberOfPermissions; - uint8 indexToUse; - uint48 runs; - uint48 validAfter; - uint48 interval; - uint48 earlyRun; - bool faultySig; - bool param1Faulty; - bool param2Faulty; - bool wrongProof; - bool isDelegateCall; - } - - struct BatchTestConfig { - uint8 count; - } - - function test_scenario_batch(TestConfig memory config, BatchTestConfig memory batchConfig) public { - vm.warp(1000); - if (batchConfig.count == 0) { - batchConfig.count = 1; - } - config.runs = 0; - config.interval = 0; - config.validAfter = 0; // TODO: runs not checked with batch - vm.assume(!config.isDelegateCall); - vm.assume(config.indexToUse < config.numberOfPermissions && config.numberOfPermissions > 1); - vm.assume( - config.validAfter < type(uint32).max && config.interval < type(uint32).max && config.runs < type(uint32).max - ); - config.paymasterMode = config.paymasterMode % 3; - config.usingPaymasterMode = config.usingPaymasterMode % 3; - bool shouldFail = (config.usingPaymasterMode < config.paymasterMode) || (1000 < config.validAfter) - || config.faultySig || config.param1Faulty || config.param2Faulty || config.wrongProof; - config.runs = config.runs % 10; - config.earlyRun = config.runs == 0 ? 0 : config.earlyRun % config.runs; - if (config.interval == 0 || config.validAfter == 0) { - config.earlyRun = 0; - } - if (config.interval > 0) { - vm.assume(config.validAfter > 0 && config.validAfter < block.timestamp); - } else { - vm.assume(config.validAfter < block.timestamp); - } - // setup permissions - execRule = ExecutionRule({ - runs: config.runs, - validAfter: ValidAfter.wrap(config.validAfter), - interval: config.interval - }); - Permission[] memory permissions = _setup_permission(config.numberOfPermissions, false); - _buildHashes(permissions); - (uint128 lastNonce,) = sessionKeyValidator.nonces(address(kernel)); - SessionData memory sessionData = SessionData({ - merkleRoot: _getRoot(data), - validAfter: ValidAfter.wrap(config.validAfter), - validUntil: ValidUntil.wrap(0), - paymaster: config.paymasterMode == 2 ? address(paymaster) : address(uint160(config.paymasterMode)), - nonce: uint256(lastNonce) + 1 //lastNonce + 1 - }); - // now encode data to op - UserOperation memory op = _buildUserOpBatch( - permissions, - sessionData, - config.indexToUse, - config.usingPaymasterMode, - config.param1Faulty, - config.param2Faulty - ); - bytes32[][] memory proofs = new bytes32[][](batchConfig.count); - Permission[] memory usingPermission = new Permission[](batchConfig.count); - for (uint256 i = 0; i < batchConfig.count; i++) { - proofs[i] = _getProof(data, config.indexToUse, config.wrongProof); - usingPermission[i] = permissions[config.indexToUse]; - } - op.signature = bytes.concat( - op.signature, - abi.encodePacked( - sessionKey, - entryPoint.signUserOpHash(vm, config.faultySig ? sessionKeyPriv + 1 : sessionKeyPriv, op), - abi.encode(usingPermission, proofs) - ) - ); - - if (shouldFail) { - vm.expectRevert(); - } - performUserOperation(op); - if (config.interval > 0 && config.validAfter > 0 && !shouldFail) { - (ValidAfter updatedValidAfter, uint48 r) = sessionKeyValidator.executionStatus( - keccak256(abi.encodePacked(sessionData.nonce, uint32(config.indexToUse))), address(kernel) - ); - assertEq(uint256(ValidAfter.unwrap(updatedValidAfter)), uint256(config.validAfter)); - if (config.runs > 0) { - assertEq(uint256(r), uint256(1)); - } else { - assertEq(uint256(r), uint256(0)); - } - } - if (!shouldFail && config.runs > 0) { - for (uint256 i = 1; i < config.runs; i++) { - if (config.earlyRun != i) { - vm.warp(config.validAfter + config.interval * i); - } else { - vm.warp(config.validAfter + config.interval * i - 1); - } - op.nonce = op.nonce + 1; - op.signature = _getBatchActionSignature(op, permissions, config.indexToUse); - if (config.earlyRun == i) { - vm.expectRevert(); - } - performUserOperation(op); - if (config.earlyRun == i) { - vm.warp(config.validAfter + config.interval * i); - performUserOperation(op); - } - (ValidAfter updatedValidAfter, uint48 r) = sessionKeyValidator.executionStatus( - keccak256(abi.encodePacked(sessionData.nonce, uint32(config.indexToUse))), address(kernel) - ); - if (config.validAfter > 0 && config.interval > 0) { - assertEq( - uint256(ValidAfter.unwrap(updatedValidAfter)), uint256(config.validAfter + config.interval * i) - ); - } - if (config.runs > 0) { - assertEq(uint256(r), uint256(i + 1)); - } - } - op.nonce = op.nonce + 1; - op.signature = _getBatchActionSignature(op, permissions, config.indexToUse); - vm.expectRevert(); - performUserOperation(op); - } - } - - function test_scenario_non_batch(TestConfig memory config) public { - vm.warp(1000); - vm.assume(config.indexToUse < config.numberOfPermissions && config.numberOfPermissions > 1); - vm.assume( - config.validAfter < type(uint32).max && config.interval < type(uint32).max && config.runs < type(uint32).max - ); - config.paymasterMode = config.paymasterMode % 3; - config.usingPaymasterMode = config.usingPaymasterMode % 3; - bool shouldFail = (config.usingPaymasterMode < config.paymasterMode) || (1000 < config.validAfter) - || config.faultySig || (config.param1Faulty && !config.isDelegateCall) || config.param2Faulty - || config.wrongProof; - config.runs = config.runs % 10; - config.earlyRun = config.runs == 0 ? 0 : config.earlyRun % config.runs; - if (config.interval == 0 || config.validAfter == 0) { - config.earlyRun = 0; - } - if (config.interval > 0) { - vm.assume(config.validAfter > 0 && config.validAfter < block.timestamp); - } else { - vm.assume(config.validAfter < block.timestamp); - } - // setup permissions - execRule = ExecutionRule({ - runs: config.runs, - validAfter: ValidAfter.wrap(config.validAfter), - interval: config.interval - }); - Permission[] memory permissions = _setup_permission(config.numberOfPermissions, config.isDelegateCall); - _buildHashes(permissions); - (uint128 lastNonce,) = sessionKeyValidator.nonces(address(kernel)); - SessionData memory sessionData = SessionData({ - merkleRoot: _getRoot(data), - validAfter: ValidAfter.wrap(config.validAfter), - validUntil: ValidUntil.wrap(0), - paymaster: config.paymasterMode == 2 ? address(paymaster) : address(uint160(config.paymasterMode)), - nonce: uint256(lastNonce) + 1 //lastNonce + 1 - }); - // now encode data to op - UserOperation memory op = _buildUserOp( - permissions, - sessionData, - config.indexToUse, - config.usingPaymasterMode, - config.param1Faulty, - config.param2Faulty, - config.isDelegateCall - ); - op.signature = bytes.concat( - op.signature, - abi.encodePacked( - sessionKey, - entryPoint.signUserOpHash(vm, config.faultySig ? sessionKeyPriv + 1 : sessionKeyPriv, op), - abi.encode(permissions[config.indexToUse], _getProof(data, config.indexToUse, config.wrongProof)) - ) - ); - - if (shouldFail) { - vm.expectRevert(); - } - performUserOperation(op); - if (config.interval > 0 && config.validAfter > 0 && !shouldFail) { - (ValidAfter updatedValidAfter, uint48 r) = sessionKeyValidator.executionStatus( - keccak256(abi.encodePacked(sessionData.nonce, uint32(config.indexToUse))), address(kernel) - ); - assertEq(uint256(ValidAfter.unwrap(updatedValidAfter)), uint256(config.validAfter)); - if (config.runs > 0) { - assertEq(uint256(r), uint256(1)); - } else { - assertEq(uint256(r), uint256(0)); - } - } - if (!shouldFail && config.runs > 0) { - for (uint256 i = 1; i < config.runs; i++) { - if (config.earlyRun != i) { - vm.warp(config.validAfter + config.interval * i); - } else { - vm.warp(config.validAfter + config.interval * i - 1); - } - op.nonce = op.nonce + 1; - op.signature = _getSingleActionSignature(op, permissions, config.indexToUse); - if (config.earlyRun == i) { - vm.expectRevert(); - } - performUserOperation(op); - if (config.earlyRun == i) { - vm.warp(config.validAfter + config.interval * i); - performUserOperation(op); - } - (ValidAfter updatedValidAfter, uint48 r) = sessionKeyValidator.executionStatus( - keccak256(abi.encodePacked(sessionData.nonce, uint32(config.indexToUse))), address(kernel) - ); - if (config.validAfter > 0 && config.interval > 0) { - assertEq( - uint256(ValidAfter.unwrap(updatedValidAfter)), uint256(config.validAfter + config.interval * i) - ); - } - if (config.runs > 0) { - assertEq(uint256(r), uint256(i + 1)); - } - } - op.nonce = op.nonce + 1; - op.signature = _getSingleActionSignature(op, permissions, config.indexToUse); - vm.expectRevert(); - performUserOperation(op); - } - } - - function _getBatchActionSignature(UserOperation memory _op, Permission[] memory permissions, uint8 indexToUse) - internal - view - returns (bytes memory) - { - Permission[] memory _permissions = new Permission[](1); - _permissions[0] = permissions[indexToUse]; - bytes32[][] memory _proofs = new bytes32[][](1); - _proofs[0] = _getProof(data, indexToUse, false); - return abi.encodePacked( - bytes4(0x00000001), - abi.encodePacked( - sessionKey, entryPoint.signUserOpHash(vm, sessionKeyPriv, _op), abi.encode(_permissions, _proofs) - ) - ); - } - - function _getSingleActionSignature(UserOperation memory _op, Permission[] memory permissions, uint8 indexToUse) - internal - view - returns (bytes memory) - { - return abi.encodePacked( - bytes4(0x00000001), - abi.encodePacked( - sessionKey, - entryPoint.signUserOpHash(vm, sessionKeyPriv, _op), - abi.encode(permissions[indexToUse], _getProof(data, indexToUse, false)) - ) - ); - } -} diff --git a/test/foundry/validator/WebAuthnFclValidator.t.sol b/test/foundry/validator/WebAuthnFclValidator.t.sol deleted file mode 100644 index ec2134d2..00000000 --- a/test/foundry/validator/WebAuthnFclValidator.t.sol +++ /dev/null @@ -1,359 +0,0 @@ -// SPDX-License-Identifier: MIT -pragma solidity ^0.8.0; - -import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol"; -import "src/Kernel.sol"; -import "forge-std/Test.sol"; -import {ERC4337Utils} from "src/utils/ERC4337Utils.sol"; -import {KernelTestBase} from "src/utils/KernelTestBase.sol"; -import {TestExecutor} from "src/mock/TestExecutor.sol"; -import {TestValidator} from "src/mock/TestValidator.sol"; -import {WebAuthnFclVerifier} from "src/validator/webauthn/WebAuthnFclVerifier.sol"; -import {P256VerifierWrapper} from "src/utils/P256VerifierWrapper.sol"; -import {WebAuthnFclValidator} from "src/validator/webauthn/WebAuthnFclValidator.sol"; -import {FCL_ecdsa_utils} from "FreshCryptoLib/FCL_ecdsa_utils.sol"; -import {Base64Url} from "FreshCryptoLib/utils/Base64Url.sol"; -import {IKernel} from "src/interfaces/IKernel.sol"; - -using ERC4337Utils for IEntryPoint; - -contract WebAuthnFclValidatorTest is KernelTestBase { - WebAuthnFclValidator private webAuthNValidator; - WebAuthNTester private webAuthNTester; - P256VerifierWrapper private p256VerifierWrapper; - - // Curve order (number of points) - uint256 constant n = 0xFFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551; - - // The public key of the owner - uint256 x; - uint256 y; - - function setUp() public { - // Deploy a RIP-7212 compliant P256Verifier contract - p256VerifierWrapper = new P256VerifierWrapper(); - // Deploy a WebAuthnFclValidator contract using that RIP-7212 compliant P256Verifier contract - webAuthNValidator = new WebAuthnFclValidator(address(p256VerifierWrapper)); - - // Deploy a webAuthNTester that will be used to format the signature during test - webAuthNTester = new WebAuthNTester(); - - _initialize(); - (x, y) = _getPublicKey(ownerKey); - _setAddress(); - _setExecutionDetail(); - } - - function _setExecutionDetail() internal virtual override { - executionDetail.executor = address(new TestExecutor()); - executionSig = TestExecutor.doNothing.selector; - executionDetail.validator = new TestValidator(); - } - - function getValidatorSignature(UserOperation memory _op) internal view virtual override returns (bytes memory) { - bytes32 _hash = entryPoint.getUserOpHash(_op); - bytes memory signature = _generateWebAuthnSignature(ownerKey, _hash); - return abi.encodePacked(bytes4(0x00000000), signature); - } - - function getOwners() internal virtual override returns (address[] memory _owners) { - _owners = new address[](1); - _owners[0] = address(0); - return _owners; - } - - function getEnableData() internal view virtual override returns (bytes memory) { - return ""; - } - - function getInitializeData() internal view override returns (bytes memory) { - return abi.encodeWithSelector(KernelStorage.initialize.selector, webAuthNValidator, abi.encode(x, y)); - } - - function test_default_validator_enable() external override { - UserOperation memory op = buildUserOperation( - abi.encodeWithSelector( - IKernel.execute.selector, - address(webAuthNValidator), - 0, - abi.encodeWithSelector(webAuthNValidator.enable.selector, abi.encode(x, y)), - Operation.Call - ) - ); - performUserOperationWithSig(op); - (uint256 x2, uint256 y2) = WebAuthnFclValidator(address(webAuthNValidator)).getPublicKey(address(kernel)); - _assertPublicKey(x2, y2, x, y); - } - - function test_default_validator_disable() external override { - UserOperation memory op = buildUserOperation( - abi.encodeWithSelector( - IKernel.execute.selector, - address(webAuthNValidator), - 0, - abi.encodeWithSelector(webAuthNValidator.disable.selector, ""), - Operation.Call - ) - ); - performUserOperationWithSig(op); - (uint256 x2, uint256 y2) = WebAuthnFclValidator(address(webAuthNValidator)).getPublicKey(address(kernel)); - _assertPublicKey(x2, y2, 0, 0); - } - - function test_external_call_batch_execute_success() external override { - vm.skip(true); - } - - function test_external_call_execute_success() external override { - vm.skip(true); - } - - function test_external_call_execute_delegatecall_success() external override { - vm.skip(true); - } - - function test_external_call_execute_delegatecall_fail() external override { - vm.skip(true); - } - - function test_external_call_default() external override { - vm.skip(true); - } - - function test_external_call_execution() external override { - vm.skip(true); - } - - function test_validate_signature() external override { - bytes32 _hash = keccak256(abi.encodePacked("hello world")); - - bytes32 digest = keccak256( - abi.encodePacked( - "\x19\x01", ERC4337Utils._buildDomainSeparator(KERNEL_NAME, KERNEL_VERSION, address(kernel)), _hash - ) - ); - - bytes memory signature = signHash(digest); - - assertEq(kernel.isValidSignature(_hash, signature), Kernel.isValidSignature.selector); - } - - function test_fail_validate_wrongsignature() external override { - // Prepare the hash to sign - bytes32 _hash = keccak256(abi.encodePacked("hello world")); - bytes32 digest = keccak256( - abi.encodePacked( - "\x19\x01", ERC4337Utils._buildDomainSeparator(KERNEL_NAME, KERNEL_VERSION, address(kernel)), _hash - ) - ); - - // Sign it (via a wrong signer) - bytes memory sig = getWrongSignature(digest); - assertEq(kernel.isValidSignature(_hash, sig), bytes4(0xffffffff)); - } - - function test_fail_validate_InvalidWebAuthnData() external { - // Prepare the data to sign - bytes32 _hash = keccak256(abi.encodePacked("hello world")); - bytes32 digest = keccak256( - abi.encodePacked( - "\x19\x01", ERC4337Utils._buildDomainSeparator(KERNEL_NAME, KERNEL_VERSION, address(kernel)), _hash - ) - ); - - bytes32 _wrongHash = keccak256(abi.encodePacked("bye world")); - - // Sign it - bytes memory sig = signHash(digest); - - // Ensure it's reverting - vm.expectRevert("Kernel::_validateSignature: failed to validate signature"); - kernel.isValidSignature(_wrongHash, sig); - } - - function signUserOp(UserOperation memory op) internal view override returns (bytes memory) { - bytes32 _hash = entryPoint.getUserOpHash(op); - bytes memory signature = _generateWebAuthnSignature(ownerKey, _hash); - return abi.encodePacked(bytes4(0x00000000), signature); - } - - function getWrongSignature(UserOperation memory op) internal view override returns (bytes memory) { - bytes32 _hash = entryPoint.getUserOpHash(op); - bytes memory signature = _generateWebAuthnSignature(ownerKey + 1, _hash); - return abi.encodePacked(bytes4(0x00000000), signature); - } - - function signHash(bytes32 _hash) internal view override returns (bytes memory) { - return _generateWebAuthnSignature(ownerKey, _hash); - } - - function getWrongSignature(bytes32 _hash) internal view override returns (bytes memory) { - return _generateWebAuthnSignature(ownerKey + 1, _hash); - } - - function _assertPublicKey(uint256 actualX, uint256 actualY, uint256 expectedX, uint256 expectedY) internal { - assertEq(actualX, expectedX, "Public key X component mismatch"); - assertEq(actualY, expectedY, "Public key Y component mismatch"); - } - - /// @dev Ensure that the validation won't revert when using the dummy signature bypass (challenge offset to uint256.max) - function test_dontRevertForDummySig() public { - // Build rly dummy data for authenticator data and client data - bytes memory authenticatorData = hex"1312"; - bytes memory clientData = hex"1312"; - // Set the client challenge data offset to the max value - uint256 clientChallengeDataOffset = type(uint256).max; - - // Build an incoherent signature - uint256[2] memory rs = [type(uint256).max, type(uint256).max]; - - // Encode all of that into a signature - bytes memory signature = abi.encode(true, authenticatorData, clientData, clientChallengeDataOffset, rs); - - // Check the sig (and ensure we didn't revert here) - bool isValid = webAuthNTester.verifySignature(address(p256VerifierWrapper), bytes32(0), signature, x, y); - assertEq(isValid, false); - - // Ensure we can go through the validator with that signature - ValidationData validationData = webAuthNValidator.validateSignature(bytes32(0), signature); - assertEq(ValidationData.unwrap(validationData), 1); - } - - /// @dev Ensure that our flow to generate a webauthn signature is working - function test_webAuthnSignatureGeneration(bytes32 _hash, uint256 _privateKey) public { - vm.assume(_privateKey > 0); - vm.assume(_privateKey < n); - (uint256 pubX, uint256 pubY) = _getPublicKey(_privateKey); - - // Build all the data required - (bytes32 msgToSign, bytes memory authenticatorData, bytes memory clientData, uint256 clientChallengeDataOffset) - = _prepapreWebAuthnMsg(_hash); - - // Then sign them - (uint256 r, uint256 s) = _getP256Signature(_privateKey, msgToSign); - uint256[2] memory rs = [r, s]; - - // Encode all of that into a signature - bytes memory signature = abi.encode(true, authenticatorData, clientData, clientChallengeDataOffset, rs); - - // Ensure the signature is valid - bool isValid = webAuthNTester.verifySignature(address(p256VerifierWrapper), _hash, signature, pubX, pubY); - assertEq(isValid, true); - } - - /// @dev Ensure that our flow to generate a webauthn signature is working - function test_webAuthnSignatureGeneration_solo() public { - uint256 _privateKey = 0x1; - bytes32 _hash = keccak256(abi.encodePacked("hello world")); - (uint256 pubX, uint256 pubY) = _getPublicKey(_privateKey); - - // Build all the data required - (bytes32 msgToSign, bytes memory authenticatorData, bytes memory clientData, uint256 clientChallengeDataOffset) - = _prepapreWebAuthnMsg(_hash); - - // Then sign them - (uint256 r, uint256 s) = _getP256Signature(_privateKey, msgToSign); - uint256[2] memory rs = [r, s]; - - // Encode all of that into a signature - bytes memory signature = abi.encode(true, authenticatorData, clientData, clientChallengeDataOffset, rs); - - // Ensure the signature is valid - bool isValid = webAuthNTester.verifySignature(address(p256VerifierWrapper), _hash, signature, pubX, pubY); - assertEq(isValid, true); - } - - /* -------------------------------------------------------------------------- */ - /* Signature & P256 helper functions */ - /* -------------------------------------------------------------------------- */ - - /// @dev Generate a webauthn signature for the given `_hash` using the given `_privateKey` - function _generateWebAuthnSignature(uint256 _privateKey, bytes32 _hash) - internal - view - returns (bytes memory signature) - { - (bytes32 msgToSign, bytes memory authenticatorData, bytes memory clientData, uint256 clientChallengeDataOffset) - = _prepapreWebAuthnMsg(_hash); - - // Get the signature - (uint256 r, uint256 s) = _getP256Signature(_privateKey, msgToSign); - uint256[2] memory rs = [r, s]; - - // Return the signature - return abi.encode(true, authenticatorData, clientData, clientChallengeDataOffset, rs); - } - - /// @dev Prepare all the base data needed to perform a webauthn signature o n the given `_hash` - function _prepapreWebAuthnMsg(bytes32 _hash) - internal - view - returns ( - bytes32 msgToSign, - bytes memory authenticatorData, - bytes memory clientData, - uint256 clientChallengeDataOffset - ) - { - // Base Mapping of the message - bytes memory encodedChallenge = bytes(Base64Url.encode(abi.encodePacked(_hash))); - - // Prepare the authenticator data (from a real webauthn challenge) - authenticatorData = hex"49960de5880e8c687434170f6476605b8fe4aeb9a28632c7995cf3ba831d97630500000000"; - - // Prepare the client data (starting from a real webauthn challenge, then replacing only the bytes needed for the challenge) - bytes memory clientDataStart = hex"7b2274797065223a22776562617574686e2e676574222c226368616c6c656e6765223a22"; - bytes memory clientDataEnd = - hex"222c226f726967696e223a22687474703a2f2f6c6f63616c686f73743a33303032222c2263726f73734f726967696e223a66616c73657d"; - clientData = bytes.concat(clientDataStart, encodedChallenge, clientDataEnd); - clientChallengeDataOffset = 36; - - // Build the signature layout - WebAuthnFclVerifier.FclSignatureLayout memory sigLayout = WebAuthnFclVerifier.FclSignatureLayout({ - useOnChainP256Verifier: true, - authenticatorData: authenticatorData, - clientData: clientData, - challengeOffset: clientChallengeDataOffset, - // R/S not needed since the formatter will only use the other data - rs: [uint256(0), uint256(0)] - }); - - // Format it - msgToSign = webAuthNTester.formatSigLayout(_hash, sigLayout); - } - - /// @dev Get a public key for a p256 user, from the given `_privateKey` - function _getPublicKey(uint256 _privateKey) internal view returns (uint256, uint256) { - return FCL_ecdsa_utils.ecdsa_derivKpub(_privateKey); - } - - /// P256 curve order n/2 for malleability check - uint256 constant P256_N_DIV_2 = 57896044605178124381348723474703786764998477612067880171211129530534256022184; - - /// @dev Generate a p256 signature, from the given `_privateKey` on the given `_hash` - function _getP256Signature(uint256 _privateKey, bytes32 _hash) internal pure returns (uint256, uint256) { - // Generate the signature using the k value and the private key - (bytes32 r, bytes32 s) = vm.signP256(_privateKey, _hash); - return (uint256(r), uint256(s)); - } -} - -/// @dev simple contract to format a webauthn challenge (using to convert stuff in memory during test to calldata) -contract WebAuthNTester { - function formatSigLayout(bytes32 _hash, WebAuthnFclVerifier.FclSignatureLayout calldata signatureLayout) - public - view - returns (bytes32) - { - console.log("hash: %d", uint256(_hash)); - return WebAuthnFclVerifier._formatWebAuthNChallenge(_hash, signatureLayout); - } - - function verifySignature(address _p256Verifier, bytes32 _hash, bytes calldata _signature, uint256 _x, uint256 _y) - public - view - returns (bool) - { - return WebAuthnFclVerifier._verifyWebAuthNSignature(_p256Verifier, _hash, _signature, _x, _y); - } -} diff --git a/test/foundry/validator/WeightedECDSAValidator.t.sol b/test/foundry/validator/WeightedECDSAValidator.t.sol deleted file mode 100644 index b6e96853..00000000 --- a/test/foundry/validator/WeightedECDSAValidator.t.sol +++ /dev/null @@ -1,169 +0,0 @@ -pragma solidity ^0.8.0; - -import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol"; -import "src/Kernel.sol"; -import "src/validator/WeightedECDSAValidator.sol"; -// test artifacts -// test utils -import "forge-std/Test.sol"; -import {ERC4337Utils} from "src/utils/ERC4337Utils.sol"; -import {KernelTestBase} from "src/utils/KernelTestBase.sol"; -import {TestExecutor} from "src/mock/TestExecutor.sol"; -import {TestValidator} from "src/mock/TestValidator.sol"; -import {IKernel} from "src/interfaces/IKernel.sol"; - -using ERC4337Utils for IEntryPoint; - -contract KernelWeightedECDSATest is KernelTestBase { - address[] public owners; - uint256[] public ownerKeys; - uint24[] public weights; - uint24 public threshold; - uint48 public delay; - - function setUp() public virtual { - _initialize(); - defaultValidator = new WeightedECDSAValidator(); - owners = new address[](3); - ownerKeys = new uint256[](3); - (owners[0], ownerKeys[0]) = makeAddrAndKey("owner0"); - (owners[1], ownerKeys[1]) = makeAddrAndKey("owner1"); - (owners[2], ownerKeys[2]) = makeAddrAndKey("owner2"); - // sort owners and keys from largest to smallest owner address - for (uint256 i = 0; i < owners.length; i++) { - for (uint256 j = i + 1; j < owners.length; j++) { - if (owners[i] < owners[j]) { - address tempAddr = owners[i]; - owners[i] = owners[j]; - owners[j] = tempAddr; - uint256 tempKey = ownerKeys[i]; - ownerKeys[i] = ownerKeys[j]; - ownerKeys[j] = tempKey; - } - } - } - weights = [uint24(1), uint24(2), uint24(3)]; - threshold = 3; - delay = 0; - _setAddress(); - _setExecutionDetail(); - } - - function test_ignore() external {} - - function _setExecutionDetail() internal virtual override { - executionDetail.executor = address(new TestExecutor()); - executionSig = TestExecutor.doNothing.selector; - executionDetail.validator = new TestValidator(); - } - - function getEnableData() internal view virtual override returns (bytes memory) { - return ""; - } - - function getValidatorSignature(UserOperation memory) internal view virtual override returns (bytes memory) { - return ""; - } - - function getOwners() internal view override returns (address[] memory) { - return owners; - } - - function getInitializeData() internal view override returns (bytes memory) { - bytes memory data = abi.encode(owners, weights, threshold, delay); - return abi.encodeWithSelector(KernelStorage.initialize.selector, defaultValidator, data); - } - - function test_external_call_execute_success() external override { - vm.skip(true); - } - - function test_external_call_default() external override { - vm.skip(true); - } - - function test_external_call_execute_delegatecall_success() external override { - vm.skip(true); - } - - function test_external_call_batch_execute_success() external override { - vm.skip(true); - } - - function signUserOp(UserOperation memory op) internal view override returns (bytes memory) { - bytes32 calldataAndNonceHash = keccak256(abi.encode(op.sender, op.callData, op.nonce)); - - bytes32 digest = keccak256( - abi.encode( - keccak256("EIP712Domain(string name,string version,uint256 chainId,address verifyingContract)"), - keccak256("WeightedECDSAValidator"), - keccak256("0.0.3"), - block.chainid, - address(defaultValidator) - ) - ); - - bytes32 structHash = - keccak256(abi.encode(keccak256("Approve(bytes32 callDataAndNonceHash)"), calldataAndNonceHash)); - assembly { - // Compute the digest. - mstore(0x00, 0x1901000000000000) // Store "\x19\x01". - mstore(0x1a, digest) // Store the domain separator. - mstore(0x3a, structHash) // Store the struct hash. - digest := keccak256(0x18, 0x42) - // Restore the part of the free memory slot that was overwritten. - mstore(0x3a, 0) - } - - (uint8 v0, bytes32 r0, bytes32 s0) = vm.sign(ownerKeys[0], digest); - (uint8 v1, bytes32 r1, bytes32 s1) = vm.sign(ownerKeys[1], digest); - bytes memory opSig = entryPoint.signUserOpHash(vm, ownerKeys[2], op); - return abi.encodePacked(bytes4(0x00000000), r0, s0, v0, r1, s1, v1, opSig); - } - - function getWrongSignature(UserOperation memory op) internal view override returns (bytes memory) { - return abi.encodePacked(bytes4(0x00000000), entryPoint.signUserOpHash(vm, ownerKeys[0], op)); - } - - function signHash(bytes32 hash) internal view override returns (bytes memory) { - (uint8 v0, bytes32 r0, bytes32 s0) = vm.sign(ownerKeys[0], hash); - (uint8 v1, bytes32 r1, bytes32 s1) = vm.sign(ownerKeys[1], hash); - (uint8 v2, bytes32 r2, bytes32 s2) = vm.sign(ownerKeys[2], hash); - return abi.encodePacked(r0, s0, v0, r1, s1, v1, r2, s2, v2); - } - - function getWrongSignature(bytes32 hash) internal view override returns (bytes memory) { - (uint8 v0, bytes32 r0, bytes32 s0) = vm.sign(ownerKeys[1], hash); - (uint8 v1, bytes32 r1, bytes32 s1) = vm.sign(ownerKeys[0], hash); - (uint8 v2, bytes32 r2, bytes32 s2) = vm.sign(ownerKeys[2], hash); - return abi.encodePacked(r0, s0, v0, r1, s1, v1, r2, s2, v2); - } - - function test_default_validator_enable() external override { - //UserOperation memory op = buildUserOperation( - // abi.encodeWithSelector( - // IKernel.execute.selector, - // address(defaultValidator), - // 0, - // abi.encodeWithSelector(ECDSAValidator.enable.selector, abi.encodePacked(address(0xdeadbeef))), - // Operation.Call - // ) - //); - //performUserOperationWithSig(op); - //(address owner) = ECDSAValidator(address(defaultValidator)).ecdsaValidatorStorage(address(kernel)); - //assertEq(owner, address(0xdeadbeef), "owner should be 0xdeadbeef"); - } - - function test_default_validator_disable() external override { - UserOperation memory op = buildUserOperation( - abi.encodeWithSelector( - IKernel.execute.selector, - address(defaultValidator), - 0, - abi.encodeWithSelector(WeightedECDSAValidator.disable.selector, ""), - Operation.Call - ) - ); - performUserOperationWithSig(op); - } -} diff --git a/test/foundry/validator/modularPermission/ModularPermission.t.sol b/test/foundry/validator/modularPermission/ModularPermission.t.sol deleted file mode 100644 index 4f90216d..00000000 --- a/test/foundry/validator/modularPermission/ModularPermission.t.sol +++ /dev/null @@ -1,729 +0,0 @@ -pragma solidity ^0.8.0; - -import {IEntryPoint} from "I4337/interfaces/IEntryPoint.sol"; -import {IKernel} from "src/interfaces/IKernel.sol"; -import {Kernel} from "src/Kernel.sol"; -import {IKernelValidator} from "src/interfaces/IKernelValidator.sol"; -import {Operation} from "src/common/Enums.sol"; -import {toPermissionFlag} from "src/validator/modularPermission/PolicyConfig.sol"; -import "src/validator/modularPermission/ModularPermissionValidator.sol"; -import "src/validator/modularPermission/signers/ECDSASigner.sol"; -import "src/validator/modularPermission/mock/MockPolicy.sol"; -import "src/validator/modularPermission/mock/MockSigner.sol"; -import "src/validator/modularPermission/policies/EIP712Policy.sol"; -import "forge-std/Test.sol"; -import {KernelTestBase} from "src/utils/KernelTestBase.sol"; -import {TestExecutor} from "src/mock/TestExecutor.sol"; -import {TestValidator} from "src/mock/TestValidator.sol"; -import {KernelStorage} from "src/abstract/KernelStorage.sol"; -import {ERC4337Utils} from "src/utils/ERC4337Utils.sol"; -import {SignaturePolicy} from "src/validator/modularPermission/policies/SignaturePolicy.sol"; -import {EIP712} from "solady/utils/EIP712.sol"; -import {KERNEL_NAME, KERNEL_VERSION} from "src/common/Constants.sol"; - -using ERC4337Utils for IEntryPoint; - -contract ModularPermissionE2ETest is KernelTestBase { - ECDSASigner signer; - MockPolicy mockPolicy; - SignaturePolicy signaturePolicy; - address[] allowedCaller; - - function setUp() public virtual { - _initialize(); - defaultValidator = new ModularPermissionValidator(); - signer = new ECDSASigner(); - mockPolicy = new MockPolicy(); - signaturePolicy = new SignaturePolicy(); - allowedCaller = new address[](2); - allowedCaller[0] = makeAddr("app"); - allowedCaller[1] = address(0); - _setAddress(); - _setExecutionDetail(); - } - - function test_ignore() external {} - - function getPermissionId() internal view returns (bytes32) { - PolicyConfig[] memory p = new PolicyConfig[](2); - p[0] = PolicyConfigLib.pack(IPolicy(address(mockPolicy)), toFlag(0)); - p[1] = PolicyConfigLib.pack(IPolicy(address(signaturePolicy)), toFlag(1)); - bytes[] memory pd = new bytes[](2); - pd[0] = abi.encodePacked("policy data 1"); - pd[1] = abi.encode(allowedCaller); - - return ModularPermissionValidator(address(defaultValidator)).getPermissionId( - MAX_FLAG, signer, ValidAfter.wrap(0), ValidUntil.wrap(0), p, abi.encodePacked(owner), pd - ); - } - - function _setExecutionDetail() internal virtual override { - executionDetail.executor = address(new TestExecutor()); - executionSig = TestExecutor.doNothing.selector; - executionDetail.validator = new TestValidator(); - } - - function getEnableData() internal view virtual override returns (bytes memory) { - return ""; - } - - function getValidatorSignature(UserOperation memory) internal view virtual override returns (bytes memory) { - return ""; - } - - function getOwners() internal view override returns (address[] memory) { - address[] memory owners = new address[](1); - owners[0] = owner; - return owners; - } - - function getInitializeData() internal view override returns (bytes memory) { - bytes memory sd = abi.encodePacked(owner); - PolicyConfig[] memory p = new PolicyConfig[](2); - p[0] = PolicyConfigLib.pack(IPolicy(address(mockPolicy)), toFlag(0)); - p[1] = PolicyConfigLib.pack(IPolicy(address(signaturePolicy)), toFlag(1)); - bytes[] memory pd = new bytes[](2); - pd[0] = abi.encodePacked("policy data 1"); - pd[1] = abi.encode(allowedCaller); - bytes memory data = abi.encodePacked( - abi.encodePacked( - uint128(0), // nonce - MAX_FLAG, - uint48(0), //`validAfter - uint48(0), // validUntil - address(signer) - ), // signer - abi.encode(p, sd, pd) - ); - - return abi.encodeWithSelector(KernelStorage.initialize.selector, defaultValidator, data); - } - - function signUserOp(UserOperation memory op) internal view override returns (bytes memory) { - return abi.encodePacked(bytes4(0x00000000), getPermissionId(), entryPoint.signUserOpHash(vm, ownerKey, op)); - } - - function getWrongSignature(UserOperation memory op) internal view override returns (bytes memory) { - return abi.encodePacked(bytes4(0x00000000), getPermissionId(), entryPoint.signUserOpHash(vm, ownerKey + 1, op)); - } - - function signHash(bytes32 hash) internal view override returns (bytes memory) { - (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, hash); - return abi.encodePacked(getPermissionId(), r, s, v); - } - - function signHashWithoutPermissionId(bytes32 hash) internal view returns (bytes memory) { - (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey, hash); - return abi.encodePacked(r, s, v); - } - - function getWrongSignature(bytes32 hash) internal view override returns (bytes memory) { - (uint8 v, bytes32 r, bytes32 s) = vm.sign(ownerKey + 1, hash); - return abi.encodePacked(getPermissionId(), r, s, v); - } - - struct MData { - address kernel; - ValidUntil until; - bytes sd; - EIP712Policy eip712; - PolicyConfig[] p; - bytes32 domainSeparator; - bytes32 typeHash; - bytes32 encodeData; - bytes32 digest; - bytes[] pd; - } - - struct ModularPermissionConfig { - uint128 nonce; - bytes12 flag; - ISigner signer; - ValidAfter validAfter; - ValidUntil validUntil; - PolicyConfig firstPolicy; - } - - function test_sessionKey_signature() external { - MData memory d; - d.kernel = address(kernel); - d.until = ValidUntil.wrap(uint48(block.timestamp + 100)); - d.sd = abi.encodePacked(owner); - d.eip712 = new EIP712Policy(); - d.p = new PolicyConfig[](1); - d.p[0] = PolicyConfigLib.pack(d.eip712, toFlag(1)); // skip on userOp - - d.domainSeparator = keccak256("DOMAIN_SEPARATOR"); - d.typeHash = keccak256("TypeHash(bytes32 encodeData)"); - d.encodeData = bytes32(uint256(0xdeadbeef)); - d.digest = _hashTypedData(d.domainSeparator, keccak256(abi.encode(d.typeHash, d.encodeData))); - d.pd = new bytes[](1); - d.pd[0] = abi.encodePacked(d.domainSeparator, d.typeHash, bytes4(0), uint8(ParamRule.Equal), d.encodeData); - bytes32 permissionId = ModularPermissionValidator(address(defaultValidator)).getPermissionId( - toPermissionFlag(1), //flag - signer, - ValidAfter.wrap(1), - d.until, - d.p, - d.sd, - d.pd - ); - - bytes memory data = abi.encodePacked( - abi.encodePacked( - uint128(1), // nonce - toPermissionFlag(1), //flag - uint48(1), //`validAfter - d.until, // validUntil - address(signer) - ), // signer - abi.encode(d.p, d.sd, d.pd) - ); - vm.startPrank(d.kernel); - defaultValidator.enable(data); - vm.stopPrank(); - ModularPermissionConfig memory config; - - (config.nonce, config.flag, config.signer, config.firstPolicy, config.validAfter, config.validUntil) = - ModularPermissionValidator(address(defaultValidator)).permissions(permissionId, d.kernel); - assertEq(config.nonce, uint128(1)); - assertEq(config.flag, toPermissionFlag(1)); - assertEq(ValidAfter.unwrap(config.validAfter), uint48(1)); - assertEq(ValidUntil.unwrap(config.validUntil), ValidUntil.unwrap(d.until)); - assertEq(address(config.signer), address(signer)); - bytes32 wrappedDigest = keccak256( - abi.encodePacked( - "\x19\x01", ERC4337Utils._buildDomainSeparator(KERNEL_NAME, KERNEL_VERSION, address(kernel)), d.digest - ) - ); - - bytes4 res = kernel.isValidSignature( - d.digest, - abi.encodePacked( - permissionId, - d.eip712, - uint256(100), - d.domainSeparator, - d.typeHash, - uint32(1), - uint256(d.encodeData), // you should put all data here - signHashWithoutPermissionId(wrappedDigest) - ) - ); - assertEq(res, Kernel.isValidSignature.selector); - } - - function test_sessionKey_signature_greater_than() external { - MData memory d; - d.kernel = address(kernel); - d.until = ValidUntil.wrap(uint48(block.timestamp + 100)); - d.sd = abi.encodePacked(owner); - d.eip712 = new EIP712Policy(); - d.p = new PolicyConfig[](1); - d.p[0] = PolicyConfigLib.pack(d.eip712, toFlag(1)); // skip on userOp - - d.domainSeparator = keccak256("DOMAIN_SEPARATOR"); - d.typeHash = keccak256("TypeHash(bytes32 encodeData)"); - d.encodeData = bytes32(uint256(0xdeadbeef)); - d.digest = _hashTypedData(d.domainSeparator, keccak256(abi.encode(d.typeHash, uint256(d.encodeData) + 1))); - d.pd = new bytes[](1); - d.pd[0] = abi.encodePacked(d.domainSeparator, d.typeHash, bytes4(0), uint8(ParamRule.GreaterThan), d.encodeData); - bytes32 permissionId = ModularPermissionValidator(address(defaultValidator)).getPermissionId( - toPermissionFlag(1), //flag - signer, - ValidAfter.wrap(1), - d.until, - d.p, - d.sd, - d.pd - ); - - bytes memory data = abi.encodePacked( - abi.encodePacked( - uint128(1), // nonce - toPermissionFlag(1), //flag - uint48(1), //`validAfter - d.until, // validUntil - address(signer) - ), // signer - abi.encode(d.p, d.sd, d.pd) - ); - vm.startPrank(d.kernel); - defaultValidator.enable(data); - vm.stopPrank(); - ModularPermissionConfig memory config; - - (config.nonce, config.flag, config.signer, config.firstPolicy, config.validAfter, config.validUntil) = - ModularPermissionValidator(address(defaultValidator)).permissions(permissionId, d.kernel); - assertEq(config.nonce, uint128(1)); - assertEq(config.flag, toPermissionFlag(1)); - assertEq(ValidAfter.unwrap(config.validAfter), uint48(1)); - assertEq(ValidUntil.unwrap(config.validUntil), ValidUntil.unwrap(d.until)); - assertEq(address(config.signer), address(signer)); - bytes32 wrappedDigest = keccak256( - abi.encodePacked( - "\x19\x01", ERC4337Utils._buildDomainSeparator(KERNEL_NAME, KERNEL_VERSION, address(kernel)), d.digest - ) - ); - - bytes4 res = kernel.isValidSignature( - d.digest, - abi.encodePacked( - permissionId, - d.eip712, - uint256(100), - d.domainSeparator, - d.typeHash, - uint32(1), - uint256(d.encodeData) + 1, // you should put all data here - signHashWithoutPermissionId(wrappedDigest) - ) - ); - assertEq(res, Kernel.isValidSignature.selector); - } - - function test_default_validator_enable() external override { - UserOperation memory op = buildUserOperation( - abi.encodeWithSelector( - IKernel.execute.selector, - address(defaultValidator), - 0, - abi.encodeWithSelector(IKernelValidator.enable.selector, abi.encodePacked(address(0xdeadbeef))), - Operation.Call - ) - ); - bytes memory sd = abi.encodePacked(owner); - PolicyConfig[] memory p = new PolicyConfig[](1); - p[0] = PolicyConfigLib.pack(IPolicy(address(mockPolicy)), toFlag(0)); - bytes[] memory pd = new bytes[](1); - pd[0] = abi.encodePacked("policy data 2"); - bytes memory data = abi.encodePacked( - abi.encodePacked( - uint128(0), // nonce - MAX_FLAG, //flag - uint48(0), //`validAfter - uint48(0), // validUntil - address(signer) - ), // signer - abi.encode(p, sd, pd) - ); - performUserOperationWithSig(op); - } - - function test_default_validator_disable() external override { - UserOperation memory op = buildUserOperation( - abi.encodeWithSelector( - IKernel.execute.selector, - address(defaultValidator), - 0, - abi.encodeWithSelector(IKernelValidator.disable.selector, abi.encodePacked(getPermissionId())), - Operation.Call - ) - ); - performUserOperationWithSig(op); - } - - function test_external_call_execute_success() external override { - vm.skip(true); - } - - function test_external_call_default() external override { - vm.skip(true); - } - - function test_external_call_execute_delegatecall_success() external override { - vm.skip(true); - } - - function test_external_call_batch_execute_success() external override { - vm.skip(true); - } - - function test_external_call_execution() external override { - vm.skip(true); - } -} - -contract ModularPermissionUnitTest is Test { - ModularPermissionValidator validator; - - MockSigner mockSigner; - MockPolicy mockPolicy; - - function setUp() external { - validator = new ModularPermissionValidator(); - mockPolicy = new MockPolicy(); - mockSigner = new MockSigner(); - } - - function testParseData() external { - uint48 until = uint48(block.timestamp + 100); - bytes memory sd = abi.encodePacked("hello world"); - PolicyConfig[] memory p = new PolicyConfig[](2); - p[0] = PolicyConfigLib.pack(IPolicy(address(0xdeadbeef)), toFlag(0)); - p[1] = PolicyConfigLib.pack(IPolicy(address(0xcafecafe)), toFlag(0)); - bytes[] memory pd = new bytes[](2); - pd[0] = abi.encodePacked("policy data 1"); - pd[1] = abi.encodePacked("policy data 2"); - bytes memory data = abi.encodePacked( - abi.encodePacked( - uint128(0), // nonce - MAX_FLAG, //flag - uint48(1), //`validAfter - until, // validUntil - address(0xdead) - ), // signer - abi.encode(p, sd, pd) - ); - ( - uint128 nonce, - bytes12 flag, - ISigner signer, - ValidAfter validAfter, - ValidUntil validUntil, - PolicyConfig[] memory policies, - bytes memory signerData, - bytes[] memory policyData - ) = validator.parseData(data); - assertEq(nonce, uint128(0)); - assertEq(flag, MAX_FLAG); - assertEq(ValidAfter.unwrap(validAfter), uint48(1)); - assertEq(ValidUntil.unwrap(validUntil), until); - assertEq(address(signer), address(0xdead)); - assertEq(address(PolicyConfigLib.getAddress(policies[0])), address(0xdeadbeef)); - assertEq(address(PolicyConfigLib.getAddress(policies[1])), address(0xcafecafe)); - assertEq(signerData, abi.encodePacked("hello world")); - assertEq(policyData[0], abi.encodePacked("policy data 1")); - assertEq(policyData[1], abi.encodePacked("policy data 2")); - } - - function testRegister() external { - uint48 until = uint48(block.timestamp + 100); - bytes memory sd = abi.encodePacked("hello signer"); - PolicyConfig[] memory p = new PolicyConfig[](1); - p[0] = PolicyConfigLib.pack(IPolicy(address(mockPolicy)), toFlag(0)); - bytes[] memory pd = new bytes[](1); - pd[0] = abi.encodePacked("hello policy"); - bytes memory data = abi.encodePacked( - abi.encodePacked( - uint128(0), // nonce - MAX_FLAG, //flag - uint48(1), //`validAfter - until, // validUntil - address(mockSigner) - ), // signer - abi.encode(p, sd, pd) - ); - validator.enable(data); - } - - struct ModularPermissionConfig { - uint128 nonce; - bytes12 flag; - ISigner signer; - ValidAfter validAfter; - ValidUntil validUntil; - PolicyConfig firstPolicy; - } - - function testValidateUserOpSkip() external { - address kernel = makeAddr("Kernel"); - ValidUntil until = ValidUntil.wrap(uint48(block.timestamp + 100)); - bytes memory sd = abi.encodePacked("hello signer"); - MockPolicy skipPolicy = new MockPolicy(); - PolicyConfig[] memory p = new PolicyConfig[](2); - p[0] = PolicyConfigLib.pack(mockPolicy, toFlag(0)); - p[1] = PolicyConfigLib.pack(skipPolicy, toFlag(1)); // skip - - bytes[] memory pd = new bytes[](2); - pd[0] = abi.encodePacked("hello policy"); - pd[1] = abi.encodePacked("hello policy 2"); - bytes32 permissionId = validator.getPermissionId( - toPermissionFlag(0), //flag - mockSigner, - ValidAfter.wrap(1), - until, - p, - sd, - pd - ); - - bytes memory data = abi.encodePacked( - abi.encodePacked( - uint128(0), // nonce - toPermissionFlag(0), //flag - uint48(1), //`validAfter - until, // validUntil - address(mockSigner) - ), // signer - abi.encode(p, sd, pd) - ); - vm.startPrank(kernel); - validator.enable(data); - vm.stopPrank(); - - ModularPermissionConfig memory config; - - (config.nonce, config.flag, config.signer, config.firstPolicy, config.validAfter, config.validUntil) = - validator.permissions(permissionId, kernel); - assertEq(config.nonce, uint128(0)); - assertEq(config.flag, toPermissionFlag(0)); - assertEq(ValidAfter.unwrap(config.validAfter), uint48(1)); - assertEq(ValidUntil.unwrap(config.validUntil), ValidUntil.unwrap(until)); - assertEq(address(config.signer), address(mockSigner)); - assertEq(address(PolicyConfigLib.getAddress(config.firstPolicy)), address(mockPolicy)); - - assertEq(mockSigner.signerData(), sd); - assertEq(mockPolicy.policyData(), pd[0]); - UserOperation memory op; - op.sender = kernel; - op.signature = abi.encodePacked(permissionId); - vm.startPrank(kernel); - validator.validateUserOp(op, keccak256(abi.encodePacked("hello")), 0); - vm.stopPrank(); - - assertEq(mockSigner.count(permissionId), 1); - assertEq(mockPolicy.count(permissionId), 1); - assertEq(skipPolicy.count(permissionId), 0); - } - - struct MData { - address kernel; - ValidUntil until; - bytes sd; - EIP712Policy eip712; - PolicyConfig[] p; - bytes32 domainSeparator; - bytes32 typeHash; - bytes32 encodeData; - bytes32 digest; - bytes[] pd; - } - - function testValidateSignature() external { - MData memory d; - d.kernel = makeAddr("Kernel"); - d.until = ValidUntil.wrap(uint48(block.timestamp + 100)); - d.sd = abi.encodePacked("hello signer"); - d.eip712 = new EIP712Policy(); - d.p = new PolicyConfig[](1); - d.p[0] = PolicyConfigLib.pack(d.eip712, toFlag(1)); // skip on userOp - - d.domainSeparator = keccak256("DOMAIN_SEPARATOR"); - d.typeHash = keccak256("TypeHash(bytes32 encodeData)"); - d.encodeData = bytes32(uint256(0xdeadbeef)); - d.digest = _hashTypedData(d.domainSeparator, keccak256(abi.encode(d.typeHash, d.encodeData))); - d.pd = new bytes[](1); - d.pd[0] = abi.encodePacked(d.domainSeparator, d.typeHash, bytes4(0), uint8(ParamRule.Equal), d.encodeData); - bytes32 permissionId = validator.getPermissionId( - toPermissionFlag(1), //flag - mockSigner, - ValidAfter.wrap(1), - d.until, - d.p, - d.sd, - d.pd - ); - - bytes memory data = abi.encodePacked( - abi.encodePacked( - uint128(0), // nonce - toPermissionFlag(1), //flag - uint48(1), //`validAfter - d.until, // validUntil - address(mockSigner) - ), // signer - abi.encode(d.p, d.sd, d.pd) - ); - vm.startPrank(d.kernel); - validator.enable(data); - vm.stopPrank(); - - ModularPermissionConfig memory config; - - (config.nonce, config.flag, config.signer, config.firstPolicy, config.validAfter, config.validUntil) = - validator.permissions(permissionId, d.kernel); - assertEq(config.nonce, uint128(0)); - assertEq(config.flag, toPermissionFlag(1)); - assertEq(ValidAfter.unwrap(config.validAfter), uint48(1)); - assertEq(ValidUntil.unwrap(config.validUntil), ValidUntil.unwrap(d.until)); - assertEq(address(config.signer), address(mockSigner)); - - UserOperation memory op; - op.sender = d.kernel; - op.signature = abi.encodePacked(permissionId); - vm.startPrank(d.kernel); - (bool success, bytes memory ret) = address(validator).call( - abi.encodePacked( - abi.encodeWithSelector( - ModularPermissionValidator.validateSignature.selector, - d.digest, - abi.encodePacked( - permissionId, d.eip712, uint256(100), d.domainSeparator, d.typeHash, uint32(1), d.encodeData - ) - ), - d.digest, - makeAddr("app") - ) - ); - require(address(uint160(bytes20(bytes32(ret) << 96))) == address(0)); - require(success); - vm.stopPrank(); - vm.startPrank(d.kernel); - d.digest = _hashTypedData(d.domainSeparator, keccak256(abi.encode(d.typeHash, uint256(d.encodeData) + 1))); - (success, ret) = address(validator).call( - abi.encodePacked( - abi.encodeWithSelector( - ModularPermissionValidator.validateSignature.selector, - d.digest, - abi.encodePacked( - permissionId, - d.eip712, - uint256(100), - d.domainSeparator, - d.typeHash, - uint32(1), - uint256(d.encodeData) + 1 - ) - ), - d.digest, - makeAddr("app") - ) - ); - require(address(uint160(bytes20(bytes32(ret) << 96))) == address(1)); - require(success); - vm.stopPrank(); - } - - function testValidateSignatureSkip() external { - address kernel = makeAddr("Kernel"); - ValidUntil until = ValidUntil.wrap(uint48(block.timestamp + 100)); - bytes memory sd = abi.encodePacked("hello signer"); - MockPolicy skipPolicy = new MockPolicy(); - PolicyConfig[] memory p = new PolicyConfig[](2); - p[0] = PolicyConfigLib.pack(mockPolicy, toFlag(0)); - p[1] = PolicyConfigLib.pack(skipPolicy, toFlag(2)); // skip on signature - skipPolicy.mock(0, 0, true, true); - - bytes[] memory pd = new bytes[](2); - pd[0] = abi.encodePacked("hello policy"); - pd[1] = abi.encodePacked("hello policy 2"); - bytes32 permissionId = validator.getPermissionId( - MAX_FLAG, //flag - mockSigner, - ValidAfter.wrap(1), - until, - p, - sd, - pd - ); - - bytes memory data = abi.encodePacked( - abi.encodePacked( - uint128(0), // nonce - MAX_FLAG, //flag - uint48(1), //`validAfter - until, // validUntil - address(mockSigner) - ), // signer - abi.encode(p, sd, pd) - ); - vm.startPrank(kernel); - validator.enable(data); - vm.stopPrank(); - - ModularPermissionConfig memory config; - - (config.nonce, config.flag, config.signer, config.firstPolicy, config.validAfter, config.validUntil) = - validator.permissions(permissionId, kernel); - assertEq(config.nonce, uint128(0)); - assertEq(config.flag, MAX_FLAG); - assertEq(ValidAfter.unwrap(config.validAfter), uint48(1)); - assertEq(ValidUntil.unwrap(config.validUntil), ValidUntil.unwrap(until)); - assertEq(address(config.signer), address(mockSigner)); - assertEq(address(PolicyConfigLib.getAddress(config.firstPolicy)), address(mockPolicy)); - - assertEq(mockSigner.signerData(), sd); - assertEq(mockPolicy.policyData(), pd[0]); - UserOperation memory op; - op.sender = kernel; - op.signature = abi.encodePacked(permissionId); - vm.startPrank(kernel); - vm.expectRevert(); - validator.validateSignature(keccak256(abi.encodePacked("hello")), ""); - vm.stopPrank(); - } - - function testValidateUserOp() external { - address kernel = makeAddr("Kernel"); - ValidUntil until = ValidUntil.wrap(uint48(block.timestamp + 100)); - bytes memory sd = abi.encodePacked("hello signer"); - PolicyConfig[] memory p = new PolicyConfig[](1); - p[0] = PolicyConfigLib.pack(mockPolicy, toFlag(0)); - bytes[] memory pd = new bytes[](1); - pd[0] = abi.encodePacked("hello policy"); - bytes32 permissionId = validator.getPermissionId( - MAX_FLAG, //flag - mockSigner, - ValidAfter.wrap(1), - until, - p, - sd, - pd - ); - - bytes memory data = abi.encodePacked( - abi.encodePacked( - uint128(0), // nonce - MAX_FLAG, //flag - uint48(1), //`validAfter - until, // validUntil - address(mockSigner) - ), // signer - abi.encode(p, sd, pd) - ); - vm.startPrank(kernel); - validator.enable(data); - vm.stopPrank(); - - ( - uint128 nonce, - bytes12 flag, - ISigner signer, - PolicyConfig firstPolicy, - ValidAfter validAfter, - ValidUntil validUntil - ) = validator.permissions(permissionId, kernel); - assertEq(nonce, uint128(0)); - assertEq(flag, MAX_FLAG); - assertEq(ValidAfter.unwrap(validAfter), uint48(1)); - assertEq(ValidUntil.unwrap(validUntil), ValidUntil.unwrap(until)); - assertEq(address(signer), address(mockSigner)); - assertEq(address(PolicyConfigLib.getAddress(firstPolicy)), address(mockPolicy)); - - assertEq(mockSigner.signerData(), sd); - assertEq(mockPolicy.policyData(), pd[0]); - UserOperation memory op; - op.sender = kernel; - op.signature = abi.encodePacked(permissionId); - vm.startPrank(kernel); - validator.validateUserOp(op, keccak256(abi.encodePacked("hello")), 0); - vm.stopPrank(); - - assertEq(mockSigner.count(permissionId), 1); - assertEq(mockPolicy.count(permissionId), 1); - } -} - -function _hashTypedData(bytes32 domain, bytes32 structHash) pure returns (bytes32 digest) { - /// @solidity memory-safe-assembly - assembly { - // Compute the digest. - mstore(0x00, 0x1901000000000000) // Store "\x19\x01". - mstore(0x1a, domain) // Store the domain separator. - mstore(0x3a, structHash) // Store the struct hash. - digest := keccak256(0x18, 0x42) - // Restore the part of the free memory slot that was overwritten. - mstore(0x3a, 0) - } -} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 00000000..4061a53d --- /dev/null +++ b/yarn.lock @@ -0,0 +1,4004 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@adraffy/ens-normalize@1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== + +"@colors/colors@1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" + integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + +"@ethersproject/abi@5.7.0", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abstract-provider@5.7.0", "@ethersproject/abstract-provider@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz#b0a8550f88b6bf9d51f90e4795d48294630cb9ef" + integrity sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + +"@ethersproject/abstract-signer@5.7.0", "@ethersproject/abstract-signer@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz#13f4f32117868452191a4649723cb086d2b596b2" + integrity sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/address@5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.1.tgz#ab57818d9aefee919c5721d28cd31fd95eff413d" + integrity sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/rlp" "^5.6.1" + +"@ethersproject/address@5.7.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.7.0.tgz#19b56c4d74a3b0a46bfdbb6cfcc0a153fc697f37" + integrity sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + +"@ethersproject/base64@5.7.0", "@ethersproject/base64@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.7.0.tgz#ac4ee92aa36c1628173e221d0d01f53692059e1c" + integrity sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + +"@ethersproject/basex@5.7.0", "@ethersproject/basex@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.7.0.tgz#97034dc7e8938a8ca943ab20f8a5e492ece4020b" + integrity sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + +"@ethersproject/bignumber@5.7.0", "@ethersproject/bignumber@^5.6.2", "@ethersproject/bignumber@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.7.0.tgz#e2f03837f268ba655ffba03a57853e18a18dc9c2" + integrity sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.7.0", "@ethersproject/bytes@^5.6.1", "@ethersproject/bytes@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.7.0.tgz#a00f6ea8d7e7534d6d87f47188af1148d71f155d" + integrity sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/constants@5.7.0", "@ethersproject/constants@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.7.0.tgz#df80a9705a7e08984161f09014ea012d1c75295e" + integrity sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + +"@ethersproject/contracts@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.7.0.tgz#c305e775abd07e48aa590e1a877ed5c316f8bd1e" + integrity sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg== + dependencies: + "@ethersproject/abi" "^5.7.0" + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + +"@ethersproject/hash@5.7.0", "@ethersproject/hash@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.7.0.tgz#eb7aca84a588508369562e16e514b539ba5240a7" + integrity sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/hdnode@5.7.0", "@ethersproject/hdnode@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.7.0.tgz#e627ddc6b466bc77aebf1a6b9e47405ca5aef9cf" + integrity sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/json-wallets@5.7.0", "@ethersproject/json-wallets@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz#5e3355287b548c32b368d91014919ebebddd5360" + integrity sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g== + dependencies: + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/pbkdf2" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.7.0", "@ethersproject/keccak256@^5.6.1", "@ethersproject/keccak256@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.7.0.tgz#3186350c6e1cd6aba7940384ec7d6d9db01f335a" + integrity sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.7.0", "@ethersproject/logger@^5.6.0", "@ethersproject/logger@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.7.0.tgz#6ce9ae168e74fecf287be17062b590852c311892" + integrity sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig== + +"@ethersproject/networks@5.7.1", "@ethersproject/networks@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.7.1.tgz#118e1a981d757d45ccea6bb58d9fd3d9db14ead6" + integrity sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/pbkdf2@5.7.0", "@ethersproject/pbkdf2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz#d2267d0a1f6e123f3771007338c47cccd83d3102" + integrity sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + +"@ethersproject/properties@5.7.0", "@ethersproject/properties@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.7.0.tgz#a6e12cb0439b878aaf470f1902a176033067ed30" + integrity sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw== + dependencies: + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/providers@5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/random@5.7.0", "@ethersproject/random@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.7.0.tgz#af19dcbc2484aae078bb03656ec05df66253280c" + integrity sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/rlp@5.7.0", "@ethersproject/rlp@^5.6.1", "@ethersproject/rlp@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.7.0.tgz#de39e4d5918b9d74d46de93af80b7685a9c21304" + integrity sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/sha2@5.7.0", "@ethersproject/sha2@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.7.0.tgz#9a5f7a7824ef784f7f7680984e593a800480c9fb" + integrity sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.7.0", "@ethersproject/signing-key@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.7.0.tgz#06b2df39411b00bc57c7c09b01d1e41cf1b16ab3" + integrity sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + bn.js "^5.2.1" + elliptic "6.5.4" + hash.js "1.1.7" + +"@ethersproject/solidity@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.7.0.tgz#5e9c911d8a2acce2a5ebb48a5e2e0af20b631cb8" + integrity sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/strings@5.7.0", "@ethersproject/strings@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.7.0.tgz#54c9d2a7c57ae8f1205c88a9d3a56471e14d5ed2" + integrity sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/transactions@5.7.0", "@ethersproject/transactions@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.7.0.tgz#91318fc24063e057885a6af13fdb703e1f993d3b" + integrity sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + +"@ethersproject/units@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.7.0.tgz#637b563d7e14f42deeee39245275d477aae1d8b1" + integrity sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg== + dependencies: + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + +"@ethersproject/wallet@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.7.0.tgz#4e5d0790d96fe21d61d38fb40324e6c7ef350b2d" + integrity sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/hdnode" "^5.7.0" + "@ethersproject/json-wallets" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/signing-key" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/wordlists" "^5.7.0" + +"@ethersproject/web@5.7.1", "@ethersproject/web@^5.7.0": + version "5.7.1" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.7.1.tgz#de1f285b373149bee5928f4eb7bcb87ee5fbb4ae" + integrity sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w== + dependencies: + "@ethersproject/base64" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/wordlists@5.7.0", "@ethersproject/wordlists@^5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.7.0.tgz#8fb2c07185d68c3e09eb3bfd6e779ba2774627f5" + integrity sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA== + dependencies: + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.4.15" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" + integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@metamask/eth-sig-util@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^6.2.1" + ethjs-util "^0.1.6" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" + +"@noble/curves@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/curves@1.3.0", "@noble/curves@~1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.3.0.tgz#01be46da4fd195822dab821e72f71bf4aeec635e" + integrity sha512-t01iSXPuN+Eqzb4eBX0S5oubSqXbK/xXa1Ne18Hj8f9pStxztHCE2gfboSp/dZRLSqfuLpRK2nDXDK+W9puocA== + dependencies: + "@noble/hashes" "1.3.3" + +"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== + +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@noble/hashes@1.3.3", "@noble/hashes@~1.3.2": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" + integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== + +"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nomicfoundation/edr-darwin-arm64@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.3.3.tgz#0618dbdf1c832f8e61c77540e7188c13fdd5b658" + integrity sha512-E9VGsUD+1Ga4mn/5ooHsMi8JEfhZbKP6CXN/BhJ8kXbIC10NqTD1RuhCKGRtYq4vqH/3Nfq25Xg8E8RWOF4KBQ== + +"@nomicfoundation/edr-darwin-x64@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.3.3.tgz#567ee0bca8d019085e8dd95330e7c03f16c66a79" + integrity sha512-vkZXZ1ydPg+Ijb2iyqENA+KCkxGTCUWG5itCSliiA0Li2YE7ujDMGhheEpFp1WVlZadviz0bfk1rZXbCqlirpg== + +"@nomicfoundation/edr-linux-arm64-gnu@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.3.3.tgz#3956b4d7a0127e2259351626c92698c4ce6ecf05" + integrity sha512-gdIg0Yj1qqS9wVuywc5B/+DqKylfUGB6/CQn/shMqwAfsAVAVpchkhy66PR+REEx7fh/GkNctxLlENXPeLzDiA== + +"@nomicfoundation/edr-linux-arm64-musl@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.3.3.tgz#139f801939ed467f1719a2ab014993838008eefb" + integrity sha512-AXZ08MFvhNeBZbOBNmz1SJ/DMrMOE2mHEJtaNnsctlxIunjxfrWww4q+WXB34jbr9iaVYYlPsaWe5sueuw6s3Q== + +"@nomicfoundation/edr-linux-x64-gnu@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.3.3.tgz#b5994caa1a8bb4afca5f079ad7dd99edb26c6c45" + integrity sha512-xElOs1U+E6lBLtv1mnJ+E8nr2MxZgKiLo8bZAgBboy9odYtmkDVwhMjtsFKSuZbGxFtsSyGRT4cXw3JAbtUDeA== + +"@nomicfoundation/edr-linux-x64-musl@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.3.3.tgz#536c1d1dfd2fc7d7ad6ed6e14ed9a12322d88ba6" + integrity sha512-2Fe6gwm1RAGQ/PfMYiaSba2OrFp8zzYWh+am9lYObOFjV9D+A1zhIzfy0UC74glPks5eV8eY4pBPrVR042m2Nw== + +"@nomicfoundation/edr-win32-arm64-msvc@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-arm64-msvc/-/edr-win32-arm64-msvc-0.3.3.tgz#f71609644d8585c2ec71580bf75c2fd036ee58b0" + integrity sha512-8NHyxIsFrl0ufSQ/ErqF2lKIa/gz1gaaa1a2vKkDEqvqCUcPhBTYhA5NHgTPhLETFTnCFr0z+YbctFCyjh4qrA== + +"@nomicfoundation/edr-win32-ia32-msvc@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-ia32-msvc/-/edr-win32-ia32-msvc-0.3.3.tgz#baa5eaacb1fff107d02f0e6a33dee9521fd2bf37" + integrity sha512-0F6hM0kGia4dQVb/kauho9JcP1ozWisY2/She+ISR5ceuhzmAwQJluM0g+0TYDME0LtxBxiMPq/yPiZMQeq31w== + +"@nomicfoundation/edr-win32-x64-msvc@0.3.3": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.3.3.tgz#7562e061b2481f87bb1ace30513a2ad38c469836" + integrity sha512-d75q1uaMb6z9i+GQZoblbOfFBvlBnWc+5rB13UWRkCOJSnoYwyFWhGJx5GeM59gC7aIblc5VD9qOAhHuvM9N+w== + +"@nomicfoundation/edr@^0.3.1": + version "0.3.3" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.3.3.tgz#0ed8619ea2ac644bf87cdc09dd1a8f465a859bcc" + integrity sha512-zP+e+3B1nEUx6bW5BPnIzCQbkhmYfdMBJdiVggTqqTfAA82sOkdOG7wsOMcz5qF3fYfx/irNRM1kgc9HVFIbpQ== + optionalDependencies: + "@nomicfoundation/edr-darwin-arm64" "0.3.3" + "@nomicfoundation/edr-darwin-x64" "0.3.3" + "@nomicfoundation/edr-linux-arm64-gnu" "0.3.3" + "@nomicfoundation/edr-linux-arm64-musl" "0.3.3" + "@nomicfoundation/edr-linux-x64-gnu" "0.3.3" + "@nomicfoundation/edr-linux-x64-musl" "0.3.3" + "@nomicfoundation/edr-win32-arm64-msvc" "0.3.3" + "@nomicfoundation/edr-win32-ia32-msvc" "0.3.3" + "@nomicfoundation/edr-win32-x64-msvc" "0.3.3" + +"@nomicfoundation/ethereumjs-common@4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz#9901f513af2d4802da87c66d6f255b510bef5acb" + integrity sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg== + dependencies: + "@nomicfoundation/ethereumjs-util" "9.0.4" + +"@nomicfoundation/ethereumjs-rlp@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz#66c95256fc3c909f6fb18f6a586475fc9762fa30" + integrity sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw== + +"@nomicfoundation/ethereumjs-tx@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz#b0ceb58c98cc34367d40a30d255d6315b2f456da" + integrity sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-util@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz#84c5274e82018b154244c877b76bc049a4ed7b38" + integrity sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/hardhat-chai-matchers@^2.0.0": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.6.tgz#ef88be3bd666adf29c06ac7882e96c8dbaaa32ba" + integrity sha512-Te1Uyo9oJcTCF0Jy9dztaLpshmlpjLf2yPtWXlXuLjMt3RRSmJLm/+rKVTW6gfadAEs12U/it6D0ZRnnRGiICQ== + dependencies: + "@types/chai-as-promised" "^7.1.3" + chai-as-promised "^7.1.1" + deep-eql "^4.0.1" + ordinal "^1.0.3" + +"@nomicfoundation/hardhat-ethers@^3.0.0": + version "3.0.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.5.tgz#0422c2123dec7c42e7fb2be8e1691f1d9708db56" + integrity sha512-RNFe8OtbZK6Ila9kIlHp0+S80/0Bu/3p41HUpaRIoHLm6X3WekTd83vob3rE54Duufu1edCiBDxspBzi2rxHHw== + dependencies: + debug "^4.1.1" + lodash.isequal "^4.5.0" + +"@nomicfoundation/hardhat-foundry@^1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-foundry/-/hardhat-foundry-1.1.1.tgz#db72b1f33f9cfaecc27e67f69ad436f8710162d6" + integrity sha512-cXGCBHAiXas9Pg9MhMOpBVQCkWRYoRFG7GJJAph+sdQsfd22iRs5U5Vs9XmpGEQd1yEvYISQZMeE68Nxj65iUQ== + dependencies: + chalk "^2.4.2" + +"@nomicfoundation/hardhat-ignition-ethers@^0.15.0": + version "0.15.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.0.tgz#d59bffe8930baf845afa083ca55885096862a6fd" + integrity sha512-KmMNUc/jptfwdPA9ukQf+Ajon+m2vLBjDL2ze7d/vQdrS+fDxmoVwmbbEk4GOjianZcwgQOWD9dEWaj04QiowA== + +"@nomicfoundation/hardhat-ignition@^0.15.0": + version "0.15.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.0.tgz#f5c01f311d54b44764c2c99d4766b82f2d9d49ad" + integrity sha512-GbAe90O22uM67U/JnffXX+mBMn0HqCKSH+D98Tb5uWqR1N/M00cB3yY8OdqzVai7I6SuIKTc91mPdvtWt8R3MA== + dependencies: + "@nomicfoundation/ignition-core" "^0.15.0" + "@nomicfoundation/ignition-ui" "^0.15.0" + chalk "^4.0.0" + debug "^4.3.2" + fs-extra "^10.0.0" + prompts "^2.4.2" + +"@nomicfoundation/hardhat-network-helpers@^1.0.0": + version "1.0.10" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.10.tgz#c61042ceb104fdd6c10017859fdef6529c1d6585" + integrity sha512-R35/BMBlx7tWN5V6d/8/19QCwEmIdbnA4ZrsuXgvs8i2qFx5i7h6mH5pBS4Pwi4WigLH+upl6faYusrNPuzMrQ== + dependencies: + ethereumjs-util "^7.1.4" + +"@nomicfoundation/hardhat-toolbox@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-5.0.0.tgz#165b47f8a3d2bf668cc5d453ce7f496a1156948d" + integrity sha512-FnUtUC5PsakCbwiVNsqlXVIWG5JIb5CEZoSXbJUsEBun22Bivx2jhF1/q9iQbzuaGpJKFQyOhemPB2+XlEE6pQ== + +"@nomicfoundation/hardhat-verify@^2.0.0": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.5.tgz#dcc2cb5e5c55a39704c7d492436f80f05a4ca5a3" + integrity sha512-Tg4zu8RkWpyADSFIgF4FlJIUEI4VkxcvELsmbJn2OokbvH2SnUrqKmw0BBfDrtvP0hhmx8wsnrRKP5DV/oTyTA== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@ethersproject/address" "^5.0.2" + cbor "^8.1.0" + chalk "^2.4.2" + debug "^4.1.1" + lodash.clonedeep "^4.5.0" + semver "^6.3.0" + table "^6.8.0" + undici "^5.14.0" + +"@nomicfoundation/ignition-core@^0.15.0": + version "0.15.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ignition-core/-/ignition-core-0.15.0.tgz#28ad7da61d4c1e50d6ead09e8c92881b59c176cf" + integrity sha512-d/h8jgJHY4xIroHqdaGeTkTqjQeuzmU759AOn1Fg88cuxVhS7JM22ZI0bQWyLNSMsVstHBIo+lSMIsvm9jBF2w== + dependencies: + "@ethersproject/address" "5.6.1" + cbor "^9.0.0" + debug "^4.3.2" + ethers "^6.7.0" + fs-extra "^10.0.0" + immer "10.0.2" + lodash "4.17.21" + ndjson "2.0.0" + +"@nomicfoundation/ignition-ui@^0.15.0": + version "0.15.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.0.tgz#0c1bd3e0d673fe44a48a5a30b8f43f7d8395b8ff" + integrity sha512-RBvvQ0e8RcEc/LoSzNTPVKZZ5vEwlmxt7PXG278+6DqCrOqxqmh6W9PtK/4mwwvnTeBqds+8j81jDf6vJbOVBQ== + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.1.tgz#4c858096b1c17fe58a474fe81b46815f93645c15" + integrity sha512-KcTodaQw8ivDZyF+D76FokN/HdpgGpfjc/gFCImdLUyqB6eSWVaZPazMbeAjmfhx3R0zm/NYVzxwAokFKgrc0w== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.1.tgz#6e25ccdf6e2d22389c35553b64fe6f3fdaec432c" + integrity sha512-XhQG4BaJE6cIbjAVtzGOGbK3sn1BO9W29uhk9J8y8fZF1DYz0Doj8QDMfpMu+A6TjPDs61lbsmeYodIDnfveSA== + +"@nomicfoundation/solidity-analyzer-freebsd-x64@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-freebsd-x64/-/solidity-analyzer-freebsd-x64-0.1.1.tgz#0a224ea50317139caeebcdedd435c28a039d169c" + integrity sha512-GHF1VKRdHW3G8CndkwdaeLkVBi5A9u2jwtlS7SLhBc8b5U/GcoL39Q+1CSO3hYqePNP+eV5YI7Zgm0ea6kMHoA== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.1.tgz#dfa085d9ffab9efb2e7b383aed3f557f7687ac2b" + integrity sha512-g4Cv2fO37ZsUENQ2vwPnZc2zRenHyAxHcyBjKcjaSmmkKrFr64yvzeNO8S3GBFCo90rfochLs99wFVGT/0owpg== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.1.tgz#c9e06b5d513dd3ab02a7ac069c160051675889a4" + integrity sha512-WJ3CE5Oek25OGE3WwzK7oaopY8xMw9Lhb0mlYuJl/maZVo+WtP36XoQTb7bW/i8aAdHW5Z+BqrHMux23pvxG3w== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.1.tgz#8d328d16839e52571f72f2998c81e46bf320f893" + integrity sha512-5WN7leSr5fkUBBjE4f3wKENUy9HQStu7HmWqbtknfXkkil+eNWiBV275IOlpXku7v3uLsXTOKpnnGHJYI2qsdA== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.1.tgz#9b49d0634b5976bb5ed1604a1e1b736f390959bb" + integrity sha512-KdYMkJOq0SYPQMmErv/63CwGwMm5XHenEna9X9aB8mQmhDBrYrlAOSsIPgFCUSL0hjxE3xHP65/EPXR/InD2+w== + +"@nomicfoundation/solidity-analyzer-win32-arm64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-arm64-msvc/-/solidity-analyzer-win32-arm64-msvc-0.1.1.tgz#e2867af7264ebbcc3131ef837878955dd6a3676f" + integrity sha512-VFZASBfl4qiBYwW5xeY20exWhmv6ww9sWu/krWSesv3q5hA0o1JuzmPHR4LPN6SUZj5vcqci0O6JOL8BPw+APg== + +"@nomicfoundation/solidity-analyzer-win32-ia32-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-ia32-msvc/-/solidity-analyzer-win32-ia32-msvc-0.1.1.tgz#0685f78608dd516c8cdfb4896ed451317e559585" + integrity sha512-JnFkYuyCSA70j6Si6cS1A9Gh1aHTEb8kOTBApp/c7NRTFGNMH8eaInKlyuuiIbvYFhlXW4LicqyYuWNNq9hkpQ== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.1": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.1.tgz#c9a44f7108646f083b82e851486e0f6aeb785836" + integrity sha512-HrVJr6+WjIXGnw3Q9u6KQcbZCtk0caVWhCdFADySvRyUxJ8PnzlaP+MhwNE8oyT8OZ6ejHBRrrgjSqDCFXGirw== + +"@nomicfoundation/solidity-analyzer@^0.1.0": + version "0.1.1" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.1.tgz#f5f4d36d3f66752f59a57e7208cd856f3ddf6f2d" + integrity sha512-1LMtXj1puAxyFusBgUIy5pZk3073cNXYnXUpuNKFghHbIit/xZgbk0AokpUADbNm3gyD6bFWl3LRFh3dhVdREg== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.1" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-freebsd-x64" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.1" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-arm64-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-ia32-msvc" "0.1.1" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.1" + +"@scure/base@~1.1.0", "@scure/base@~1.1.4": + version "1.1.6" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.6.tgz#8ce5d304b436e4c84f896e0550c83e4d88cb917d" + integrity sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g== + +"@scure/bip32@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" + integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== + dependencies: + "@noble/hashes" "~1.2.0" + "@noble/secp256k1" "~1.7.0" + "@scure/base" "~1.1.0" + +"@scure/bip32@1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.3.3.tgz#a9624991dc8767087c57999a5d79488f48eae6c8" + integrity sha512-LJaN3HwRbfQK0X1xFSi0Q9amqOgzQnnDngIt+ZlsBC3Bm7/nE7K0kwshZHyaru79yIVRv/e1mQAjZyuZG6jOFQ== + dependencies: + "@noble/curves" "~1.3.0" + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + +"@scure/bip39@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" + integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== + dependencies: + "@noble/hashes" "~1.2.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.2.2.tgz#f3426813f4ced11a47489cbcf7294aa963966527" + integrity sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA== + dependencies: + "@noble/hashes" "~1.3.2" + "@scure/base" "~1.1.4" + +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@solidity-parser/parser@^0.14.0": + version "0.14.5" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" + integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== + dependencies: + antlr4ts "^0.5.0-alpha.4" + +"@solidity-parser/parser@^0.18.0": + version "0.18.0" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.18.0.tgz#8e77a02a09ecce957255a2f48c9a7178ec191908" + integrity sha512-yfORGUIPgLck41qyN7nbwJRAx17/jAIXCTanHOJZhB6PJ1iAk/84b/xlsVKFSyNyLXIj0dhppoE0+CRws7wlzA== + +"@tsconfig/node10@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@typechain/ethers-v6@^0.5.0": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz#42fe214a19a8b687086c93189b301e2b878797ea" + integrity sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA== + dependencies: + lodash "^4.17.15" + ts-essentials "^7.0.1" + +"@typechain/hardhat@^9.0.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-9.1.0.tgz#6985015f01dfb37ef2ca8a29c742d05890351ddc" + integrity sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA== + dependencies: + fs-extra "^9.1.0" + +"@types/bn.js@^4.11.3": + 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== + dependencies: + "@types/node" "*" + +"@types/bn.js@^5.1.0": + version "5.1.5" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.5.tgz#2e0dacdcce2c0f16b905d20ff87aedbc6f7b4bf0" + integrity sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A== + dependencies: + "@types/node" "*" + +"@types/chai-as-promised@^7.1.3": + version "7.1.8" + resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz#f2b3d82d53c59626b5d6bbc087667ccb4b677fe9" + integrity sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw== + dependencies: + "@types/chai" "*" + +"@types/chai@*", "@types/chai@4": + version "4.3.14" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.14.tgz#ae3055ea2be43c91c9fd700a36d67820026d96e6" + integrity sha512-Wj71sXE4Q4AkGdG9Tvq1u/fquNz9EdG4LIJMwVVII7ashjD/8cf8fyIfJAjRr6YcsXnSE8cOGQPq1gqeR8z+3w== + +"@types/concat-stream@^1.6.0": + 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" "*" + +"@types/form-data@0.0.33": + version "0.0.33" + resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" + integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== + dependencies: + "@types/node" "*" + +"@types/glob@^7.1.1": + 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" "*" + +"@types/lru-cache@^5.1.0": + 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 "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + +"@types/mocha@^10.0.6": + version "10.0.6" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.6.tgz#818551d39113081048bdddbef96701b4e8bb9d1b" + integrity sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg== + +"@types/node@*", "@types/node@^20.12.5": + version "20.12.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.12.5.tgz#74c4f31ab17955d0b5808cdc8fd2839526ad00b3" + integrity sha512-BD+BjQ9LS/D8ST9p5uqBxghlN+S42iuNxjsUGjeZobe/ciXzk2qb1B6IXc6AnRLS+yFJRpN2IPEHMzwspfDJNw== + dependencies: + undici-types "~5.26.4" + +"@types/node@18.15.13": + version "18.15.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.13.tgz#f64277c341150c979e42b00e4ac289290c9df469" + integrity sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q== + +"@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@^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/pbkdf2@^3.0.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" + integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== + dependencies: + "@types/node" "*" + +"@types/prettier@^2.1.1": + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + +"@types/qs@^6.2.31": + version "6.9.14" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.14.tgz#169e142bfe493895287bee382af6039795e9b75b" + integrity sha512-5khscbd3SwWMhFqylJBLQ0zIu7c1K6Vz0uBIt915BI3zV0q1nfjRQD3RqSBcPaO6PHEF4ov/t9y89fSiyThlPA== + +"@types/secp256k1@^4.0.1": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" + integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== + dependencies: + "@types/node" "*" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== + +acorn-walk@^8.1.1: + version "8.3.2" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.2.tgz#7703af9415f1b6db9315d6895503862e231d34aa" + integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A== + +acorn@^8.4.1: + version "8.11.3" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.3.tgz#71e0b14e13a4ec160724b38fb7b0f233b1b81d7a" + integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg== + +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^8.0.1: + version "8.12.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1" + integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA== + 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" + integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== + +ansi-align@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + +ansi-colors@4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.1.tgz#cbb9ae256bf750af1eab344f229aa27fe94ba348" + integrity sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA== + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +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-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +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.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +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-back@^3.0.1, array-back@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + +array-back@^4.0.1, array-back@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" + integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +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== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async@1.x: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +axios@^1.5.1: + version "1.6.8" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.6.8.tgz#66d294951f5d988a00e87a0ffb955316a619ea66" + integrity sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.9" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.9.tgz#6349aaabb58526332de9f60995e548a53fe21320" + integrity sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ== + dependencies: + safe-buffer "^5.0.1" + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + +bn.js@^4.11.0, 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.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +boxen@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.2, braces@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" + integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== + dependencies: + fill-range "^7.0.1" + +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +buffer-from@^1.0.0: + 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-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" + integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + set-function-length "^1.2.1" + +camelcase@^6.0.0, camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caseless@^0.12.0, caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +cbor@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" + integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== + dependencies: + nofilter "^3.1.0" + +cbor@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-9.0.2.tgz#536b4f2d544411e70ec2b19a2453f10f83cd9fdb" + integrity sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ== + dependencies: + nofilter "^3.1.0" + +chai-as-promised@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.1.tgz#08645d825deb8696ee61725dbf590c012eb00ca0" + integrity sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA== + dependencies: + check-error "^1.0.2" + +chai@4: + version "4.4.1" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.4.1.tgz#3603fa6eba35425b0f2ac91a009fe924106e50d1" + integrity sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" + pathval "^1.1.1" + type-detect "^4.0.8" + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0: + 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" + +"charenc@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + +check-error@^1.0.2, check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +chokidar@3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^3.4.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" + integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cli-table3@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + +cli-table3@^0.6.0: + version "0.6.4" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.4.tgz#d1c536b8a3f2e7bec58f67ac9e5769b1b30088b0" + integrity sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw== + dependencies: + string-width "^4.2.0" + optionalDependencies: + "@colors/colors" "1.5.0" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colors@1.4.0, colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.6, combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +command-line-args@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" + integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== + dependencies: + array-back "^3.1.0" + find-replace "^3.0.0" + lodash.camelcase "^4.3.0" + typical "^4.0.0" + +command-line-usage@^6.1.0: + version "6.1.3" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" + integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== + dependencies: + array-back "^4.0.2" + chalk "^2.4.2" + table-layout "^1.0.2" + typical "^5.2.0" + +commander@3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" + integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^1.6.0, concat-stream@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +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== + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +"crypt@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== + +death@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" + integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== + +debug@4, debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +deep-eql@^4.0.1, deep-eql@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.3.tgz#7c7775513092f7df98d8df9996dd085eb668cc6d" + integrity sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== + dependencies: + type-detect "^4.0.0" + +deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + 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== + +define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.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" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +diff@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.0.0.tgz#7ed6ad76d859d030787ec35855f5b1daf31d852b" + integrity sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +difflib@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" + integrity sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w== + dependencies: + heap ">= 0.2.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +elliptic@6.5.4: + version "6.5.4" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.4.tgz#da37cebd31e79a1367e941b592ed1fbebd58abbb" + integrity sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +elliptic@^6.5.2, elliptic@^6.5.4: + version "6.5.5" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.5.tgz#c715e09f78b6923977610d4c2346d6ce22e6dded" + integrity sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +enquirer@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + +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== + +es-define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" + integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== + dependencies: + get-intrinsic "^1.2.4" + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +escalade@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" + integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== + +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== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A== + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +esprima@2.7.x, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eth-gas-reporter@^0.2.25: + version "0.2.27" + resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz#928de8548a674ed64c7ba0bf5795e63079150d4e" + integrity sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw== + dependencies: + "@solidity-parser/parser" "^0.14.0" + axios "^1.5.1" + cli-table3 "^0.5.0" + colors "1.4.0" + ethereum-cryptography "^1.0.3" + ethers "^5.7.2" + fs-readdir-recursive "^1.1.0" + lodash "^4.17.14" + markdown-table "^1.1.3" + mocha "^10.2.0" + req-cwd "^2.0.0" + sha1 "^1.1.1" + sync-request "^6.0.0" + +ethereum-bloom-filters@^1.0.6: + 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" + +ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" + integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== + dependencies: + "@noble/hashes" "1.2.0" + "@noble/secp256k1" "1.7.1" + "@scure/bip32" "1.1.5" + "@scure/bip39" "1.1.1" + +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.1.3.tgz#1352270ed3b339fe25af5ceeadcf1b9c8e30768a" + integrity sha512-BlwbIL7/P45W8FGW2r7LGuvoEZ+7PWsniMvQ4p5s2xCyw9tmaDlpfsN9HjAucbF+t/qpVHwZUisgfK24TCW8aA== + dependencies: + "@noble/curves" "1.3.0" + "@noble/hashes" "1.3.3" + "@scure/bip32" "1.3.3" + "@scure/bip39" "1.2.2" + +ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethereumjs-util@^7.1.4: + version "7.1.5" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethers@^5.7.2: + version "5.7.2" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" + integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== + dependencies: + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/abstract-signer" "5.7.0" + "@ethersproject/address" "5.7.0" + "@ethersproject/base64" "5.7.0" + "@ethersproject/basex" "5.7.0" + "@ethersproject/bignumber" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/constants" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/hash" "5.7.0" + "@ethersproject/hdnode" "5.7.0" + "@ethersproject/json-wallets" "5.7.0" + "@ethersproject/keccak256" "5.7.0" + "@ethersproject/logger" "5.7.0" + "@ethersproject/networks" "5.7.1" + "@ethersproject/pbkdf2" "5.7.0" + "@ethersproject/properties" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/random" "5.7.0" + "@ethersproject/rlp" "5.7.0" + "@ethersproject/sha2" "5.7.0" + "@ethersproject/signing-key" "5.7.0" + "@ethersproject/solidity" "5.7.0" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/units" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@ethersproject/web" "5.7.1" + "@ethersproject/wordlists" "5.7.0" + +ethers@^6.4.0, ethers@^6.7.0: + version "6.11.1" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.11.1.tgz#96aae00b627c2e35f9b0a4d65c7ab658259ee6af" + integrity sha512-mxTAE6wqJQAbp5QAe/+o+rXOID7Nw91OZXvgpjDa1r4fAbq2Nu314oEZSbjoRLacuCzs7kUC3clEvkCQowffGg== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "18.15.13" + aes-js "4.0.0-beta.5" + tslib "2.4.0" + ws "8.5.0" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6, ethjs-util@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +fast-deep-equal@^3.1.1: + 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== + +fast-glob@^3.0.3: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fastq@^1.6.0: + version "1.17.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" + integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + dependencies: + reusify "^1.0.4" + +fill-range@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" + integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== + dependencies: + to-regex-range "^5.0.1" + +find-replace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" + integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== + dependencies: + array-back "^3.0.1" + +find-up@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.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 sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ== + dependencies: + locate-path "^2.0.0" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +follow-redirects@^1.12.1, follow-redirects@^1.15.6: + version "1.15.6" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" + integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + +form-data@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +form-data@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" + integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + mime-types "^2.1.12" + +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + +fs-extra@^0.30.0: + version "0.30.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-0.30.0.tgz#f233ffcc08d4da7d432daa449776989db1df93f0" + integrity sha512-UvSPKyhMn6LEd/WpUaV9C9t3zATuqoqfWc3QdPhPLb58prN9tqYPlPWi8Krxi44loBoUzlobqZ3+8tGpxxSzwA== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^2.1.0" + klaw "^1.0.0" + path-is-absolute "^1.0.0" + rimraf "^2.2.8" + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^7.0.0, fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +get-intrinsic@^1.1.3, get-intrinsic@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" + integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + has-proto "^1.0.1" + has-symbols "^1.0.3" + hasown "^2.0.0" + +get-port@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== + +ghost-testrpc@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz#c4de9557b1d1ae7b2d20bbe474a91378ca90ce92" + integrity sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ== + dependencies: + chalk "^2.4.2" + node-emoji "^1.10.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@7.2.0: + 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" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +gopd@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" + integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== + dependencies: + get-intrinsic "^1.1.3" + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +handlebars@^4.0.1: + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +hardhat-contract-sizer@^2.10.0: + version "2.10.0" + resolved "https://registry.yarnpkg.com/hardhat-contract-sizer/-/hardhat-contract-sizer-2.10.0.tgz#72646f43bfe50e9a5702c9720c9bc3e77d93a2c9" + integrity sha512-QiinUgBD5MqJZJh1hl1jc9dNnpJg7eE/w4/4GEnrcmZJJTDbVFNe3+/3Ep24XqISSkYxRz36czcPHKHd/a0dwA== + dependencies: + chalk "^4.0.0" + cli-table3 "^0.6.0" + strip-ansi "^6.0.0" + +hardhat-gas-reporter@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz#ebe5bda5334b5def312747580cd923c2b09aef1b" + integrity sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA== + dependencies: + array-uniq "1.0.3" + eth-gas-reporter "^0.2.25" + sha1 "^1.1.1" + +hardhat-spdx-license-identifier@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/hardhat-spdx-license-identifier/-/hardhat-spdx-license-identifier-2.2.0.tgz#af6fa4de88b822dbcb62b085e4d9d2156b20af27" + integrity sha512-audxGrmLL/TGr0Ef/p3tEH8frtygCb+9RWbMQtd1w2p5V6HzQsSJUlAJFywZZ/igQ6B1qAKqAbeLePNclEe2Qw== + +hardhat@^2.22.2: + version "2.22.2" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.2.tgz#0cadd7ec93bf39bab09f81603e75bc5e92acea3d" + integrity sha512-0xZ7MdCZ5sJem4MrvpQWLR3R3zGDoHw5lsR+pBFimqwagimIOn3bWuZv69KA+veXClwI1s/zpqgwPwiFrd4Dxw== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@metamask/eth-sig-util" "^4.0.0" + "@nomicfoundation/edr" "^0.3.1" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + "@nomicfoundation/solidity-analyzer" "^0.1.0" + "@sentry/node" "^5.18.1" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "^5.1.0" + adm-zip "^0.4.16" + aggregate-error "^3.0.0" + ansi-escapes "^4.3.0" + boxen "^5.1.2" + chalk "^2.4.2" + chokidar "^3.4.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + ethereum-cryptography "^1.0.3" + ethereumjs-abi "^0.6.8" + find-up "^2.1.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + glob "7.2.0" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + keccak "^3.0.2" + lodash "^4.17.11" + mnemonist "^0.38.0" + mocha "^10.0.0" + p-map "^4.0.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + solc "0.7.3" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + tsort "0.0.1" + undici "^5.14.0" + uuid "^8.3.2" + ws "^7.4.6" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" + integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== + +has-symbols@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" + integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +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== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasown@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +"heap@>= 0.2.0": + version "0.2.7" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" + integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +http-basic@^8.1.1: + version "8.1.3" + resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" + integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== + dependencies: + caseless "^0.12.0" + concat-stream "^1.6.2" + http-response-object "^3.0.1" + parse-cache-control "^1.0.1" + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-response-object@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" + integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== + dependencies: + "@types/node" "^10.0.3" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore@^5.1.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" + integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + +immer@10.0.2: + version "10.0.2" + resolved "https://registry.yarnpkg.com/immer/-/immer-10.0.2.tgz#11636c5b77acf529e059582d76faf338beb56141" + integrity sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA== + +immutable@^4.0.0-rc.12: + version "4.3.5" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.5.tgz#f8b436e66d59f99760dc577f5c99a4fd2a5cc5a0" + integrity sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.13.0: + version "2.13.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" + integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== + dependencies: + hasown "^2.0.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 sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +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" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-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" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +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-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +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" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-yaml@3.x: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +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" + +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-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +jsonfile@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-2.4.0.tgz#3736a2b428b87bbda0cc83b53fa3d633a35c2ae8" + integrity sha512-PKllAqbgLgxHaj8TElYymKCAgrASebJrWpTnEkOaTowt23VKXXN0sUeriJ+eh7y6ufb/CC5ap11pz71/cM0hUw== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.4: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.4.1.tgz#cc4c3f0077fb4542982973d8a083b6b34f482dab" + integrity sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ== + +keccak@^3.0.0, keccak@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.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== + +klaw@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/klaw/-/klaw-1.3.1.tgz#4088433b46b3b1ba259d78785d8e96f73ba02439" + integrity sha512-TED5xi9gGQjGpNnvRWknrwAB1eL5GciPfVFOt3Vk1OJCVDQbzuSfrF3hkUQKlsgKrG1F+0t5W0m+Fje1jIt8rw== + optionalDependencies: + graceful-fs "^4.1.9" + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +locate-path@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" + integrity sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA== + dependencies: + p-locate "^2.0.0" + path-exists "^3.0.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +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" + +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== + dependencies: + get-func-name "^2.0.1" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +markdown-table@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +merge2@^1.2.3, merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + +micromatch@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" + integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== + dependencies: + braces "^3.0.2" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "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.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.0.1.tgz#fb9022f7528125187c92bd9e9b6366be1cf3415b" + integrity sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@0.5.x: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mnemonist@^0.38.0: + version "0.38.5" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== + dependencies: + obliterator "^2.0.0" + +mocha@^10.0.0, mocha@^10.2.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.4.0.tgz#ed03db96ee9cfc6d20c56f8e2af07b961dbae261" + integrity sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA== + dependencies: + ansi-colors "4.1.1" + browser-stdout "1.3.1" + chokidar "3.5.3" + debug "4.3.4" + diff "5.0.0" + escape-string-regexp "4.0.0" + find-up "5.0.0" + glob "8.1.0" + he "1.2.0" + js-yaml "4.1.0" + log-symbols "4.1.0" + minimatch "5.0.1" + ms "2.1.3" + serialize-javascript "6.0.0" + strip-json-comments "3.1.1" + supports-color "8.1.1" + workerpool "6.2.1" + yargs "16.2.0" + yargs-parser "20.2.4" + yargs-unparser "2.0.0" + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +ndjson@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ndjson/-/ndjson-2.0.0.tgz#320ac86f6fe53f5681897349b86ac6f43bfa3a19" + integrity sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ== + dependencies: + json-stringify-safe "^5.0.1" + minimist "^1.2.5" + readable-stream "^3.6.0" + split2 "^3.0.0" + through2 "^4.0.0" + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +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: + 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 "^4.17.21" + +node-gyp-build@^4.2.0: + version "4.8.0" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.0.tgz#3fee9c1731df4581a3f9ead74664369ff00d26dd" + integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== + +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" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== + dependencies: + abbrev "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== + +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" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.1: + version "1.13.1" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" + integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== + +obliterator@^2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.4.tgz#fa650e019b2d075d745e44f1effeb13a2adbe816" + integrity sha512-lgHwxlxV1qIg1Eap7LgIeoBWIMFibOjbrYPIPJZcI1mmGAI2m3lNYpK12Y+GBdPQ0U1hRwSord7GIaawz962qQ== + +once@1.x, once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +ordinal@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ordinal/-/ordinal-1.0.3.tgz#1a3c7726a61728112f50944ad7c35c06ae3a0d4d" + integrity sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ== + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-limit@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" + integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== + dependencies: + p-try "^1.0.0" + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" + integrity sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg== + dependencies: + p-limit "^1.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +p-try@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" + integrity sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww== + +parse-cache-control@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" + integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-parse@^1.0.6, path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pbkdf2@^3.0.17: + 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" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +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== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +prettier@^2.3.1: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== + dependencies: + asap "~2.0.6" + +prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +punycode@^2.1.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +qs@^6.4.0: + version "6.12.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.0.tgz#edd40c3b823995946a8a0b1f208669c7a200db77" + integrity sha512-trVZiI6RMOkO476zLGaBIzszOdFPnCCXHPG9kn0yuS1uz6xdVxPfZdB3vUig9pxPFDM9BRAgz/YUIVQ1/vuiUg== + dependencies: + side-channel "^1.0.6" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +raw-body@^2.4.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^2.2.2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +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" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== + dependencies: + minimatch "^3.0.5" + +reduce-flatten@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" + integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== + +req-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" + integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== + dependencies: + req-from "^2.0.0" + +req-from@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/req-from/-/req-from-2.0.0.tgz#d74188e47f93796f4aa71df6ee35ae689f3e0e70" + integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== + dependencies: + resolve-from "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.0, require-from-string@^2.0.2: + 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== + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== + +resolve@1.1.x: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== + +resolve@1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.1.6: + version "1.22.8" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" + integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + dependencies: + is-core-module "^2.13.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" + integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + +rimraf@^2.2.8: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.3, rlp@^2.2.4: + 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 "^5.2.0" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@^5.0.1, 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: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sc-istanbul@^0.4.5: + version "0.4.6" + resolved "https://registry.yarnpkg.com/sc-istanbul/-/sc-istanbul-0.4.6.tgz#cf6784355ff2076f92d70d59047d71c13703e839" + integrity sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g== + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + +scrypt-js@3.0.1, scrypt-js@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.3.tgz#c4559ecd1b8d3c1827ed2d1b94190d69ce267303" + integrity sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA== + dependencies: + elliptic "^6.5.4" + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + +semver@^5.5.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.3.0: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.4: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + +serialize-javascript@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" + integrity sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag== + dependencies: + randombytes "^2.1.0" + +set-function-length@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +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" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +sha1@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" + integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== + dependencies: + charenc ">= 0.0.1" + crypt ">= 0.0.1" + +shelljs@^0.8.3: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +side-channel@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" + integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== + dependencies: + call-bind "^1.0.7" + es-errors "^1.3.0" + get-intrinsic "^1.2.4" + object-inspect "^1.13.1" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +solc@0.7.3: + version "0.7.3" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.7.3.tgz#04646961bd867a744f63d2b4e3c0701ffdc7d78a" + integrity sha512-GAsWNAjGzIDg7VxzP6mPjdurby3IkGCjQcM8GFYZT6RyaoUZKmMU6Y7YwG+tFGhv7dwZ8rmR4iwFDrrD99JwqA== + dependencies: + command-exists "^1.2.8" + commander "3.0.2" + follow-redirects "^1.12.1" + fs-extra "^0.30.0" + js-sha3 "0.8.0" + memorystream "^0.3.1" + require-from-string "^2.0.0" + semver "^5.5.0" + tmp "0.0.33" + +solidity-coverage@^0.8.1: + version "0.8.12" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.12.tgz#c4fa2f64eff8ada7a1387b235d6b5b0e6c6985ed" + integrity sha512-8cOB1PtjnjFRqOgwFiD8DaUsYJtVJ6+YdXQtSZDrLGf8cdhhh8xzTtGzVTGeBf15kTv0v7lYPJlV/az7zLEPJw== + dependencies: + "@ethersproject/abi" "^5.0.9" + "@solidity-parser/parser" "^0.18.0" + chalk "^2.4.2" + death "^1.1.0" + difflib "^0.2.4" + fs-extra "^8.1.0" + ghost-testrpc "^0.0.2" + global-modules "^2.0.0" + globby "^10.0.1" + jsonschema "^1.2.4" + lodash "^4.17.21" + mocha "^10.2.0" + node-emoji "^1.10.0" + pify "^4.0.1" + recursive-readdir "^2.2.2" + sc-istanbul "^0.4.5" + semver "^7.3.4" + shelljs "^0.8.3" + web3-utils "^1.3.6" + +source-map-support@^0.5.13: + 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: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + integrity sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA== + dependencies: + amdefine ">=0.0.4" + +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^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" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stacktrace-parser@^0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.10.tgz#29fb0cae4e0d0b85155879402857a1639eb6051a" + integrity sha512-KJP1OCML99+8fhOHxwwzyWrlUuVX5GQ0ZpJTd1DFXhdkrvg1szxfHhawXUZ3g9TkXORQd4/WG68jMlQZ2p8wlg== + dependencies: + type-fest "^0.7.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +string-format@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" + integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== + +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== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_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== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +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-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + +strip-json-comments@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +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" + integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== + dependencies: + has-flag "^1.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" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +sync-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" + integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== + dependencies: + http-response-object "^3.0.1" + sync-rpc "^1.2.1" + then-request "^6.0.0" + +sync-rpc@^1.2.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7" + integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== + dependencies: + get-port "^3.1.0" + +table-layout@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" + integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== + dependencies: + array-back "^4.0.1" + deep-extend "~0.6.0" + typical "^5.2.0" + wordwrapjs "^4.0.0" + +table@^6.8.0: + version "6.8.2" + resolved "https://registry.yarnpkg.com/table/-/table-6.8.2.tgz#c5504ccf201213fa227248bdc8c5569716ac6c58" + integrity sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +then-request@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/then-request/-/then-request-6.0.2.tgz#ec18dd8b5ca43aaee5cb92f7e4c1630e950d4f0c" + integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== + dependencies: + "@types/concat-stream" "^1.6.0" + "@types/form-data" "0.0.33" + "@types/node" "^8.0.0" + "@types/qs" "^6.2.31" + caseless "~0.12.0" + concat-stream "^1.6.0" + form-data "^2.2.0" + http-basic "^8.1.1" + http-response-object "^3.0.1" + promise "^8.0.0" + qs "^6.4.0" + +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +tmp@0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +ts-command-line-args@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" + integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw== + dependencies: + chalk "^4.1.0" + command-line-args "^5.1.1" + command-line-usage "^6.1.0" + string-format "^2.0.0" + +ts-essentials@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" + integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== + +ts-node@^10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tslib@2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.4.0.tgz#7cecaa7f073ce680a05847aa77be941098f36dc3" + integrity sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ== + +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== + +tweetnacl-util@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type-detect@^4.0.0, type-detect@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +typechain@^8.3.0: + version "8.3.2" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.3.2.tgz#1090dd8d9c57b6ef2aed3640a516bdbf01b00d73" + integrity sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q== + dependencies: + "@types/prettier" "^2.1.1" + debug "^4.3.1" + fs-extra "^7.0.0" + glob "7.1.7" + js-sha3 "^0.8.0" + lodash "^4.17.15" + mkdirp "^1.0.4" + prettier "^2.3.1" + ts-command-line-args "^2.2.0" + ts-essentials "^7.0.1" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typescript@^5.4.4: + version "5.4.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.4.tgz#eb2471e7b0a5f1377523700a21669dce30c2d952" + integrity sha512-dGE2Vv8cpVvw28v8HCPqyb08EzbBURxDpuhJvTrusShUfGnhHBafDsLdS1EhhxyL6BJQE+2cT3dDPAv+MQ6oLw== + +typical@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" + integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== + +typical@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" + integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== + +uglify-js@^3.1.4: + version "3.17.4" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.4.tgz#61678cf5fa3f5b7eb789bb345df29afb8257c22c" + integrity sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +undici@^5.14.0: + version "5.28.4" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.4.tgz#6b280408edb6a1a604a9b20340f45b422e373068" + integrity sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g== + dependencies: + "@fastify/busboy" "^2.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +utf8@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +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-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +web3-utils@^1.3.6: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" + integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== + dependencies: + "@ethereumjs/util" "^8.1.0" + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereum-cryptography "^2.1.2" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +which@^1.1.1, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +word-wrap@~1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +wordwrapjs@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" + integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== + dependencies: + reduce-flatten "^2.0.0" + typical "^5.2.0" + +workerpool@6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.2.1.tgz#46fc150c17d826b86a008e5a4508656777e9c343" + integrity sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +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@8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.5.0.tgz#bfb4be96600757fe5382de12c670dab984a1ed4f" + integrity sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg== + +ws@^7.4.6: + version "7.5.9" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" + integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@20.2.4: + version "20.2.4" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" + integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== + +yargs-parser@^20.2.2: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==